From 3ab46389456578ebb21977f9b092cc20c4119894 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 20 May 2025 18:26:08 -0700 Subject: [PATCH 01/72] ci: pin actions workflow step hashes and use minimum permissions (#1691) --- .github/workflows/ci-build.yml | 15 ++++++++++----- .github/workflows/docs-deploy.yml | 11 +++++++---- .github/workflows/mypy.yml | 11 ++++++++--- .github/workflows/triage-issues.yml | 14 ++++++-------- 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 3a428ab07..6977f77c2 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -3,7 +3,8 @@ name: CI Build on: push: - branches: [main] + branches: + - main pull_request: jobs: @@ -22,13 +23,17 @@ jobs: - "3.8" - "3.7" - "pypy3.10" + permissions: + contents: read env: CI_LARGE_SOCKET_MODE_PAYLOAD_TESTING_DISABLED: "1" FORCE_COLOR: "1" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: ${{ matrix.python-version }} cache: pip @@ -50,7 +55,7 @@ jobs: PYTHONPATH=$PWD:$PYTHONPATH pytest tests/slack_sdk/oauth/state_store/test_sqlalchemy.py - name: Upload test results to Codecov if: ${{ !cancelled() }} - uses: codecov/test-results-action@v1 + uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0 with: directory: ./reports/ flags: ${{ matrix.python-version }} @@ -58,7 +63,7 @@ jobs: verbose: true - name: Upload test coverage to Codecov (only with latest supported version) if: startsWith(matrix.python-version, '3.13') - uses: codecov/codecov-action@v5 + uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 with: token: ${{ secrets.CODECOV_TOKEN }} # Run validation generates the coverage file diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml index d1541d0e2..ed18c4b1d 100644 --- a/.github/workflows/docs-deploy.yml +++ b/.github/workflows/docs-deploy.yml @@ -17,11 +17,14 @@ jobs: build: name: Build Docusaurus runs-on: ubuntu-latest + permissions: + contents: read steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 - - uses: actions/setup-node@v4 + persist-credentials: false + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: 20 cache: npm @@ -36,7 +39,7 @@ jobs: working-directory: ./docs - name: Upload Build Artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1 with: path: ./docs/build @@ -59,4 +62,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5 diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml index c368d1015..ac68eb459 100644 --- a/.github/workflows/mypy.yml +++ b/.github/workflows/mypy.yml @@ -2,7 +2,8 @@ name: mypy validation on: push: - branches: [main] + branches: + - main pull_request: jobs: @@ -12,10 +13,14 @@ jobs: strategy: matrix: python-version: ["3.13"] + permissions: + contents: read steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: ${{ matrix.python-version }} - name: Run mypy verification diff --git a/.github/workflows/triage-issues.yml b/.github/workflows/triage-issues.yml index 0569de984..b37c13422 100644 --- a/.github/workflows/triage-issues.yml +++ b/.github/workflows/triage-issues.yml @@ -4,20 +4,19 @@ name: Close stale issues and PRs -on: +on: workflow_dispatch: schedule: - - cron: '0 0 * * 1' - -permissions: - issues: write - pull-requests: write + - cron: "0 0 * * 1" jobs: stale: runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write steps: - - uses: actions/stale@v9.1.0 + - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0 with: days-before-issue-stale: 30 days-before-issue-close: 10 @@ -31,4 +30,3 @@ jobs: remove-stale-when-updated: true enable-statistics: true operations-per-run: 60 - From 443ca03e425d93f47822a4de5776ff0595f5ed3d Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Fri, 30 May 2025 15:53:08 -0700 Subject: [PATCH 02/72] docs: reference creating an app with scopes to gather a token for installation (#1694) --- docs/content/installation.md | 48 +++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/docs/content/installation.md b/docs/content/installation.md index 6c6b41e2b..761b7f241 100644 --- a/docs/content/installation.md +++ b/docs/content/installation.md @@ -2,14 +2,14 @@ This package supports Python 3.6 and higher. We recommend using [PyPI](https://pypi.python.org/pypi) to install. Run the following command: -``` bash +```bash pip install slack_sdk ``` Alternatively, you can always pull the source code directly into your project: -``` bash +```bash git clone https://github.com/slackapi/python-slack-sdk.git cd python-slack-sdk python3 -m venv .venv @@ -20,7 +20,7 @@ pip install -e . # install the SDK project into the virtual env Create a `./test.py` file with the following: -``` python title="test.py" +```python title="test.py" # test.py import sys # Enable debug logging @@ -34,7 +34,7 @@ api_response = client.api_test() Then, run the script: -``` bash +```bash python test.py ``` @@ -42,6 +42,13 @@ It's also good to try on the Python REPL. ## Access Tokens {#handling-tokens} +Making calls to the Slack API often requires a [token](https://docs.slack.dev/authentication/tokens) with associated scopes that grant access to resources. + +Collecting a token can be done from app settings or with an OAuth installation depending on your app's requirements: + +- [Single Workspace Install](#single-workspace-install) +- [Multiple Workspace Install](#multiple-workspace-install) + **Always keep your access tokens safe.** The OAuth token you use to call the Slack API has access to the data on @@ -52,12 +59,11 @@ ability to read and write data. Treat these tokens just as you would a password — don't publish them, don't check them into source code, and don't share them with others. - :::danger Never do the following: -``` python +```python token = 'xoxb-111-222-xxxxx' ``` @@ -67,13 +73,13 @@ We recommend you pass tokens in as environment variables, or persist them in a database that is accessed at runtime. You can add a token to the environment by starting your app as: -``` python +```python SLACK_BOT_TOKEN="xoxb-111-222-xxxxx" python myapp.py ``` Then retrieve the key with: -``` python +```python import os SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"] ``` @@ -85,13 +91,11 @@ Credentials](https://api.slack.com/authentication/best-practices) page within th ### Single Workspace Install -If you're building an application for a single Slack workspace, -there's no need to build out the entire OAuth flow. +If you're building an application for a single Slack workspace, there's no need to build out the entire OAuth flow. + +After [creating an app](https://api.slack.com/apps?new_app=1) and adding [scopes](http://docs.slack.dev/reference/scopes) on the **OAuth & Permissions** page, go to the **Install App** page and click the **Install to Team** button to authorize the app and generate a token. -Once you've setup your features, click on the **Install App to Team** -button found on the **Install App** page. If you add new permission -scopes or Slack app features after an app has been installed, you must -reinstall the app to your workspace for changes to take effect. +If you add new permission scopes or Slack app features after an app has been installed, you must reinstall the app to your workspace for changes to take effect. ## Multiple Workspace Install @@ -109,9 +113,9 @@ token once it is granted. The client ID and client secret are available from your [app's configuration page](https://api.slack.com/apps). The scopes are determined by the functionality of the app — every method you wish to access has a corresponding scope and your app will need to -request that scope in order to be able to access the method. Review the [full list of Slack OAuth scopes](https://api.slack.com/scopes). +request that scope in order to be able to access the method. Review the [full list of Slack OAuth scopes](http://docs.slack.dev/reference/scopes). -``` python +```python import os from slack_sdk import WebClient from flask import Flask, request @@ -136,7 +140,7 @@ This link directs the user to the Slack OAuth acceptance page, where the user will review and accept or refuse the permissions your app is requesting as defined by the scope(s). -``` python +```python @app.route("/slack/install", methods=["GET"]) def pre_install(): state = "randomly-generated-one-time-value" @@ -154,7 +158,7 @@ will redirect the user to your auth completion page, which includes a [endpoint](https://api.slack.com/methods/oauth.v2.access) that will finally grant you the token. -``` python +```python @app.route("/slack/oauth_redirect", methods=["GET"]) def post_install(): # Verify the "state" parameter @@ -176,7 +180,7 @@ def post_install(): A successful request to `oauth.v2.access` will yield a JSON payload with at least one token, a bot token that begins with `xoxb`. -``` python +```python @app.route("/slack/oauth_redirect", methods=["GET"]) def post_install(): # Verify the "state" parameter @@ -216,7 +220,7 @@ We recommend using [virtualenv (venv)](https://docs.python.org/3/tutorial/venv.html) to set up your Python runtime. -``` bash +```bash # Create a dedicated virtual env for running your Python scripts python -m venv .venv @@ -233,7 +237,7 @@ export SLACK_BOT_TOKEN=xoxb-*** Then, verify the following code works on the Python REPL (you can start it by just `python`). -``` python +```python import os import logging from slack_sdk import WebClient @@ -247,4 +251,4 @@ package. That being said, the code you're working on may be still using the old package. If you encounter an error saying `AttributeError: module 'slack' has no attribute 'WebClient'`, run `pip list`. If you find both `slack_sdk` and `slack` in the output, try -removing `slack` by `pip uninstall slack` and reinstalling `slack_sdk`. \ No newline at end of file +removing `slack` by `pip uninstall slack` and reinstalling `slack_sdk`. From 27fae2f75d7d8d74fc9b873512cd8f242edd2f2e Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Mon, 2 Jun 2025 16:32:46 -0400 Subject: [PATCH 03/72] Update test_aiohttp.py (#1697) --- tests/slack_sdk_async/socket_mode/test_aiohttp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/slack_sdk_async/socket_mode/test_aiohttp.py b/tests/slack_sdk_async/socket_mode/test_aiohttp.py index 44bb2d9db..eda1fecdd 100644 --- a/tests/slack_sdk_async/socket_mode/test_aiohttp.py +++ b/tests/slack_sdk_async/socket_mode/test_aiohttp.py @@ -37,7 +37,7 @@ async def test_init_with_loop(self): app_token="xapp-A111-222-xyz", web_client=self.web_client, auto_reconnect_enabled=False, - loop=asyncio.new_event_loop(), + loop=asyncio.get_event_loop(), ) try: self.assertIsNotNone(client) From 7e366b19bd2b8e27e231ca598cc3d58138da2de0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 20:42:25 +0000 Subject: [PATCH 04/72] chore(deps): bump the docusaurus group in /docs with 5 updates (#1696) --- docs/package-lock.json | 1986 ++++++++++++++++------------------------ docs/package.json | 6 +- 2 files changed, 774 insertions(+), 1218 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 3c69cff36..4778990d8 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8,9 +8,9 @@ "name": "website", "version": "2024.08.01", "dependencies": { - "@docusaurus/core": "^3.7.0", - "@docusaurus/plugin-client-redirects": "^3.7.0", - "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/core": "^3.8.0", + "@docusaurus/plugin-client-redirects": "^3.8.0", + "@docusaurus/preset-classic": "^3.8.0", "@mdx-js/react": "^3.1.0", "clsx": "^2.0.0", "docusaurus-theme-github-codeblock": "^2.0.2", @@ -72,99 +72,99 @@ } }, "node_modules/@algolia/client-abtesting": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.20.3.tgz", - "integrity": "sha512-wPOzHYSsW+H97JkBLmnlOdJSpbb9mIiuNPycUCV5DgzSkJFaI/OFxXfZXAh1gqxK+hf0miKue1C9bltjWljrNA==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.25.0.tgz", + "integrity": "sha512-1pfQulNUYNf1Tk/svbfjfkLBS36zsuph6m+B6gDkPEivFmso/XnRgwDvjAx80WNtiHnmeNjIXdF7Gos8+OLHqQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.20.3.tgz", - "integrity": "sha512-XE3iduH9lA7iTQacDGofBQyIyIgaX8qbTRRdj1bOCmfzc9b98CoiMwhNwdTifmmMewmN0EhVF3hP8KjKWwX7Yw==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.25.0.tgz", + "integrity": "sha512-AFbG6VDJX/o2vDd9hqncj1B6B4Tulk61mY0pzTtzKClyTDlNP0xaUiEKhl6E7KO9I/x0FJF5tDCm0Hn6v5x18A==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.20.3.tgz", - "integrity": "sha512-IYRd/A/R3BXeaQVT2805lZEdWo54v39Lqa7ABOxIYnUvX2vvOMW1AyzCuT0U7Q+uPdD4UW48zksUKRixShcWxA==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.25.0.tgz", + "integrity": "sha512-il1zS/+Rc6la6RaCdSZ2YbJnkQC6W1wiBO8+SH+DE6CPMWBU6iDVzH0sCKSAtMWl9WBxoN6MhNjGBnCv9Yy2bA==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.20.3.tgz", - "integrity": "sha512-QGc/bmDUBgzB71rDL6kihI2e1Mx6G6PxYO5Ks84iL3tDcIel1aFuxtRF14P8saGgdIe1B6I6QkpkeIddZ6vWQw==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.25.0.tgz", + "integrity": "sha512-blbjrUH1siZNfyCGeq0iLQu00w3a4fBXm0WRIM0V8alcAPo7rWjLbMJMrfBtzL9X5ic6wgxVpDADXduGtdrnkw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.20.3.tgz", - "integrity": "sha512-zuM31VNPDJ1LBIwKbYGz/7+CSm+M8EhlljDamTg8AnDilnCpKjBebWZR5Tftv/FdWSro4tnYGOIz1AURQgZ+tQ==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.25.0.tgz", + "integrity": "sha512-aywoEuu1NxChBcHZ1pWaat0Plw7A8jDMwjgRJ00Mcl7wGlwuPt5dJ/LTNcg3McsEUbs2MBNmw0ignXBw9Tbgow==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.20.3.tgz", - "integrity": "sha512-Nn872PuOI8qzi1bxMMhJ0t2AzVBqN01jbymBQOkypvZHrrjZPso3iTpuuLLo9gi3yc/08vaaWTAwJfPhxPwJUw==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.25.0.tgz", + "integrity": "sha512-a/W2z6XWKjKjIW1QQQV8PTTj1TXtaKx79uR3NGBdBdGvVdt24KzGAaN7sCr5oP8DW4D3cJt44wp2OY/fZcPAVA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.20.3.tgz", - "integrity": "sha512-9+Fm1ahV8/2goSIPIqZnVitV5yHW5E5xTdKy33xnqGd45A9yVv5tTkudWzEXsbfBB47j9Xb3uYPZjAvV5RHbKA==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.25.0.tgz", + "integrity": "sha512-9rUYcMIBOrCtYiLX49djyzxqdK9Dya/6Z/8sebPn94BekT+KLOpaZCuc6s0Fpfq7nx5J6YY5LIVFQrtioK9u0g==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" @@ -177,81 +177,81 @@ "license": "MIT" }, "node_modules/@algolia/ingestion": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.20.3.tgz", - "integrity": "sha512-5GHNTiZ3saLjTNyr6WkP5hzDg2eFFAYWomvPcm9eHWskjzXt8R0IOiW9kkTS6I6hXBwN5H9Zna5mZDSqqJdg+g==", + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.25.0.tgz", + "integrity": "sha512-jJeH/Hk+k17Vkokf02lkfYE4A+EJX+UgnMhTLR/Mb+d1ya5WhE+po8p5a/Nxb6lo9OLCRl6w3Hmk1TX1e9gVbQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.20.3.tgz", - "integrity": "sha512-KUWQbTPoRjP37ivXSQ1+lWMfaifCCMzTnEcEnXwAmherS5Tp7us6BAqQDMGOD4E7xyaS2I8pto6WlOzxH+CxmA==", + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.25.0.tgz", + "integrity": "sha512-Ls3i1AehJ0C6xaHe7kK9vPmzImOn5zBg7Kzj8tRYIcmCWVyuuFwCIsbuIIz/qzUf1FPSWmw0TZrGeTumk2fqXg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.20.3.tgz", - "integrity": "sha512-oo/gG77xTTTclkrdFem0Kmx5+iSRFiwuRRdxZETDjwzCI7svutdbwBgV/Vy4D4QpYaX4nhY/P43k84uEowCE4Q==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.25.0.tgz", + "integrity": "sha512-79sMdHpiRLXVxSjgw7Pt4R1aNUHxFLHiaTDnN2MQjHwJ1+o3wSseb55T9VXU4kqy3m7TUme3pyRhLk5ip/S4Mw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.20.3.tgz", - "integrity": "sha512-BkkW7otbiI/Er1AiEPZs1h7lxbtSO9p09jFhv3/iT8/0Yz0CY79VJ9iq+Wv1+dq/l0OxnMpBy8mozrieGA3mXQ==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.25.0.tgz", + "integrity": "sha512-JLaF23p1SOPBmfEqozUAgKHQrGl3z/Z5RHbggBu6s07QqXXcazEsub5VLonCxGVqTv6a61AAPr8J1G5HgGGjEw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.3" + "@algolia/client-common": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.20.3.tgz", - "integrity": "sha512-eAVlXz7UNzTsA1EDr+p0nlIH7WFxo7k3NMxYe8p38DH8YVWLgm2MgOVFUMNg9HCi6ZNOi/A2w/id2ZZ4sKgUOw==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.25.0.tgz", + "integrity": "sha512-rtzXwqzFi1edkOF6sXxq+HhmRKDy7tz84u0o5t1fXwz0cwx+cjpmxu/6OQKTdOJFS92JUYHsG51Iunie7xbqfQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.3" + "@algolia/client-common": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.20.3.tgz", - "integrity": "sha512-FqR3pQPfHfQyX1wgcdK6iyqu86yP76MZd4Pzj1y/YLMj9rRmRCY0E0AffKr//nrOFEwv6uY8BQY4fd9/6b0ZCg==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.25.0.tgz", + "integrity": "sha512-ZO0UKvDyEFvyeJQX0gmZDQEvhLZ2X10K+ps6hViMo1HgE2V8em00SwNsQ+7E/52a+YiBkVWX61pJJJE44juDMQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.3" + "@algolia/client-common": "5.25.0" }, "engines": { "node": ">= 14.0.0" @@ -270,13 +270,14 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -328,12 +329,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz", + "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==", + "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", + "@babel/parser": "^7.27.3", + "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -441,9 +443,10 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -468,12 +471,13 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -507,9 +511,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -572,17 +576,19 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -622,12 +628,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.4.tgz", + "integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.0" + "@babel/types": "^7.27.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -1370,12 +1376,12 @@ } }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz", - "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", + "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1490,15 +1496,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.9.tgz", - "integrity": "sha512-Jf+8y9wXQbbxvVYTM8gO5oEF2POdNji0NMltEkG7FtmzD9PVz7/lxpqSdTvwsjTMU5HIHuDVNf2SOxLkWi+wPQ==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz", + "integrity": "sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, @@ -1509,6 +1515,19 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -1819,42 +1838,42 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.0.tgz", - "integrity": "sha512-UWjX6t+v+0ckwZ50Y5ShZLnlk95pP5MyW/pon9tiYzl3+18pkTHTFNTKr7rQbfRXPkowt2QAn30o1b6oswszew==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.4.tgz", + "integrity": "sha512-H7QhL0ucCGOObsUETNbB2PuzF4gAvN8p32P6r91bX7M/hk4bx+3yz2hTwHL9d/Efzwu1upeb4/cd7oSxCzup3w==", "license": "MIT", "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" + "core-js-pure": "^3.30.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1863,13 +1882,13 @@ } }, "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz", + "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1886,9 +1905,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz", - "integrity": "sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", + "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", "funding": [ { "type": "github", @@ -1904,8 +1923,8 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/color-helpers": { @@ -1928,9 +1947,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.2.tgz", - "integrity": "sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", "funding": [ { "type": "github", @@ -1946,14 +1965,14 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-color-parser": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.8.tgz", - "integrity": "sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", + "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", "funding": [ { "type": "github", @@ -1967,20 +1986,20 @@ "license": "MIT", "dependencies": { "@csstools/color-helpers": "^5.0.2", - "@csstools/css-calc": "^2.1.2" + "@csstools/css-calc": "^2.1.4" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "funding": [ { "type": "github", @@ -1996,13 +2015,13 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "funding": [ { "type": "github", @@ -2019,9 +2038,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "funding": [ { "type": "github", @@ -2037,8 +2056,8 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/postcss-cascade-layers": { @@ -2103,9 +2122,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.8.tgz", - "integrity": "sha512-9dUvP2qpZI6PlGQ/sob+95B3u5u7nkYt9yhZFCC7G9HBRHBxj+QxS/wUlwaMGYW0waf+NIierI8aoDTssEdRYw==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz", + "integrity": "sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ==", "funding": [ { "type": "github", @@ -2118,10 +2137,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2132,9 +2151,38 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.8.tgz", - "integrity": "sha512-yuZpgWUzqZWQhEqfvtJufhl28DgO9sBwSbXbf/59gejNuvZcoUTRGQZhzhwF4ccqb53YAGB+u92z9+eSKoB4YA==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz", + "integrity": "sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz", + "integrity": "sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ==", "funding": [ { "type": "github", @@ -2147,10 +2195,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2161,9 +2209,9 @@ } }, "node_modules/@csstools/postcss-content-alt-text": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz", - "integrity": "sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz", + "integrity": "sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ==", "funding": [ { "type": "github", @@ -2176,9 +2224,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2189,9 +2237,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.7.tgz", - "integrity": "sha512-XTb6Mw0v2qXtQYRW9d9duAjDnoTbBpsngD7sRNLmYDjvwU2ebpIHplyxgOeo6jp/Kr52gkLi5VaK5RDCqzMzZQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", + "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", "funding": [ { "type": "github", @@ -2204,9 +2252,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2242,9 +2290,9 @@ } }, "node_modules/@csstools/postcss-gamut-mapping": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.8.tgz", - "integrity": "sha512-/K8u9ZyGMGPjmwCSIjgaOLKfic2RIGdFHHes84XW5LnmrvdhOTVxo255NppHi3ROEvoHPW7MplMJgjZK5Q+TxA==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz", + "integrity": "sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg==", "funding": [ { "type": "github", @@ -2257,9 +2305,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2269,9 +2317,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.8.tgz", - "integrity": "sha512-CoHQ/0UXrvxLovu0ZeW6c3/20hjJ/QRg6lyXm3dZLY/JgvRU6bdbQZF/Du30A4TvowfcgvIHQmP1bNXUxgDrAw==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz", + "integrity": "sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw==", "funding": [ { "type": "github", @@ -2284,10 +2332,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2298,9 +2346,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.8.tgz", - "integrity": "sha512-LpFKjX6hblpeqyych1cKmk+3FJZ19QmaJtqincySoMkbkG/w2tfbnO5oE6mlnCTXcGUJ0rCEuRHvTqKK0nHYUQ==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz", + "integrity": "sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ==", "funding": [ { "type": "github", @@ -2313,10 +2361,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2327,9 +2375,9 @@ } }, "node_modules/@csstools/postcss-ic-unit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz", - "integrity": "sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz", + "integrity": "sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA==", "funding": [ { "type": "github", @@ -2342,7 +2390,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -2437,9 +2485,9 @@ } }, "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz", - "integrity": "sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz", + "integrity": "sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ==", "funding": [ { "type": "github", @@ -2452,9 +2500,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2556,9 +2604,9 @@ } }, "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz", - "integrity": "sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", + "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", "funding": [ { "type": "github", @@ -2571,7 +2619,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2582,9 +2630,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.7.tgz", - "integrity": "sha512-LB6tIP7iBZb5CYv8iRenfBZmbaG3DWNEziOnPjGoQX5P94FBPvvTBy68b/d9NnS5PELKwFmmOYsAEIgEhDPCHA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", + "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", "funding": [ { "type": "github", @@ -2597,10 +2645,10 @@ ], "license": "MIT", "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { "node": ">=18" @@ -2610,9 +2658,9 @@ } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz", - "integrity": "sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", + "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", "funding": [ { "type": "github", @@ -2625,9 +2673,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { "node": ">=18" @@ -2688,9 +2736,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.8.tgz", - "integrity": "sha512-+5aPsNWgxohXoYNS1f+Ys0x3Qnfehgygv3qrPyv+Y25G0yX54/WlVB+IXprqBLOXHM1gsVF+QQSjlArhygna0Q==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz", + "integrity": "sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg==", "funding": [ { "type": "github", @@ -2703,10 +2751,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2717,9 +2765,9 @@ } }, "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz", - "integrity": "sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz", + "integrity": "sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA==", "funding": [ { "type": "github", @@ -2742,9 +2790,9 @@ } }, "node_modules/@csstools/postcss-random-function": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.3.tgz", - "integrity": "sha512-dbNeEEPHxAwfQJ3duRL5IPpuD77QAHtRl4bAHRs0vOVhVbHrsL7mHnwe0irYjbs9kYwhAHZBQTLBgmvufPuRkA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", + "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", "funding": [ { "type": "github", @@ -2757,9 +2805,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2769,9 +2817,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.8.tgz", - "integrity": "sha512-eGE31oLnJDoUysDdjS9MLxNZdtqqSxjDXMdISpLh80QMaYrKs7VINpid34tWQ+iU23Wg5x76qAzf1Q/SLLbZVg==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz", + "integrity": "sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g==", "funding": [ { "type": "github", @@ -2784,10 +2832,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2836,9 +2884,9 @@ } }, "node_modules/@csstools/postcss-sign-functions": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.2.tgz", - "integrity": "sha512-4EcAvXTUPh7n6UoZZkCzgtCf/wPzMlTNuddcKg7HG8ozfQkUcHsJ2faQKeLmjyKdYPyOUn4YA7yDPf8K/jfIxw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", + "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", "funding": [ { "type": "github", @@ -2851,9 +2899,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2863,9 +2911,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.7.tgz", - "integrity": "sha512-rdrRCKRnWtj5FyRin0u/gLla7CIvZRw/zMGI1fVJP0Sg/m1WGicjPVHRANL++3HQtsiXKAbPrcPr+VkyGck0IA==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", + "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", "funding": [ { "type": "github", @@ -2878,9 +2926,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2916,9 +2964,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.7.tgz", - "integrity": "sha512-qTrZgLju3AV7Djhzuh2Bq/wjFqbcypnk0FhHjxW8DWJQcZLS1HecIus4X2/RLch1ukX7b+YYCdqbEnpIQO5ccg==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", + "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", "funding": [ { "type": "github", @@ -2931,9 +2979,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -3034,9 +3082,9 @@ } }, "node_modules/@docusaurus/babel": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.7.0.tgz", - "integrity": "sha512-0H5uoJLm14S/oKV3Keihxvh8RV+vrid+6Gv+2qhuzbqHanawga8tYnsdpjEyt36ucJjqlby2/Md2ObWjA02UXQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.0.tgz", + "integrity": "sha512-9EJwSgS6TgB8IzGk1L8XddJLhZod8fXT4ULYMx6SKqyCBqCFpVCEjR/hNXXhnmtVM2irDuzYoVLGWv7srG/VOA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", @@ -3049,8 +3097,8 @@ "@babel/runtime": "^7.25.9", "@babel/runtime-corejs3": "^7.25.9", "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/utils": "3.8.0", "babel-plugin-dynamic-import-node": "^2.3.3", "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -3060,17 +3108,17 @@ } }, "node_modules/@docusaurus/bundler": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.7.0.tgz", - "integrity": "sha512-CUUT9VlSGukrCU5ctZucykvgCISivct+cby28wJwCC/fkQFgAHRp/GKv2tx38ZmXb7nacrKzFTcp++f9txUYGg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.0.tgz", + "integrity": "sha512-Rq4Z/MSeAHjVzBLirLeMcjLIAQy92pF1OI+2rmt18fSlMARfTGLWRE8Vb+ljQPTOSfJxwDYSzsK6i7XloD2rNA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.7.0", - "@docusaurus/cssnano-preset": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", + "@docusaurus/babel": "3.8.0", + "@docusaurus/cssnano-preset": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", "babel-loader": "^9.2.1", "clean-css": "^5.3.2", "copy-webpack-plugin": "^11.0.0", @@ -3084,7 +3132,6 @@ "postcss": "^8.4.26", "postcss-loader": "^7.3.3", "postcss-preset-env": "^10.1.0", - "react-dev-utils": "^12.0.1", "terser-webpack-plugin": "^5.3.9", "tslib": "^2.6.0", "url-loader": "^4.1.1", @@ -3104,18 +3151,18 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.7.0.tgz", - "integrity": "sha512-b0fUmaL+JbzDIQaamzpAFpTviiaU4cX3Qz8cuo14+HGBCwa0evEK0UYCBFY3n4cLzL8Op1BueeroUD2LYAIHbQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/babel": "3.7.0", - "@docusaurus/bundler": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.0.tgz", + "integrity": "sha512-c7u6zFELmSGPEP9WSubhVDjgnpiHgDqMh1qVdCB7rTflh4Jx0msTYmMiO91Ez0KtHj4sIsDsASnjwfJ2IZp3Vw==", + "license": "MIT", + "dependencies": { + "@docusaurus/babel": "3.8.0", + "@docusaurus/bundler": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/mdx-loader": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", @@ -3123,19 +3170,19 @@ "combine-promises": "^1.1.0", "commander": "^5.1.0", "core-js": "^3.31.1", - "del": "^6.1.1", "detect-port": "^1.5.1", "escape-html": "^1.0.3", "eta": "^2.2.0", "eval": "^0.1.8", + "execa": "5.1.1", "fs-extra": "^11.1.1", "html-tags": "^3.3.1", "html-webpack-plugin": "^5.6.0", "leven": "^3.1.0", "lodash": "^4.17.21", + "open": "^8.4.0", "p-map": "^4.0.0", "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", @@ -3144,7 +3191,7 @@ "react-router-dom": "^5.3.4", "semver": "^7.5.4", "serve-handler": "^6.1.6", - "shelljs": "^0.8.5", + "tinypool": "^1.0.2", "tslib": "^2.6.0", "update-notifier": "^6.0.2", "webpack": "^5.95.0", @@ -3165,9 +3212,9 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.7.0.tgz", - "integrity": "sha512-X9GYgruZBSOozg4w4dzv9uOz8oK/EpPVQXkp0MM6Tsgp/nRIU9hJzJ0Pxg1aRa3xCeEQTOimZHcocQFlLwYajQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.0.tgz", + "integrity": "sha512-UJ4hAS2T0R4WNy+phwVff2Q0L5+RXW9cwlH6AEphHR5qw3m/yacfWcSK7ort2pMMbDn8uGrD38BTm4oLkuuNoQ==", "license": "MIT", "dependencies": { "cssnano-preset-advanced": "^6.1.2", @@ -3180,9 +3227,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.7.0.tgz", - "integrity": "sha512-z7g62X7bYxCYmeNNuO9jmzxLQG95q9QxINCwpboVcNff3SJiHJbGrarxxOVMVmAh1MsrSfxWkVGv4P41ktnFsA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.0.tgz", + "integrity": "sha512-7eEMaFIam5Q+v8XwGqF/n0ZoCld4hV4eCCgQkfcN9Mq5inoZa6PHHW9Wu6lmgzoK5Kx3keEeABcO2SxwraoPDQ==", "license": "MIT", "dependencies": { "chalk": "^4.1.2", @@ -3193,21 +3240,21 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.7.0.tgz", - "integrity": "sha512-OFBG6oMjZzc78/U3WNPSHs2W9ZJ723ewAcvVJaqS0VgyeUfmzUV8f1sv+iUHA0DtwiR5T5FjOxj6nzEE8LY6VA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.0.tgz", + "integrity": "sha512-mDPSzssRnpjSdCGuv7z2EIAnPS1MHuZGTaRLwPn4oQwszu4afjWZ/60sfKjTnjBjI8Vl4OgJl2vMmfmiNDX4Ng==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", "estree-util-value-to-estree": "^3.0.1", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", - "image-size": "^1.0.2", + "image-size": "^2.0.2", "mdast-util-mdx": "^3.0.0", "mdast-util-to-string": "^4.0.0", "rehype-raw": "^7.0.0", @@ -3232,17 +3279,17 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.7.0.tgz", - "integrity": "sha512-g7WdPqDNaqA60CmBrr0cORTrsOit77hbsTj7xE2l71YhBn79sxdm7WMK7wfhcaafkbpIh7jv5ef5TOpf1Xv9Lg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.0.tgz", + "integrity": "sha512-/uMb4Ipt5J/QnD13MpnoC/A4EYAe6DKNWqTWLlGrqsPJwJv73vSwkA25xnYunwfqWk0FlUQfGv/Swdh5eCCg7g==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.7.0", + "@docusaurus/types": "3.8.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", - "react-helmet-async": "npm:@slorber/react-helmet-async@*", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" }, "peerDependencies": { @@ -3251,16 +3298,16 @@ } }, "node_modules/@docusaurus/plugin-client-redirects": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.7.0.tgz", - "integrity": "sha512-6B4XAtE5ZVKOyhPgpgMkb7LwCkN+Hgd4vOnlbwR8nCdTQhLjz8MHbGlwwvZ/cay2SPNRX5KssqKAlcHVZP2m8g==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.8.0.tgz", + "integrity": "sha512-J8f5qzAlO61BnG1I91+N5WH1b/lPWqn6ifTxf/Bluz9JVe1bhFNSl0yW03p+Ff3AFOINDy2ofX70al9nOnOLyw==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "eta": "^2.2.0", "fs-extra": "^11.1.1", "lodash": "^4.17.21", @@ -3275,24 +3322,24 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.7.0.tgz", - "integrity": "sha512-EFLgEz6tGHYWdPU0rK8tSscZwx+AsyuBW/r+tNig2kbccHYGUJmZtYN38GjAa3Fda4NU+6wqUO5kTXQSRBQD3g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.0.tgz", + "integrity": "sha512-0SlOTd9R55WEr1GgIXu+hhTT0hzARYx3zIScA5IzpdekZQesI/hKEa5LPHBd415fLkWMjdD59TaW/3qQKpJ0Lg==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/mdx-loader": "3.8.0", + "@docusaurus/theme-common": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "cheerio": "1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^11.1.1", "lodash": "^4.17.21", - "reading-time": "^1.5.0", + "schema-dts": "^1.1.2", "srcset": "^4.0.0", "tslib": "^2.6.0", "unist-util-visit": "^5.0.0", @@ -3309,25 +3356,26 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.7.0.tgz", - "integrity": "sha512-GXg5V7kC9FZE4FkUZA8oo/NrlRb06UwuICzI6tcbzj0+TVgjq/mpUXXzSgKzMS82YByi4dY2Q808njcBCyy6tQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.0.tgz", + "integrity": "sha512-fRDMFLbUN6eVRXcjP8s3Y7HpAt9pzPYh1F/7KKXOCxvJhjjCtbon4VJW0WndEPInVz4t8QUXn5QZkU2tGVCE2g==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/mdx-loader": "3.8.0", + "@docusaurus/module-type-aliases": "3.8.0", + "@docusaurus/theme-common": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", "js-yaml": "^4.1.0", "lodash": "^4.17.21", + "schema-dts": "^1.1.2", "tslib": "^2.6.0", "utility-types": "^3.10.0", "webpack": "^5.88.1" @@ -3341,16 +3389,16 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.7.0.tgz", - "integrity": "sha512-YJSU3tjIJf032/Aeao8SZjFOrXJbz/FACMveSMjLyMH4itQyZ2XgUIzt4y+1ISvvk5zrW4DABVT2awTCqBkx0Q==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.0.tgz", + "integrity": "sha512-39EDx2y1GA0Pxfion5tQZLNJxL4gq6susd1xzetVBjVIQtwpCdyloOfQBAgX0FylqQxfJrYqL0DIUuq7rd7uBw==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/mdx-loader": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" @@ -3363,48 +3411,51 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@docusaurus/plugin-debug": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.7.0.tgz", - "integrity": "sha512-Qgg+IjG/z4svtbCNyTocjIwvNTNEwgRjSXXSJkKVG0oWoH0eX/HAPiu+TS1HBwRPQV+tTYPWLrUypYFepfujZA==", + "node_modules/@docusaurus/plugin-css-cascade-layers": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.0.tgz", + "integrity": "sha512-/VBTNymPIxQB8oA3ZQ4GFFRYdH4ZxDRRBECxyjRyv486mfUPXfcdk+im4S5mKWa6EK2JzBz95IH/Wu0qQgJ5yQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "fs-extra": "^11.1.1", - "react-json-view-lite": "^1.2.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "tslib": "^2.6.0" }, "engines": { "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@docusaurus/plugin-debug/node_modules/react-json-view-lite": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", - "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", + "node_modules/@docusaurus/plugin-debug": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.0.tgz", + "integrity": "sha512-teonJvJsDB9o2OnG6ifbhblg/PXzZvpUKHFgD8dOL1UJ58u0lk8o0ZOkvaYEBa9nDgqzoWrRk9w+e3qaG2mOhQ==", "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "fs-extra": "^11.1.1", + "react-json-view-lite": "^2.3.0", + "tslib": "^2.6.0" + }, "engines": { - "node": ">=14" + "node": ">=18.0" }, "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.7.0.tgz", - "integrity": "sha512-otIqiRV/jka6Snjf+AqB360XCeSv7lQC+DKYW+EUZf6XbuE8utz5PeUQ8VuOcD8Bk5zvT1MC4JKcd5zPfDuMWA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.0.tgz", + "integrity": "sha512-aKKa7Q8+3xRSRESipNvlFgNp3FNPELKhuo48Cg/svQbGNwidSHbZT03JqbW4cBaQnyyVchO1ttk+kJ5VC9Gx0w==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "tslib": "^2.6.0" }, "engines": { @@ -3416,14 +3467,14 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.7.0.tgz", - "integrity": "sha512-M3vrMct1tY65ModbyeDaMoA+fNJTSPe5qmchhAbtqhDD/iALri0g9LrEpIOwNaoLmm6lO88sfBUADQrSRSGSWA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.0.tgz", + "integrity": "sha512-ugQYMGF4BjbAW/JIBtVcp+9eZEgT9HRdvdcDudl5rywNPBA0lct+lXMG3r17s02rrhInMpjMahN3Yc9Cb3H5/g==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" }, @@ -3436,14 +3487,14 @@ } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.7.0.tgz", - "integrity": "sha512-X8U78nb8eiMiPNg3jb9zDIVuuo/rE1LjGDGu+5m5CX4UBZzjMy+klOY2fNya6x8ACyE/L3K2erO1ErheP55W/w==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.0.tgz", + "integrity": "sha512-9juRWxbwZD3SV02Jd9QB6yeN7eu+7T4zB0bvJLcVQwi+am51wAxn2CwbdL0YCCX+9OfiXbADE8D8Q65Hbopu/w==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "tslib": "^2.6.0" }, "engines": { @@ -3455,17 +3506,17 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.7.0.tgz", - "integrity": "sha512-bTRT9YLZ/8I/wYWKMQke18+PF9MV8Qub34Sku6aw/vlZ/U+kuEuRpQ8bTcNOjaTSfYsWkK4tTwDMHK2p5S86cA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.0.tgz", + "integrity": "sha512-fGpOIyJvNiuAb90nSJ2Gfy/hUOaDu6826e5w5UxPmbpCIc7KlBHNAZ5g4L4ZuHhc4hdfq4mzVBsQSnne+8Ze1g==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" @@ -3479,15 +3530,15 @@ } }, "node_modules/@docusaurus/plugin-svgr": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.7.0.tgz", - "integrity": "sha512-HByXIZTbc4GV5VAUkZ2DXtXv1Qdlnpk3IpuImwSnEzCDBkUMYcec5282hPjn6skZqB25M1TYCmWS91UbhBGxQg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.0.tgz", + "integrity": "sha512-kEDyry+4OMz6BWLG/lEqrNsL/w818bywK70N1gytViw4m9iAmoxCUT7Ri9Dgs7xUdzCHJ3OujolEmD88Wy44OA==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "@svgr/core": "8.1.0", "@svgr/webpack": "^8.1.0", "tslib": "^2.6.0", @@ -3502,25 +3553,26 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.7.0.tgz", - "integrity": "sha512-nPHj8AxDLAaQXs+O6+BwILFuhiWbjfQWrdw2tifOClQoNfuXDjfjogee6zfx6NGHWqshR23LrcN115DmkHC91Q==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/plugin-debug": "3.7.0", - "@docusaurus/plugin-google-analytics": "3.7.0", - "@docusaurus/plugin-google-gtag": "3.7.0", - "@docusaurus/plugin-google-tag-manager": "3.7.0", - "@docusaurus/plugin-sitemap": "3.7.0", - "@docusaurus/plugin-svgr": "3.7.0", - "@docusaurus/theme-classic": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-search-algolia": "3.7.0", - "@docusaurus/types": "3.7.0" + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.0.tgz", + "integrity": "sha512-qOu6tQDOWv+rpTlKu+eJATCJVGnABpRCPuqf7LbEaQ1mNY//N/P8cHQwkpAU+aweQfarcZ0XfwCqRHJfjeSV/g==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.8.0", + "@docusaurus/plugin-content-blog": "3.8.0", + "@docusaurus/plugin-content-docs": "3.8.0", + "@docusaurus/plugin-content-pages": "3.8.0", + "@docusaurus/plugin-css-cascade-layers": "3.8.0", + "@docusaurus/plugin-debug": "3.8.0", + "@docusaurus/plugin-google-analytics": "3.8.0", + "@docusaurus/plugin-google-gtag": "3.8.0", + "@docusaurus/plugin-google-tag-manager": "3.8.0", + "@docusaurus/plugin-sitemap": "3.8.0", + "@docusaurus/plugin-svgr": "3.8.0", + "@docusaurus/theme-classic": "3.8.0", + "@docusaurus/theme-common": "3.8.0", + "@docusaurus/theme-search-algolia": "3.8.0", + "@docusaurus/types": "3.8.0" }, "engines": { "node": ">=18.0" @@ -3531,24 +3583,24 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.7.0.tgz", - "integrity": "sha512-MnLxG39WcvLCl4eUzHr0gNcpHQfWoGqzADCly54aqCofQX6UozOS9Th4RK3ARbM9m7zIRv3qbhggI53dQtx/hQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.0.tgz", + "integrity": "sha512-nQWFiD5ZjoT76OaELt2n33P3WVuuCz8Dt5KFRP2fCBo2r9JCLsp2GJjZpnaG24LZ5/arRjv4VqWKgpK0/YLt7g==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/mdx-loader": "3.8.0", + "@docusaurus/module-type-aliases": "3.8.0", + "@docusaurus/plugin-content-blog": "3.8.0", + "@docusaurus/plugin-content-docs": "3.8.0", + "@docusaurus/plugin-content-pages": "3.8.0", + "@docusaurus/theme-common": "3.8.0", + "@docusaurus/theme-translations": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", @@ -3572,15 +3624,15 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.7.0.tgz", - "integrity": "sha512-8eJ5X0y+gWDsURZnBfH0WabdNm8XMCXHv8ENy/3Z/oQKwaB/EHt5lP9VsTDTf36lKEp0V6DjzjFyFIB+CetL0A==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.0.tgz", + "integrity": "sha512-YqV2vAWpXGLA+A3PMLrOMtqgTHJLDcT+1Caa6RF7N4/IWgrevy5diY8oIHFkXR/eybjcrFFjUPrHif8gSGs3Tw==", "license": "MIT", "dependencies": { - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", + "@docusaurus/mdx-loader": "3.8.0", + "@docusaurus/module-type-aliases": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -3600,19 +3652,19 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz", - "integrity": "sha512-Al/j5OdzwRU1m3falm+sYy9AaB93S1XF1Lgk9Yc6amp80dNxJVplQdQTR4cYdzkGtuQqbzUA8+kaoYYO0RbK6g==", - "license": "MIT", - "dependencies": { - "@docsearch/react": "^3.8.1", - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.0.tgz", + "integrity": "sha512-GBZ5UOcPgiu6nUw153+0+PNWvFKweSnvKIL6Rp04H9olKb475jfKjAwCCtju5D2xs5qXHvCMvzWOg5o9f6DtuQ==", + "license": "MIT", + "dependencies": { + "@docsearch/react": "^3.9.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/plugin-content-docs": "3.8.0", + "@docusaurus/theme-common": "3.8.0", + "@docusaurus/theme-translations": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "algoliasearch": "^5.17.1", "algoliasearch-helper": "^3.22.6", "clsx": "^2.0.0", @@ -3631,9 +3683,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.7.0.tgz", - "integrity": "sha512-Ewq3bEraWDmienM6eaNK7fx+/lHMtGDHQyd1O+4+3EsDxxUmrzPkV7Ct3nBWTuE0MsoZr3yNwQVKjllzCMuU3g==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.0.tgz", + "integrity": "sha512-1DTy/snHicgkCkryWq54fZvsAglTdjTx4qjOXgqnXJ+DIty1B+aPQrAVUu8LiM+6BiILfmNxYsxhKTj+BS3PZg==", "license": "MIT", "dependencies": { "fs-extra": "^11.1.1", @@ -3644,9 +3696,9 @@ } }, "node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.0.tgz", + "integrity": "sha512-RDEClpwNxZq02c+JlaKLWoS13qwWhjcNsi2wG1UpzmEnuti/z1Wx4SGpqbUqRPNSd8QWWePR8Cb7DvG0VN/TtA==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3679,15 +3731,16 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.7.0.tgz", - "integrity": "sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.0.tgz", + "integrity": "sha512-2wvtG28ALCN/A1WCSLxPASFBFzXCnP0YKCAFIPcvEb6imNu1wg7ni/Svcp71b3Z2FaOFFIv4Hq+j4gD7gA0yfQ==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-common": "3.7.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils-common": "3.8.0", "escape-string-regexp": "^4.0.0", + "execa": "5.1.1", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", "github-slugger": "^1.5.0", @@ -3697,9 +3750,9 @@ "js-yaml": "^4.1.0", "lodash": "^4.17.21", "micromatch": "^4.0.5", + "p-queue": "^6.6.2", "prompts": "^2.4.2", "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", "tslib": "^2.6.0", "url-loader": "^4.1.1", "utility-types": "^3.10.0", @@ -3710,12 +3763,12 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.7.0.tgz", - "integrity": "sha512-IZeyIfCfXy0Mevj6bWNg7DG7B8G+S6o6JVpddikZtWyxJguiQ7JYr0SIZ0qWd8pGNuMyVwriWmbWqMnK7Y5PwA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.0.tgz", + "integrity": "sha512-3TGF+wVTGgQ3pAc9+5jVchES4uXUAhAt9pwv7uws4mVOxL4alvU3ue/EZ+R4XuGk94pDy7CNXjRXpPjlfZXQfw==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.7.0", + "@docusaurus/types": "3.8.0", "tslib": "^2.6.0" }, "engines": { @@ -3723,14 +3776,14 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.7.0.tgz", - "integrity": "sha512-w8eiKk8mRdN+bNfeZqC4nyFoxNyI1/VExMKAzD9tqpJfLLbsa46Wfn5wcKH761g9WkKh36RtFV49iL9lh1DYBA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.0.tgz", + "integrity": "sha512-MrnEbkigr54HkdFeg8e4FKc4EF+E9dlVwsY3XQZsNkbv3MKZnbHQ5LsNJDIKDROFe8PBf5C4qCAg5TPBpsjrjg==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", @@ -4531,12 +4584,6 @@ "@types/node": "*" } }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT" - }, "node_modules/@types/prismjs": { "version": "1.26.4", "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.4.tgz", @@ -4969,33 +5016,33 @@ } }, "node_modules/algoliasearch": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.20.3.tgz", - "integrity": "sha512-iNC6BGvipaalFfDfDnXUje8GUlW5asj0cTMsZJwO/0rhsyLx1L7GZFAY8wW+eQ6AM4Yge2p5GSE5hrBlfSD90Q==", - "license": "MIT", - "dependencies": { - "@algolia/client-abtesting": "5.20.3", - "@algolia/client-analytics": "5.20.3", - "@algolia/client-common": "5.20.3", - "@algolia/client-insights": "5.20.3", - "@algolia/client-personalization": "5.20.3", - "@algolia/client-query-suggestions": "5.20.3", - "@algolia/client-search": "5.20.3", - "@algolia/ingestion": "1.20.3", - "@algolia/monitoring": "1.20.3", - "@algolia/recommend": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.25.0.tgz", + "integrity": "sha512-n73BVorL4HIwKlfJKb4SEzAYkR3Buwfwbh+MYxg2mloFph2fFGV58E90QTzdbfzWrLn4HE5Czx/WTjI8fcHaMg==", + "license": "MIT", + "dependencies": { + "@algolia/client-abtesting": "5.25.0", + "@algolia/client-analytics": "5.25.0", + "@algolia/client-common": "5.25.0", + "@algolia/client-insights": "5.25.0", + "@algolia/client-personalization": "5.25.0", + "@algolia/client-query-suggestions": "5.25.0", + "@algolia/client-search": "5.25.0", + "@algolia/ingestion": "1.25.0", + "@algolia/monitoring": "1.25.0", + "@algolia/recommend": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.24.2.tgz", - "integrity": "sha512-vBw/INZDfyh/THbVeDy8On8lZqd2qiUAHde5N4N1ygL4SoeLqLGJ4GHneHrDAYsjikRwTTtodEP0fiXl5MxHFQ==", + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.25.0.tgz", + "integrity": "sha512-vQoK43U6HXA9/euCqLjvyNdM4G2Fiu/VFp4ae0Gau9sZeIKBPvUPnXfLYAe65Bg7PFuw03coeu5K6lTPSXRObw==", "license": "MIT", "dependencies": { "@algolia/events": "^4.0.1" @@ -5141,19 +5188,10 @@ "astring": "bin/astring" } }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "funding": [ { "type": "opencollective", @@ -5170,11 +5208,11 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", + "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -5403,9 +5441,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", "funding": [ { "type": "opencollective", @@ -5422,10 +5460,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -5564,9 +5602,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001702", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", - "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", + "version": "1.0.30001720", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz", + "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==", "funding": [ { "type": "opencollective", @@ -6010,9 +6048,9 @@ } }, "node_modules/consola": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", - "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", "license": "MIT", "engines": { "node": "^14.18.0 || >=16.10.0" @@ -6147,11 +6185,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", - "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz", + "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", + "license": "MIT", "dependencies": { - "browserslist": "^4.24.2" + "browserslist": "^4.24.4" }, "funding": { "type": "opencollective", @@ -6159,9 +6198,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.41.0.tgz", - "integrity": "sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q==", + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.42.0.tgz", + "integrity": "sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==", "hasInstallScript": true, "license": "MIT", "funding": { @@ -6493,9 +6532,9 @@ } }, "node_modules/cssdb": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.3.tgz", - "integrity": "sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.0.tgz", + "integrity": "sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ==", "funding": [ { "type": "opencollective", @@ -6726,6 +6765,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6794,28 +6834,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "license": "MIT", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -6866,38 +6884,6 @@ "node": ">= 4.0.0" } }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -7067,9 +7053,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.112", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.112.tgz", - "integrity": "sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==", + "version": "1.5.161", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", + "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -7702,15 +7688,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -7815,134 +7792,6 @@ } } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -8152,55 +8001,17 @@ "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=10" } }, "node_modules/globals": { @@ -8958,13 +8769,10 @@ } }, "node_modules/image-size": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", - "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", + "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, "bin": { "image-size": "bin/image-size.js" }, @@ -8972,16 +8780,6 @@ "node": ">=16.x" } }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -9059,14 +8857,6 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -9264,15 +9054,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -9321,15 +9102,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -12355,6 +12127,15 @@ "node": ">=12.20" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", @@ -12400,6 +12181,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-retry": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", @@ -12413,13 +12210,16 @@ "node": ">=8" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/package-json": { @@ -12646,79 +12446,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/postcss": { "version": "8.4.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", @@ -12816,9 +12543,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.8.tgz", - "integrity": "sha512-S/TpMKVKofNvsxfau/+bw+IA6cSfB6/kmzFj5szUofHOVnFFMB2WwK+Zu07BeMD8T0n+ZnTO5uXiMvAKe2dPkA==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz", + "integrity": "sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA==", "funding": [ { "type": "github", @@ -12831,10 +12558,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -12931,9 +12658,9 @@ } }, "node_modules/postcss-custom-media": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz", - "integrity": "sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", + "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", "funding": [ { "type": "github", @@ -12946,10 +12673,10 @@ ], "license": "MIT", "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { "node": ">=18" @@ -12959,9 +12686,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz", - "integrity": "sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.5.tgz", + "integrity": "sha512-UWf/vhMapZatv+zOuqlfLmYXeOhhHLh8U8HAKGI2VJ00xLRYoAJh4xv8iX6FB6+TLXeDnm0DBLMi00E0hodbQw==", "funding": [ { "type": "github", @@ -12974,9 +12701,9 @@ ], "license": "MIT", "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -12988,9 +12715,9 @@ } }, "node_modules/postcss-custom-selectors": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz", - "integrity": "sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", + "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", "funding": [ { "type": "github", @@ -13003,9 +12730,9 @@ ], "license": "MIT", "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", "postcss-selector-parser": "^7.0.0" }, "engines": { @@ -13130,9 +12857,9 @@ } }, "node_modules/postcss-double-position-gradients": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz", - "integrity": "sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz", + "integrity": "sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q==", "funding": [ { "type": "github", @@ -13145,7 +12872,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -13290,9 +13017,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.8.tgz", - "integrity": "sha512-plV21I86Hg9q8omNz13G9fhPtLopIWH06bt/Cb5cs1XnaGU2kUtEitvVd4vtQb/VqCdNUHK5swKn3QFmMRbpDg==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz", + "integrity": "sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ==", "funding": [ { "type": "github", @@ -13305,10 +13032,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -13879,9 +13606,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.5.tgz", - "integrity": "sha512-LQybafF/K7H+6fAs4SIkgzkSCixJy0/h0gubDIAP3Ihz+IQBRwsjyvBnAZ3JUHD+A/ITaxVRPDxn//a3Qy4pDw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.0.tgz", + "integrity": "sha512-cl13sPBbSqo1Q7Ryb19oT5NZO5IHFolRbIMdgDq4f9w1MHYiL6uZS7uSsjXJ1KzRIcX5BMjEeyxmAevVXENa3Q==", "funding": [ { "type": "github", @@ -13895,59 +13622,60 @@ "license": "MIT-0", "dependencies": { "@csstools/postcss-cascade-layers": "^5.0.1", - "@csstools/postcss-color-function": "^4.0.8", - "@csstools/postcss-color-mix-function": "^3.0.8", - "@csstools/postcss-content-alt-text": "^2.0.4", - "@csstools/postcss-exponential-functions": "^2.0.7", + "@csstools/postcss-color-function": "^4.0.10", + "@csstools/postcss-color-mix-function": "^3.0.10", + "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.0", + "@csstools/postcss-content-alt-text": "^2.0.6", + "@csstools/postcss-exponential-functions": "^2.0.9", "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.8", - "@csstools/postcss-gradients-interpolation-method": "^5.0.8", - "@csstools/postcss-hwb-function": "^4.0.8", - "@csstools/postcss-ic-unit": "^4.0.0", + "@csstools/postcss-gamut-mapping": "^2.0.10", + "@csstools/postcss-gradients-interpolation-method": "^5.0.10", + "@csstools/postcss-hwb-function": "^4.0.10", + "@csstools/postcss-ic-unit": "^4.0.2", "@csstools/postcss-initial": "^2.0.1", "@csstools/postcss-is-pseudo-class": "^5.0.1", - "@csstools/postcss-light-dark-function": "^2.0.7", + "@csstools/postcss-light-dark-function": "^2.0.9", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.3", - "@csstools/postcss-media-minmax": "^2.0.7", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", + "@csstools/postcss-logical-viewport-units": "^3.0.4", + "@csstools/postcss-media-minmax": "^2.0.9", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", "@csstools/postcss-nested-calc": "^4.0.0", "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.8", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/postcss-random-function": "^1.0.3", - "@csstools/postcss-relative-color-syntax": "^3.0.8", + "@csstools/postcss-oklab-function": "^4.0.10", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", + "@csstools/postcss-random-function": "^2.0.1", + "@csstools/postcss-relative-color-syntax": "^3.0.10", "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.2", - "@csstools/postcss-stepped-value-functions": "^4.0.7", + "@csstools/postcss-sign-functions": "^1.1.4", + "@csstools/postcss-stepped-value-functions": "^4.0.9", "@csstools/postcss-text-decoration-shorthand": "^4.0.2", - "@csstools/postcss-trigonometric-functions": "^4.0.7", + "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.19", - "browserslist": "^4.24.4", + "autoprefixer": "^10.4.21", + "browserslist": "^4.24.5", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.2", "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.2.3", + "cssdb": "^8.3.0", "postcss-attribute-case-insensitive": "^7.0.1", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.8", + "postcss-color-functional-notation": "^7.0.10", "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.5", - "postcss-custom-properties": "^14.0.4", - "postcss-custom-selectors": "^8.0.4", + "postcss-custom-media": "^11.0.6", + "postcss-custom-properties": "^14.0.5", + "postcss-custom-selectors": "^8.0.5", "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.0", + "postcss-double-position-gradients": "^6.0.2", "postcss-focus-visible": "^10.0.1", "postcss-focus-within": "^9.0.1", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^6.0.0", "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.8", + "postcss-lab-function": "^7.0.10", "postcss-logical": "^8.1.0", "postcss-nesting": "^13.0.1", "postcss-opacity-percentage": "^3.0.0", @@ -14308,15 +14036,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -14422,132 +14141,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/react-dom": { "version": "19.1.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", @@ -14560,12 +14153,6 @@ "react": "^19.1.0" } }, - "node_modules/react-error-overlay": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.1.0.tgz", - "integrity": "sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==", - "license": "MIT" - }, "node_modules/react-fast-compare": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", @@ -14595,6 +14182,18 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-json-view-lite": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.4.1.tgz", + "integrity": "sha512-fwFYknRIBxjbFm0kBDrzgBy1xa5tDg2LyXXBepC5f1b+MY3BUClMCsvanMPn089JbV1Eg3nZcrp0VCuH43aXnA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0" + } + }, "node_modules/react-loadable": { "name": "@docusaurus/react-loadable", "version": "6.0.0", @@ -14698,35 +14297,6 @@ "node": ">=8.10.0" } }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", - "license": "MIT" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -15257,6 +14827,12 @@ "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", "license": "MIT" }, + "node_modules/schema-dts": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", + "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==", + "license": "Apache-2.0" + }, "node_modules/schema-utils": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", @@ -15599,22 +15175,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -15886,9 +15446,9 @@ } }, "node_modules/std-env": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz", - "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", "license": "MIT" }, "node_modules/string_decoder": { @@ -16231,12 +15791,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" - }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -16253,6 +15807,15 @@ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, + "node_modules/tinypool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz", + "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==", + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -16364,6 +15927,7 @@ "version": "5.5.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "optional": true, "peer": true, "bin": { "tsc": "bin/tsc", @@ -16562,9 +16126,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "funding": [ { "type": "opencollective", @@ -16579,9 +16143,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", - "picocolors": "^1.1.0" + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -17446,19 +17011,10 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, "node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", "license": "MIT", "engines": { "node": ">=12.20" diff --git a/docs/package.json b/docs/package.json index dfd954064..44cf3b0b2 100644 --- a/docs/package.json +++ b/docs/package.json @@ -14,9 +14,9 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "^3.7.0", - "@docusaurus/plugin-client-redirects": "^3.7.0", - "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/core": "^3.8.0", + "@docusaurus/plugin-client-redirects": "^3.8.0", + "@docusaurus/preset-classic": "^3.8.0", "@mdx-js/react": "^3.1.0", "clsx": "^2.0.0", "docusaurus-theme-github-codeblock": "^2.0.2", From 1b61c36352ff2a4b80b042e57cca7649a26285fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 20:52:07 +0000 Subject: [PATCH 05/72] chore(deps): bump codecov/test-results-action from 1.1.0 to 1.1.1 (#1695) --- .github/workflows/ci-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 6977f77c2..944567ab5 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -55,7 +55,7 @@ jobs: PYTHONPATH=$PWD:$PYTHONPATH pytest tests/slack_sdk/oauth/state_store/test_sqlalchemy.py - name: Upload test results to Codecov if: ${{ !cancelled() }} - uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0 + uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1 with: directory: ./reports/ flags: ${{ matrix.python-version }} From 2f75504e9761ea3b7a5f934c542701c1247e8b7a Mon Sep 17 00:00:00 2001 From: Tracy Rericha <108959677+technically-tracy@users.noreply.github.com> Date: Tue, 10 Jun 2025 06:37:51 -0400 Subject: [PATCH 06/72] cleanup (#1699) --- docs/content/audit-logs.md | 56 +- docs/content/index.md | 14 +- docs/content/installation.md | 106 +--- docs/content/legacy/auth.md | 91 +-- docs/content/legacy/basic_usage.md | 255 +++----- docs/content/legacy/changelog.md | 508 ++++++---------- docs/content/legacy/conversations.md | 105 +--- docs/content/legacy/faq.md | 64 +- docs/content/legacy/index.md | 39 +- docs/content/legacy/real_time_messaging.md | 52 +- docs/content/oauth.md | 76 +-- docs/content/rtm.md | 58 +- docs/content/scim.md | 54 +- docs/content/socket-mode.md | 69 +-- .../tutorial/understanding-oauth-scopes.md | 16 +- docs/content/tutorial/uploading-files.md | 8 +- docs/content/v3-migration.md | 149 ++--- docs/content/web.md | 557 ++++++------------ docs/content/webhook.md | 58 +- 19 files changed, 762 insertions(+), 1573 deletions(-) diff --git a/docs/content/audit-logs.md b/docs/content/audit-logs.md index c2b6769d8..fe4317d09 100644 --- a/docs/content/audit-logs.md +++ b/docs/content/audit-logs.md @@ -1,28 +1,20 @@ -# Audit Logs API Client +# Audit Logs API client -[Audit Logs API](https://api.slack.com/admins/audit-logs) is a set of APIs for monitoring what's happening in your [Enterprise Grid](https://api.slack.com/enterprise/grid) organization. +The [Audit Logs API](https://docs.slack.dev/admins/audit-logs-api) is a set of APIs that you can use to monitor what's happening in your [Enterprise Grid](https://docs.slack.dev/enterprise-grid) organization. -The Audit Logs API can be used by security information and event management (SIEM) tools to provide an analysis of how your Slack organization is being accessed. You can also use this API to write your own applications to see how members of your organization are using Slack. +The Audit Logs API can be used by Security Information and Event Management (SIEM) tools to provide an analysis of how your Slack organization is being accessed. You can also use this API to write your own apps to see how members of your organization are using Slack. -Follow the instructions in [the API document](https://api.slack.com/admins/audit-logs) to get a valid token for using Audit Logs API. The Slack app using the Audit Logs API needs to be installed in the Enterprise Grid Organization, not an individual workspace within the organization. +You'll need a valid token in order to use the Audit Logs API. In addition, the Slack app using the Audit Logs API needs to be installed in the Enterprise Grid organization, not an individual workspace within the organization. --- -## AuditLogsClient +## AuditLogsClient {#auditlogsclient} -An OAuth token with [the admin -scope](https://api.slack.com/scopes/admin) is required to access this -API. +An OAuth token with [the admin scope](https://docs.slack.dev/reference/scopes/admin) is required to access this API. -You will likely use the `/logs` endpoint as it's the essential part of -this API. +You'll likely use the `/logs` endpoint as it's the essential part of this API. -To learn about the available parameters for this endpoint, check out -[this -guide](https://api.slack.com/admins/audit-logs#how_to_call_the_audit_logs_api). -You can also learn more about the data structure of -`api_response.typed_body` from [the class source -code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/audit_logs/v1/logs.py). +To learn about the available parameters for this endpoint, check out [using the Audit Logs API](https://docs.slack.dev/admins/audit-logs-api). You can also learn more about the data structure of `api_response.typed_body` from [the class source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/audit_logs/v1/logs.py). ``` python import os @@ -42,10 +34,9 @@ api_response = client.schemas() api_response = client.actions() ``` -## AsyncAuditLogsClient +## AsyncAuditLogsClient {#asyncauditlogsclient} -If you are keen to use asyncio for SCIM API calls, we offer -AsyncSCIMClient for it. This client relies on aiohttp library. +If you are keen to use asyncio for SCIM API calls, we offer AsyncSCIMClient for it. This client relies on aiohttp library. ``` python from slack_sdk.audit_logs.async_client import AsyncAuditLogsClient @@ -57,18 +48,11 @@ api_response.typed_body # slack_sdk.audit_logs.v1.LogsResponse --- -## RetryHandler +## RetryHandler {#retryhandler} -With the default settings, only `ConnectionErrorRetryHandler` with its -default configuration (=only one retry in the manner of [exponential -backoff and -jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) -is enabled. The retry handler retries if an API client encounters a -connectivity-related failure (e.g., Connection reset by peer). +With the default settings, only `ConnectionErrorRetryHandler` with its default configuration (=only one retry in the manner of [exponential backoff and jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) is enabled. The retry handler retries if an API client encounters a connectivity-related failure (e.g., connection reset by peer). -To use other retry handlers, you can pass a list of `RetryHandler` to -the client constructor. For instance, you can add the built-in -`RateLimitErrorRetryHandler` this way: +To use other retry handlers, you can pass a list of `RetryHandler` to the client constructor. For instance, you can add the built-in `RateLimitErrorRetryHandler` this way: ``` python import os @@ -83,11 +67,7 @@ rate_limit_handler = RateLimitErrorRetryHandler(max_retry_count=1) client.retry_handlers.append(rate_limit_handler) ``` -Creating your own ones is also quite simple. Defining a new class that -inherits `slack_sdk.http_retry.RetryHandler` (`AsyncRetryHandler` for -asyncio apps) and implements required methods (internals of `can_retry` -/ `prepare_for_next_retry`). Check the built-in ones' source code for -learning how to properly implement. +You can also create one on your own by defining a new class that inherits `slack_sdk.http_retry RetryHandler` (`AsyncRetryHandler` for asyncio apps) and implements required methods (internals of `can_retry` / `prepare_for_next_retry`). Check out the source code for the ones that are built in to learn how to properly implement them. ``` python import socket @@ -120,10 +100,4 @@ client = AuditLogsClient( ) ``` -For asyncio apps, `Async` prefixed corresponding modules are available. -All the methods in those methods are async/await compatible. Check [the -source -code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) -and -[tests](https://github.com/slackapi/python-slack-sdk/blob/main/tests/slack_sdk_async/web/test_async_web_client_http_retry.py) -for more details. +For asyncio apps, `Async` prefixed corresponding modules are available. All the methods in those methods are async/await compatible. Check [the source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) for more details. diff --git a/docs/content/index.md b/docs/content/index.md index 94b8de33b..d5c78b7de 100644 --- a/docs/content/index.md +++ b/docs/content/index.md @@ -1,10 +1,10 @@ # Python Slack SDK -The Slack Python SDK has corresponding package for Slack APIs. They are small and powerful when used independently, and work seamlessly when used together, too. +The Slack Python SDK has corresponding packages for Slack APIs. They are small and powerful when used independently, and work seamlessly when used together, too. -The Slack platform offers several APIs to build apps. Each Slack API delivers part of the capabilities from the platform, so that you can pick just those that fit for your needs. +The Slack platform offers several APIs to build apps. Each Slack API delivers part of the capabilities from the platform, so that you can pick just those that fit your needs. -## Features +## Features {#features} | Feature | Use | Package | |--------------------------------|----------|-------| @@ -20,17 +20,17 @@ The Slack platform offers several APIs to build apps. Each Slack API delivers pa You can also view the [Python module documents](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/)! -## Getting help +## Getting help {#getting-help} These docs have lots of information on the Python Slack SDK. There's also an in-depth Reference section. Please explore! -If you otherwise get stuck, we're here to help. The following are the best ways to get assistance working through your issue: +If you get stuck, we're here to help. The following are the best ways to get assistance working through your issue: * [Issue Tracker](http://github.com/slackapi/python-slack-sdk/issues) for questions, bug reports, feature requests, and general discussion related to the Python Slack SDK. Try searching for an existing issue before creating a new one. * [Email](mailto:support@slack.com) our developer support team: `support@slack.com`. -## Contributing +## Contributing {#contributing} These docs live within the [Python Slack SDK](https://github.com/slackapi/python-slack-sdk) repository and are open source. -We welcome contributions from everyone! Please check out our [Contributor's Guide](https://github.com/slackapi/python-slack-sdk/blob/main/.github/contributing.md) for how to contribute in a helpful and collaborative way. \ No newline at end of file +We welcome contributions from everyone! Please check out our [Contributor's Guide](https://github.com/slackapi/python-slack-sdk/blob/main/.github/contributing.md) for how to contribute in a helpful and collaborative way. diff --git a/docs/content/installation.md b/docs/content/installation.md index 761b7f241..27ea590e0 100644 --- a/docs/content/installation.md +++ b/docs/content/installation.md @@ -1,13 +1,12 @@ # Installation -This package supports Python 3.6 and higher. We recommend using [PyPI](https://pypi.python.org/pypi) to install. Run the following command: +This package supports Python 3.6 and higher. We recommend using [PyPI](https://pypi.python.org/pypi) for installation. Run the following command: ```bash pip install slack_sdk ``` -Alternatively, you can always pull the source code directly into your -project: +Alternatively, you can always pull the source code directly into your project: ```bash git clone https://github.com/slackapi/python-slack-sdk.git @@ -40,24 +39,13 @@ python test.py It's also good to try on the Python REPL. -## Access Tokens {#handling-tokens} +## Access tokens {#handling-tokens} -Making calls to the Slack API often requires a [token](https://docs.slack.dev/authentication/tokens) with associated scopes that grant access to resources. - -Collecting a token can be done from app settings or with an OAuth installation depending on your app's requirements: - -- [Single Workspace Install](#single-workspace-install) -- [Multiple Workspace Install](#multiple-workspace-install) +Making calls to the Slack API often requires a [token](https://docs.slack.dev/authentication/tokens) with associated scopes that grant access to resources. Collecting a token can be done from app settings or with an OAuth installation depending on your app's requirements. **Always keep your access tokens safe.** -The OAuth token you use to call the Slack API has access to the data on -the workspace where it is installed. - -Depending on the scopes granted to the token, it potentially has the -ability to read and write data. Treat these tokens just as you would a -password — don't publish them, don't check them into source code, and -don't share them with others. +The OAuth token you use to call the Slack Web API has access to the data on the workspace where it is installed. Depending on the scopes granted to the token, it potentially has the ability to read and write data. Treat these tokens just as you would a password — don't publish them, don't check them into source code, and don't share them with others. :::danger @@ -69,51 +57,34 @@ token = 'xoxb-111-222-xxxxx' ::: -We recommend you pass tokens in as environment variables, or persist -them in a database that is accessed at runtime. You can add a token to -the environment by starting your app as: +We recommend you pass tokens in as environment variables, or store them in a database that is accessed at runtime. You can add a token to the environment by starting your app as follows: ```python SLACK_BOT_TOKEN="xoxb-111-222-xxxxx" python myapp.py ``` -Then retrieve the key with: +Then, retrieve the key as follows: ```python import os SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"] ``` -For additional information, please see the [Safely Storing -Credentials](https://api.slack.com/authentication/best-practices) page within the Slack API docs. +Refer to our [best practices for security](https://docs.slack.dev/authentication/best-practices-for-security) page for more information. -## Workspace Installations +## Installing on a single workspace {#single-workspace} -### Single Workspace Install +If you're building an application for a single Slack workspace, there's no need to build out the entire OAuth flow. Once you've set up your features, click the **Install App to Team** button on the **Install App** page. If you add new permission scopes or Slack app features after an app has been installed, you must reinstall the app to your workspace for the changes to take effect. -If you're building an application for a single Slack workspace, there's no need to build out the entire OAuth flow. +Refer to the [quickstart](https://docs.slack.dev/quickstart) guide for more details. -After [creating an app](https://api.slack.com/apps?new_app=1) and adding [scopes](http://docs.slack.dev/reference/scopes) on the **OAuth & Permissions** page, go to the **Install App** page and click the **Install to Team** button to authorize the app and generate a token. +## Installing on multiple workspaces {#multi-workspace} -If you add new permission scopes or Slack app features after an app has been installed, you must reinstall the app to your workspace for changes to take effect. +If you intend for an app to be installed on multiple Slack workspaces, you will need to handle this installation via the industry-standard OAuth protocol. Read more about [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth). -## Multiple Workspace Install +The OAuth exchange is facilitated via HTTP and requires a webserver; in this example, we'll use [Flask](https://flask.palletsprojects.com/). -If you intend for an app to be installed on multiple Slack workspaces, -you will need to handle this installation via the industry-standard -OAuth protocol. You can read more about [how Slack handles -Oauth](https://api.slack.com/authentication/oauth-v2). - -(The OAuth exchange is facilitated via HTTP and requires a webserver; in -this example, we'll use [Flask](https://flask.palletsprojects.com/).) - -To configure your app for OAuth, you'll need a client ID, a client -secret, and a set of one or more scopes that will be applied to the -token once it is granted. The client ID and client secret are available -from your [app's configuration page](https://api.slack.com/apps). The -scopes are determined by the functionality of the app — every method -you wish to access has a corresponding scope and your app will need to -request that scope in order to be able to access the method. Review the [full list of Slack OAuth scopes](http://docs.slack.dev/reference/scopes). +To configure your app for OAuth, you'll need a client ID, a client secret, and a set of one or more scopes that will be applied to the token once it is granted. The client ID and client secret are available from the [app page](https://api.slack.com/apps). The scopes are determined by the functionality of the app — every method you wish to access has a corresponding scope, and your app will need to request that scope in order to be able to access the method. Review the full list of [OAuth scopes](https://docs.slack.dev/reference/scopes). ```python import os @@ -127,18 +98,12 @@ oauth_scope = os.environ["SLACK_SCOPES"] app = Flask(__name__) ``` -### The OAuth initiation link +### The OAuth initiation link {#oauth-link} -To begin the OAuth flow that will install your app on a workspace, -you'll need to provide the user with a link to the Slack OAuth page. -This can be a simple link to `https://slack.com/oauth/v2/authorize` with -`scope` and `client_id` query parameters, or you can use our pre-built -[Add to Slack button](https://api.slack.com/docs/slack-button) to do all -the work for you. +To begin the OAuth flow that will install your app on a workspace, you'll need to provide the user with a link to the Slack OAuth page. This can be a simple link to `https://slack.com/oauth/v2/authorize` with the +`scope` and `client_id` query parameters. -This link directs the user to the Slack OAuth acceptance page, where the -user will review and accept or refuse the permissions your app is -requesting as defined by the scope(s). +This link directs the user to the OAuth acceptance page, where the user will review and accept or decline the permissions your app is requesting as defined by the scope(s). ```python @app.route("/slack/install", methods=["GET"]) @@ -149,14 +114,9 @@ def pre_install(): 'Add to Slack' ``` -### The OAuth completion page +### The OAuth completion page {#oauth-completion} -Once the user has agreed to the permissions you've requested, Slack -will redirect the user to your auth completion page, which includes a -`code` query string param. You'll use the `code` param to call the -`oauth.v2.access` -[endpoint](https://api.slack.com/methods/oauth.v2.access) that will -finally grant you the token. +Once the user has agreed to the permissions you've requested, Slack will redirect the user to your auth completion page, which includes a `code` query string parameter. You'll use the `code` parameter to call the [`oauth.v2.access`](https://docs.slack.dev/reference/methods/oauth.v2.access) API method that will grant you the token. ```python @app.route("/slack/oauth_redirect", methods=["GET"]) @@ -177,8 +137,7 @@ def post_install(): ) ``` -A successful request to `oauth.v2.access` will yield a JSON payload with -at least one token, a bot token that begins with `xoxb`. +A successful request to the `oauth.v2.access` API method will yield a JSON payload with at least one token: a bot token that begins with `xoxb`. ```python @app.route("/slack/oauth_redirect", methods=["GET"]) @@ -210,14 +169,13 @@ if __name__ == "__main__": app.run("localhost", 3000) ``` -Once your user has completed the OAuth flow, you'll be able to use the -provided tokens to call any of the Slack API methods that require an -access token. +Once your user has completed the OAuth flow, you'll be able to use the provided tokens to call any of the Slack Web API methods that require an access token. + +Refer to the [basic usage](https://tools.slack.dev/python-slack-sdk/legacy/basic_usage) page for more examples. -## Installation Troubleshooting +## Installation troubleshooting {#troubleshooting} -We recommend using [virtualenv -(venv)](https://docs.python.org/3/tutorial/venv.html) to set up your +We recommend using [virtualenv (venv)](https://docs.python.org/3/tutorial/venv.html) to set up your Python runtime. ```bash @@ -234,8 +192,7 @@ pip install "slack_sdk>=3.0" export SLACK_BOT_TOKEN=xoxb-*** ``` -Then, verify the following code works on the Python REPL (you can start -it by just `python`). +Then, verify the following code works on the Python REPL: ```python import os @@ -246,9 +203,4 @@ client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) res = client.api_test() ``` -As the `slack` package is deprecated, we recommend switching to `slack_sdk` -package. That being said, the code you're working on may be still using -the old package. If you encounter an error saying -`AttributeError: module 'slack' has no attribute 'WebClient'`, run -`pip list`. If you find both `slack_sdk` and `slack` in the output, try -removing `slack` by `pip uninstall slack` and reinstalling `slack_sdk`. +As the `slack` package is deprecated, we recommend switching to `slack_sdk` package. That being said, the code you're working on may be still using the old package. If you encounter an error saying `AttributeError: module 'slack' has no attribute 'WebClient'`, run `pip list`. If you find both `slack_sdk` and `slack` in the output, try removing `slack` by `pip uninstall slack` and reinstalling `slack_sdk`. diff --git a/docs/content/legacy/auth.md b/docs/content/legacy/auth.md index 567fd6a38..85bdd55d0 100644 --- a/docs/content/legacy/auth.md +++ b/docs/content/legacy/auth.md @@ -1,75 +1,51 @@ -# Tokens & Installation +# Tokens & installation :::danger -The [slackclient](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode now and [slack-sdk](https://pypi.org/project/slack-sdk/) project is the successor. The v3 SDK provides more functionalities such as Socket Mode, OAuth flow module, SCIM API, Audit Logs API, better asyncio support, retry handlers, and many more. +The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor. The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better asyncio support, retry handlers, and more. ::: -## Keeping tokens safe {#handling-tokens} +## Access tokens {#handling-tokens} -The OAuth token you use to call the Slack API has access to the data on -the workspace where it is installed. Depending on the scopes granted to -the token, it potentially has the ability to read and write data. Treat -these tokens just as you would a password — don't publish them, -don't check them into source code, don't share them with others. +**Always keep your access tokens safe.** -🚫Avoid this: +The OAuth token you use to call the Slack Web API has access to the data on the workspace where it is installed. Depending on the scopes granted to the token, it potentially has the ability to read and write data. Treat these tokens just as you would a password — don't publish them, don't check them into source code, and don't share them with others. + +Never do the following: ``` python token = 'xoxb-111-222-xxxxx' ``` -We recommend you pass tokens in as environment variables, or persist -them in a database that is accessed at runtime. You can add a token to -the environment by starting your app as: +We recommend you pass tokens in as environment variables, or store them in a database that is accessed at runtime. You can add a token to the environment by starting your app as follows: ``` python SLACK_BOT_TOKEN="xoxb-111-222-xxxxx" python myapp.py ``` -Then retrieve the key with: +Then, retrieve the key as follows: ``` python import os SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"] ``` -For additional information, please see our [Safely Storing -Credentials](https://api.slack.com/authentication/best-practices) page. - -## Single Workspace Install +Refer to our [best practices for security](https://docs.slack.dev/authentication/best-practices-for-security) page for more information. -If you're building an application for a single Slack workspace, -there's no need to build out the entire OAuth flow. +## Installing on a single workspace {#single-workspace} -Once you've setup your features, click on the **Install App to Team** -button found on the **Install App** page. If you add new permission -scopes or Slack app features after an app has been installed, you must -reinstall the app to your workspace for changes to take effect. +If you're building an application for a single Slack workspace, there's no need to build out the entire OAuth flow. Once you've set up your features, click the **Install App to Team** button on the **Install App** page. If you add new permission scopes or Slack app features after an app has been installed, you must reinstall the app to your workspace for the changes to take effect. -For additional information, see the [Installing -Apps](https://api.slack.com/start/overview#installing_distributing) of -our [Building Slack apps](https://api.slack.com/start) page. +Refer to the [quickstart](https://docs.slack.dev/quickstart) guide for more details. -## Multiple Workspace Install +## Installing on multiple workspaces {#multi-workspace} -If you intend for an app to be installed on multiple Slack workspaces, -you will need to handle this installation via the industry-standard -OAuth protocol. You can read more about [how Slack handles -Oauth](https://api.slack.com/authentication/oauth-v2). +If you intend for an app to be installed on multiple Slack workspaces, you will need to handle this installation via the industry-standard OAuth protocol. Read more about [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth). -(The OAuth exchange is facilitated via HTTP and requires a webserver; in -this example, we'll use [Flask](https://flask.palletsprojects.com/).) +The OAuth exchange is facilitated via HTTP and requires a webserver; in this example, we'll use [Flask](https://flask.palletsprojects.com/). -To configure your app for OAuth, you'll need a client ID, a client -secret, and a set of one or more scopes that will be applied to the -token once it is granted. The client ID and client secret are available -from your [app's configuration page](https://api.slack.com/apps). The -scopes are determined by the functionality of the app — every method -you wish to access has a corresponding scope and your app will need to -request that scope in order to be able to access the method. Review -the [full list of Slack OAuth scopes](https://api.slack.com/scopes). +To configure your app for OAuth, you'll need a client ID, a client secret, and a set of one or more scopes that will be applied to the token once it is granted. The client ID and client secret are available from the [app page](https://api.slack.com/apps). The scopes are determined by the functionality of the app — every method you wish to access has a corresponding scope, and your app will need to request that scope in order to be able to access the method. Review the full list of [OAuth scopes](https://docs.slack.dev/reference/scopes). ``` python import os @@ -83,18 +59,12 @@ oauth_scope = os.environ["SLACK_SCOPES"] app = Flask(__name__) ``` -**The OAuth initiation link** +### The OAuth initiation link {#oauth-link} -To begin the OAuth flow that will install your app on a workspace, -you'll need to provide the user with a link to the Slack OAuth page. -This can be a simple link to `https://slack.com/oauth/v2/authorize` with -`scope` and `client_id` query parameters, or you can use our pre-built -[Add to Slack button](https://api.slack.com/docs/slack-button) to do all -the work for you. +To begin the OAuth flow that will install your app on a workspace, you'll need to provide the user with a link to the Slack OAuth page. This can be a simple link to `https://slack.com/oauth/v2/authorize` with the +`scope` and `client_id` query parameters. -This link directs the user to the Slack OAuth acceptance page, where the -user will review and accept or refuse the permissions your app is -requesting as defined by the scope(s). +This link directs the user to the OAuth acceptance page, where the user will review and accept or decline the permissions your app is requesting as defined by the scope(s). ``` python @app.route("/slack/install", methods=["GET"]) @@ -105,14 +75,9 @@ def pre_install(): 'Add to Slack' ``` -**The OAuth completion page** +### The OAuth completion page {#oauth-completion} -Once the user has agreed to the permissions you've requested, Slack -will redirect the user to your auth completion page, which includes a -`code` query string param. You'll use the `code` param to call the -`oauth.v2.access` -[endpoint](https://api.slack.com/methods/oauth.v2.access) that will -finally grant you the token. +Once the user has agreed to the permissions you've requested, Slack will redirect the user to your auth completion page, which includes a `code` query string parameter. You'll use the `code` parameter to call the [`oauth.v2.access`](https://docs.slack.dev/reference/methods/oauth.v2.access) API method that will grant you the token. ``` python @app.route("/slack/oauth_redirect", methods=["GET"]) @@ -133,8 +98,7 @@ def post_install(): ) ``` -A successful request to `oauth.v2.access` will yield a JSON payload with -at least one token, a bot token that begins with `xoxb`. +A successful request to the `oauth.v2.access` API method will yield a JSON payload with at least one token: a bot token that begins with `xoxb`. ``` python @app.route("/slack/oauth_redirect", methods=["GET"]) @@ -166,9 +130,6 @@ if __name__ == "__main__": app.run("localhost", 3000) ``` -Once your user has completed the OAuth flow, you'll be able to use the -provided tokens to call any of the Slack API methods that require an -access token. +Once your user has completed the OAuth flow, you'll be able to use the provided tokens to call any of the Slack Web API methods that require an access token. -See the [Basic Usage](/legacy/basic_usage) section of the documentation -for usage examples. +Refer to the [basic usage](https://tools.slack.dev/python-slack-sdk/legacy/basic_usage) page for more examples. diff --git a/docs/content/legacy/basic_usage.md b/docs/content/legacy/basic_usage.md index 4fcac16e7..c83fbc866 100644 --- a/docs/content/legacy/basic_usage.md +++ b/docs/content/legacy/basic_usage.md @@ -1,26 +1,20 @@ -# Basic Usage {#web-api-examples} +# Basic usage :::danger -The [slackclient](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode now and [slack-sdk](https://pypi.org/project/slack-sdk/) project is the successor. The v3 SDK provides more functionalities such as Socket Mode, OAuth flow module, SCIM API, Audit Logs API, better asyncio support, retry handlers, and many more. +The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor. The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. ::: The Slack Web API allows you to build applications that interact with Slack in more complex ways than the integrations we provide out of the box. -Accessing Slack API methods requires an OAuth token — see the [Tokens -& Authentication](auth) section for more on how Slack uses OAuth tokens -as well as best practices. +Accessing Slack API methods requires an OAuth token — read more about [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth). -[Each of these API methods](https://api.slack.com/methods) is fully -documented on our developer site at api.slack.com +Each of these [API methods](https://docs.slack.dev/reference/methods) is fully documented on our developer site at [docs.slack.dev](https://docs.slack.dev/). -## Sending a message +## Sending a message {#sending-messages} -One of the primary uses of Slack is posting messages to a channel using -the channel ID or as a DM to another person using their user ID. This -method will handle either a channel ID or a user ID passed to the -`channel` parameter. +One of the primary uses of Slack is posting messages to a channel using the channel ID, or as a DM to another person using their user ID. This method will handle either a channel ID or a user ID passed to the `channel` parameter. ``` python import logging @@ -43,9 +37,7 @@ except SlackApiError as e: assert e.response["error"] # str like 'invalid_auth', 'channel_not_found' ``` -Sending an ephemeral message, which is only visible to an assigned user -in a specified channel, is nearly the same as sending a regular message, -but with an additional `user` parameter. +Sending an ephemeral message, which is only visible to an assigned user in a specified channel, is nearly the same as sending a regular message but with an additional `user` parameter. ``` python import os @@ -61,25 +53,15 @@ response = client.chat_postEphemeral( ) ``` -See -[chat.postEphemeral](https://api.slack.com/methods/chat.postEphemeral) -for more info. +See the [`chat.postEphemeral`](https://docs.slack.dev/reference/methods/chat.postephemeral) API method for more details. ------------------------------------------------------------------------- - -## Formatting with Block Kit +## Formatting messages with Block Kit {#block-kit} -Messages posted from apps can contain more than just text, though. They -can include full user interfaces composed of -[blocks](https://api.slack.com/block-kit). +Messages posted from apps can contain more than just text; they can also include full user interfaces composed of blocks using [Block Kit](https://docs.slack.dev/block-kit). -The chat.postMessage method takes an optional blocks argument that -allows you to customize the layout of a message. Blocks specified in a -single object literal, so just add additional keys for any optional -argument. +The [`chat.postMessage method`](https://docs.slack.dev/reference/methods/chat.postmessage) takes an optional blocks argument that allows you to customize the layout of a message. Blocks are specified in a single object literal, so just add additional keys for any optional argument. -To send a message to a channel, use the channel's ID. For IMs, use the -user's ID. +To send a message to a channel, use the channel's ID. For DMs, use the user's ID. ``` python client.chat_postMessage( @@ -118,26 +100,17 @@ client.chat_postMessage( ) ``` -**Note:** You can use the [Block Kit -Builder](https://api.slack.com/tools/block-kit-builder) to prototype -your message's look and feel. +:::tip ------------------------------------------------------------------------- +You can use [Block Kit Builder](https://app.slack.com/block-kit-builder/) to prototype your message's look and feel. + +::: -## Threading Messages +## Threading messages {#threading-messages} -Threaded messages are a way of grouping messages together to provide -greater context. You can reply to a thread or start a new threaded -conversation by simply passing the original message's `ts` ID in the -`thread_ts` attribute when posting a message. If you're replying to a -threaded message, you'll pass the `thread_ts` ID of the -message you're replying to. +Threaded messages are a way of grouping messages together to provide greater context. You can reply to a thread or start a new threaded conversation by simply passing the original message's `ts` ID in the `thread_ts` attribute when posting a message. If you're replying to a threaded message, you'll pass the `thread_ts` ID of the message you're replying to. -A channel or DM conversation is a nearly linear timeline of messages -exchanged between people, bots, and apps. When one of these messages is -replied to, it becomes the parent of a thread. By default, threaded -replies do not appear directly in the channel, instead relegated to a -kind of forked timeline descending from the parent message. +A channel or DM conversation is a nearly linear timeline of messages exchanged between people, bots, and apps. When one of these messages is replied to, it becomes the parent of a thread. By default, threaded replies do not appear directly in the channel, but are instead relegated to a kind of forked timeline descending from the parent message. ``` python response = client.chat_postMessage( @@ -147,10 +120,7 @@ response = client.chat_postMessage( ) ``` -By default, `reply_broadcast` is set to `False`. To indicate your reply -is germane to all members of a channel, and therefore a notification of -the reply should be posted in-channel, set the `reply_broadcast` to -`True`. +By default, the `reply_broadcast` parameter is set to `False`. To indicate your reply is germane to all members of a channel and therefore a notification of the reply should be posted in-channel, set the `reply_broadcast` parameter to `True`. ``` python response = client.chat_postMessage( @@ -161,24 +131,17 @@ response = client.chat_postMessage( ) ``` -**Note:** While threaded messages may contain attachments and message -buttons, when your reply is broadcast to the channel, it'll actually be -a reference to your reply, not the reply itself. So, when appearing in -the channel, it won't contain any attachments or message buttons. Also -note that updates and deletion of threaded replies works the same as -regular messages. +:::info -See the [Threading messages -together](https://api.slack.com/docs/message-threading#forking_conversations) -article for more information. +While threaded messages may contain attachments and message buttons, when your reply is broadcast to the channel, it'll actually be a reference to your reply and not the reply itself. When appearing in the channel, it won't contain any attachments or message buttons. Updates and deletion of threaded replies works the same as regular messages. ------------------------------------------------------------------------- +::: + +Refer to the [threading messages](https://docs.slack.dev/messaging#threading) page for more information. -## Updating a message +## Updating a message {#updating-messages} -Let's say you have a bot which posts the status of a request. When that -request changes, you'll want to update the message to reflect it's -state. +Let's say you have a bot that posts the status of a request. When that request changes, you'll want to update the message to reflect it's state. ``` python response = client.chat_update( @@ -188,13 +151,9 @@ response = client.chat_update( ) ``` -See [chat.update](https://api.slack.com/methods/chat.update) for -formatting options and some special considerations when calling this -with a bot user. +See the [`chat.update`](https://docs.slack.dev/reference/methods/chat.update) API method for formatting options and some special considerations when calling this with a bot user. ------------------------------------------------------------------------- - -## Deleting a message +## Deleting a message {#deleting-messages} Sometimes you need to delete things. @@ -205,18 +164,12 @@ response = client.chat_delete( ) ``` -See [chat.delete](https://api.slack.com/methods/chat.delete) for more -info. - ------------------------------------------------------------------------- - -## Opening a modal +See the [`chat.delete`](https://docs.slack.dev/reference/methods/chat.delete) API method for more +details. -Modals allow you to collect data from users and display dynamic -information in a focused surface. +## Opening a modal {#opening-modals} -Modals use the same blocks that compose messages with the addition of an -`input` block. +Modals allow you to collect data from users and display dynamic information in a focused surface. Modals use the same blocks that compose messages, with the addition of an `input` block. ``` python # This module is available since v2.6 @@ -293,23 +246,16 @@ if __name__ == "__main__": app.run("localhost", 3000) ``` -See [views.open](https://api.slack.com/methods/views.open) more details -and additional parameters. - -Also, to run the above example, the following [Slack app -configurations](https://api.slack.com/apps) are required. +See the [`views.open`](https://docs.slack.dev/reference/methods/views.open) API method more details and additional parameters. -- Enable **Interactivity** with a valid Request URL: - `https://{your-public-domain}/slack/events` -- Add a global shortcut with the Callback ID: `open-modal-shortcut` +To run the above example, the following [app configurations](https://api.slack.com/apps) are required: ------------------------------------------------------------------------- +* Enable **Interactivity** with a valid Request URL: `https://{your-public-domain}/slack/events` +* Add a global shortcut with the callback ID: `open-modal-shortcut` -## Updating and pushing modals +## Updating and pushing modals {#updating-pushing-modals} -You can dynamically update a view inside of a modal by calling -`views.update` and passing the view ID returned in the -previous `views.open` call. +You can dynamically update a view inside of a modal by calling the `views.update` API method and passing the view ID returned in the previous `views.open` API method call. ``` python private_metadata = "any str data you want to store" @@ -350,25 +296,15 @@ response = client.views_update( ) ``` -See [views.update](https://api.slack.com/methods/views.update) for more -info. +See the [`views.update`](https://docs.slack.dev/reference/methods/views.update) API method for more details. -If you want to push a new view onto the modal instead of updating an -existing view, reference the -[views.push](https://api.slack.com/methods/views.push) documentation. +If you want to push a new view onto the modal instead of updating an existing view, see the [`views.push`](https://docs.slack.dev/reference/methods/views.push) API method. ------------------------------------------------------------------------- +## Emoji reactions {#emoji} -## Emoji reactions +You can quickly respond to any message on Slack with an emoji reaction. Reactions can be used for any purpose: voting, checking off to-do items, showing excitement, or just for fun. -You can quickly respond to any message on Slack with an emoji reaction. -Reactions can be used for any purpose: voting, checking off to-do items, -showing excitement ---- or just for fun. - -This method adds a reaction (emoji) to an item (`file`, `file comment`, -`channel message`, `group message`, or `direct message`). One of file, -file_comment, or the combination of channel and timestamp must be -specified. +This method adds a reaction (emoji) to an item (`file`, `file comment`, `channel message`, `group message`, or `direct message`). One of `file`, `file_comment`, or the combination of `channel` and `timestamp` must be specified. ``` python response = client.reactions_add( @@ -378,8 +314,7 @@ response = client.reactions_add( ) ``` -Removing an emoji reaction is basically the same format, but you'll use -`reactions.remove` instead of `reactions.add` +Removing an emoji reaction is basically the same format, but you'll use the `reactions.remove` API method instead of the `reactions.add` API method. ``` python response = client.reactions_remove( @@ -389,85 +324,59 @@ response = client.reactions_remove( ) ``` -See [reactions.add](https://api.slack.com/methods/reactions.add) and -[reactions.remove](https://api.slack.com/methods/reactions.remove) for -more info. - ------------------------------------------------------------------------- +See the [`reactions.add`](https://docs.slack.dev/reference/methods/reactions.add) and [`reactions.remove`](https://docs.slack.dev/reference/methods/reactions.remove) API methods for more details. -## Listing public channels +## Listing public channels {#listing-public-channels} -At some point, you'll want to find out what channels are available to -your app. This is how you get that list. +At some point, you'll want to find out what channels are available to your app. This is how you get that list. ``` python response = client.conversations_list(types="public_channel") ``` -Archived channels are included by default. You can exclude them by -passing `exclude_archived=1` to your request. +Archived channels are included by default. You can exclude them by passing `exclude_archived=1` to your request. ``` python response = client.conversations_list(exclude_archived=1) ``` -See -[conversations.list](https://api.slack.com/methods/conversations.list) -for more info. - ------------------------------------------------------------------------- +See the [`conversations.list`](https://docs.slack.dev/reference/methods/conversations.list) API method for more details. -## Getting a channel's info +## Getting a channel's info {#get-channel-info} -Once you have the ID for a specific channel, you can fetch information -about that channel. +Once you have the ID for a specific channel, you can fetch information about that channel. ``` python response = client.conversations_info(channel="C0XXXXXXX") ``` -See -[conversations.info](https://api.slack.com/methods/conversations.info) -for more info. - ------------------------------------------------------------------------- +See the [`conversations.info`](https://docs.slack.dev/reference/methods/conversations.info) API method for more details. -## Joining a channel +## Joining a channel {#join-channel} -Channels are the social hub of most Slack teams. Here's how you hop -into one: +Channels are the social hub of most Slack teams. Here's how you hop into one: ``` python response = client.conversations_join(channel="C0XXXXXXY") ``` -If you are already in the channel, the response is slightly different. -`already_in_channel` will be true, and a limited `channel` object will -be returned. Bot users cannot join a channel on their own, they need to -be invited by another user. +If you are already in the channel, the response is slightly different. The `already_in_channel` attribute will be true, and a limited `channel` object will be returned. Bot users cannot join a channel on their own, they need to be invited by another user. -See -[conversations.join](https://api.slack.com/methods/conversations.join) -for more info. +See the [`conversations.join`](https://docs.slack.dev/reference/methods/conversations.join) API method for more details. ------------------------------------------------------------------------ -## Leaving a channel +## Leaving a channel {#leave-channel} -Maybe you've finished up all the business you had in a channel, or -maybe you joined one by accident. This is how you leave a channel. +Maybe you've finished up all the business you had in a channel, or maybe you joined one by accident. This is how you leave a channel. ``` python response = client.conversations_leave(channel="C0XXXXXXX") ``` -See -[conversations.leave](https://api.slack.com/methods/conversations.leave) -for more info. +See the [`conversations.leave`](https://docs.slack.dev/reference/methods/conversations.leave) API method for more details. ------------------------------------------------------------------------- - -## Listing team members +## Listing team members {#list-team-members} ``` python response = client.users_list() @@ -475,12 +384,9 @@ users = response["members"] user_ids = list(map(lambda u: u["id"], users)) ``` -See [users.list](https://api.slack.com/methods/users.list) for more -info. - ------------------------------------------------------------------------- +See the [`users.list`](https://docs.slack.dev/reference/methods/users.list) API method for more details. -## Uploading files +## Uploading files {#uploading-files} ``` python response = client.files_upload_v2( @@ -490,17 +396,11 @@ response = client.files_upload_v2( ) ``` -See [files.upload](https://api.slack.com/methods/files.upload) for more -info. +See the [`files.upload`](https://docs.slack.dev/reference/methods/files.upload) API method for more details. ------------------------------------------------------------------------- +## Calling API methods {#calling-API-methods} -## Calling any API methods - -This library covers all the public endpoints as the methods in -`WebClient`. That said, you may see a bit delay of the library release. -When you're in a hurry, you can directly use `api_call` method as -below. +This library covers all the public endpoints as the methods in `WebClient`. That said, you may see a bit of a delay with the library release. When you're in a hurry, you can directly use the `api_call` method as below. ``` python import os @@ -514,25 +414,13 @@ response = client.api_call( assert response["message"]["text"] == "Hello world!" ``` ------------------------------------------------------------------------- - -## Web API Rate Limits +## Rate limits {#rate-limits} -When posting messages to a channel, Slack allows applications to send no -more than one message per channel per second. We allow bursts over that -limit for short periods. However, if your app continues to exceed the -limit over a longer period of time it will be rate limited. Different -API methods have other rate limits — be sure to [check the -limits](https://api.slack.com/docs/rate-limits) and test that your -application has a graceful fallback if it should hit those limits. +When posting messages to a channel, Slack allows apps to send no more than one message per channel per second. We allow bursts over that limit for short periods; however, if your app continues to exceed the limit over a longer period of time, it will be rate limited. Different API methods have other limits — be sure to check the [rate limits](https://docs.slack.dev/apis/web-api/rate-limits) and test that your app has a graceful fallback if it should hit those limits. -If you go over these limits, Slack will start returning a HTTP 429 Too -Many Requests error, a JSON object containing the number of calls you -have been making, and a Retry-After header containing the number of -seconds until you can retry. +If you go over these limits, Slack will begin returning *HTTP 429 Too Many Requests* errors, a JSON object containing the number of calls you have been making, and a *Retry-After* header containing the number of seconds until you can retry. -Here's a very basic example of how one might deal with rate limited -requests. +Here's an example of how you might handle rate limited requests: ``` python import os @@ -568,5 +456,4 @@ while True: raise e ``` -See the documentation on [Rate -Limiting](https://api.slack.com/docs/rate-limits) for more info. +Refer to the [rate limits](https://docs.slack.dev/apis/web-api/rate-limits) page for more information. diff --git a/docs/content/legacy/changelog.md b/docs/content/legacy/changelog.md index a063bc01a..750028419 100644 --- a/docs/content/legacy/changelog.md +++ b/docs/content/legacy/changelog.md @@ -3,412 +3,277 @@ ## v3.0.0 (2020-11-09) This is the first stable version of [slack_sdk](https://pypi.org/project/slack-sdk/) v3. The remarkable updates in this major version are: - - Newly added OAuth flow support -- Better Async/sync separation for `WebClient` and `WebhookClient` -- Renamed packages (from `slack` to `slack_sdk`) with deprecation - warnings +- Better async/sync separation for `WebClient` and `WebhookClient` +- Renamed packages (from `slack` to `slack_sdk`) with deprecation warnings -Refer to [v3.0.0 milestone](https://github.com/slackapi/python-slack-sdk/milestone/10?closed=1) -and [the website](https://tools.slack.dev/python-slack-sdk/) for details. If you're a `slackclient` user, the migration guide for `slackclient` v2.x users is available at https://tools.slack.dev/python-slack-sdk/v3-migration/ +Refer to [v3.0.0 milestone](https://github.com/slackapi/python-slack-sdk/milestone/10?closed=1) and [the website](https://tools.slack.dev/python-slack-sdk/) for details. If you're a `slackclient` user, the migration guide for `slackclient` v2.x users is available at http://localhost:3000/python-slack-sdk/v3-migration. ## v2.9.3 (2020-10-20) -Refer to [v2.9.3 -milestone](https://github.com/slackapi/python-slackclient/milestone/20?closed=1) -to know the complete list of the issues resolved by this release. +Refer to [v2.9.3 milestone](https://github.com/slackapi/python-slackclient/milestone/20?closed=1) to know the complete list of the issues resolved by this release. **Updates** -1. \[Block Kit\] #851 #852 Set default_type for HeaderBlock text - - Thanks \@fwump38 -2. \[Block Kit\] #853 #854 Enable to use input blocks in Home tab - views - Thanks \@fwump38 -3. \[RTMClient\] #857 #846 RTMClient does not pass timeout value to - WebClient - Thanks \@Luden \@seratch +- \[Block Kit\] #851 #852 Set default_type for HeaderBlock text - Thanks \@fwump38 +- \[Block Kit\] #853 #854 Enable to use input blocks in Home tab views - Thanks \@fwump38 +- \[RTMClient\] #857 #846 RTMClient does not pass timeout value to WebClient - Thanks \@Luden \@seratch ## v2.9.2 (2020-10-09) -Refer to [v2.9.2 -milestone](https://github.com/slackapi/python-slackclient/milestone/19?closed=1) -to know the complete list of the issues resolved by this release. +Refer to [v2.9.2 milestone](https://github.com/slackapi/python-slackclient/milestone/19?closed=1) to know the complete list of the issues resolved by this release. **Updates** -1. \[Block Kit\] #841 Dispatch Action in Input blocks - Thanks - \@seratch -2. \[WebClient\] #838 Add apps.event.authorizations.list and other - APIs - Thanks \@seratch -3. \[WebClient\]\[WebhookClient\] #829 Improve error body parser to - handle no charset responses - Thanks \@adamchainz \@seratch -4. \[Block Kit\] #824 Correct text field validation in Header blocks - - Thanks \@seratch +- \[Block Kit\] #841 Dispatch Action in Input blocks - Thanks \@seratch +- \[WebClient\] #838 Add apps.event.authorizations.list and other APIs - Thanks \@seratch +- \[WebClient\]\[WebhookClient\] #829 Improve error body parser to handle no charset responses - Thanks \@adamchainz \@seratch +- \[Block Kit\] #824 Correct text field validation in Header blocks - Thanks \@seratch ## v2.9.1 (2020-09-23) -Refer to [v2.9.1 -milestone](https://github.com/slackapi/python-slackclient/milestone/18?closed=1) -to know the complete list of the issues resolved by this release. +Refer to [v2.9.1 milestone](https://github.com/slackapi/python-slackclient/milestone/18?closed=1) to know the complete list of the issues resolved by this release. **Updates** -1. \[WebClient\]\[WebhookClient\] #820 #821 #822 The proxy option in - WebClient/WebhookClient no longer works - Thanks \@seratch +- \[WebClient\]\[WebhookClient\] #820 #821 #822 The proxy option in WebClient/WebhookClient no longer works - Thanks \@seratch ## v2.9.0 (2020-09-17) -Refer to [v2.9.0 -milestone](https://github.com/slackapi/python-slackclient/milestone/17?closed=1) -to know the complete list of the issues resolved by this release. +Refer to [v2.9.0 milestone](https://github.com/slackapi/python-slackclient/milestone/17?closed=1) to know the complete list of the issues resolved by this release. **Updates** -1. \[WebClient\] #811 Add workflows.\* API support - Thanks \@misscoded -2. \[WebClient\] #810 #809 Only set default filename in files_upload if - file is an instance of str - Thanks \@csaska +- \[WebClient\] #811 Add workflows.\* API support - Thanks \@misscoded +- \[WebClient\] #810 #809 Only set default filename in files_upload if file is an instance of str - Thanks \@csaska ## v2.8.2 (2020-09-04) -Refer to [v2.8.2 -milestone](https://github.com/slackapi/python-slackclient/milestone/16?closed=1) -to know the complete list of the issues resolved by this release. +Refer to [v2.8.2 milestone](https://github.com/slackapi/python-slackclient/milestone/16?closed=1) to know the complete list of the issues resolved by this release. **Updates** -1. \[WebClient\] #795 #794 Add admin.conversations.\* API methods in - WebClient/AsyncWebClient - Thanks \@ruberVulpes -2. \[WebClient\] #796 Fix a link to the Static options documentation - - Thanks \@Jamim +- \[WebClient\] #795 #794 Add admin.conversations.\* API methods in WebClient/AsyncWebClient - Thanks \@ruberVulpes +- \[WebClient\] #796 Fix a link to the Static options documentation - Thanks \@Jamim ## v2.8.1 (2020-08-28) -Refer to [v2.8.1 -milestone](https://github.com/slackapi/python-slackclient/milestone/15?closed=1) -to know the complete list of the issues resolved by this release. +Refer to [v2.8.1 milestone](https://github.com/slackapi/python-slackclient/milestone/15?closed=1) to know the complete list of the issues resolved by this release. **Updates** -1. \[WebClient\] #778 #779 Adding support for View objects for - views.push/update/publish - Thanks \@ruberVulpes -2. \[WebClient\] #786 Fix admin.conversations.restrictAccess.\* methods - to match documentation - Thanks \@ruberVulpes +- \[WebClient\] #778 #779 Adding support for View objects for views.push/update/publish - Thanks \@ruberVulpes +- \[WebClient\] #786 Fix admin.conversations.restrictAccess.\* methods to match documentation - Thanks \@ruberVulpes ## v2.8.0 (2020-08-06) -Refer to [v2.8.0 -milestone](https://github.com/slackapi/python-slackclient/milestone/14?closed=1) -to know the complete list of the issues resolved by this release. +Refer to [v2.8.0 milestone](https://github.com/slackapi/python-slackclient/milestone/14?closed=1) to know the complete list of the issues resolved by this release. **New Features** -1. \[WebClient\] #765 #766 Introduce AsyncWebClient/AsyncWebhookClient - providing coroutines - Thanks \@seratch -2. \[Block Kit\] #767 #768 Add \"header\" block support - Thanks - \@mwbrooks +- \[WebClient\] #765 #766 Introduce AsyncWebClient/AsyncWebhookClient providing coroutines - Thanks \@seratch +- \[Block Kit\] #767 #768 Add \"header\" block support - Thanks \@mwbrooks **Updates** -1. \[WebClient\] #738 Add HTTP_PROXY, HTTPS_PROXY env variable support - in async WebClient - Thanks \@iamtofr \@seratch -2. \[WebClient\] #769 #773 Enable User-Agent to have additional info - part - Thanks \@seratch -3. \[WebClient\] #770 #771 Fix a bug where `files.upload`\'s file param - doesn\'t accept bytes data - Thanks \@seratch +- \[WebClient\] #738 Add HTTP_PROXY, HTTPS_PROXY env variable support in async WebClient - Thanks \@iamtofr \@seratch +- \[WebClient\] #769 #773 Enable User-Agent to have additional info part - Thanks \@seratch +- \[WebClient\] #770 #771 Fix a bug where `files.upload`\'s file param doesn\'t accept bytes data - Thanks \@seratch ## v2.7.3 (2020-07-20) -Refer to [v2.7.3 -milestone](https://github.com/slackapi/python-slackclient/milestone/13?closed=1) -to know the complete list of the issues resolved by this release. +Refer to [v2.7.3 milestone](https://github.com/slackapi/python-slackclient/milestone/13?closed=1) to know the complete list of the issues resolved by this release. **Updates** -1. \[WebClient\] #754 Fix #729 Add - admin.conversations.restrictAccess.\*, conversations.mark API - - Thanks \@ruberVulpes \@kian2attari -2. \[WebClient\] #758 Fix #757 Add admin.usergroups.addTeams, - calls.participants.remove API - Thanks \@seratch -3. \[WebClient\] #727 Fix #645 Unclosed client session - Thanks - \@NoAnyLove \@jourdanrodrigues -4. \[WebClient\] #745 Fix #744 a validation logic bug in - DatePickerElement - Thanks \@dzudi941 -5. \[WebClient\] #752 Fix #733 Better error handling when getting - TimeoutError in RTMClient#start() - Thanks \@liorblob \@seratch -6. \[WebClient\] #751 Fix #718 by handling unexpected response body - format - Thanks \@jeffbuswell \@seratch +- \[WebClient\] #754 Fix #729 Add admin.conversations.restrictAccess.\*, conversations.mark API - Thanks \@ruberVulpes \@kian2attari +- \[WebClient\] #758 Fix #757 Add admin.usergroups.addTeams, calls.participants.remove API - Thanks \@seratch +- \[WebClient\] #727 Fix #645 Unclosed client session - Thanks \@NoAnyLove \@jourdanrodrigues +- \[WebClient\] #745 Fix #744 a validation logic bug in DatePickerElement - Thanks \@dzudi941 +- \[WebClient\] #752 Fix #733 Better error handling when getting TimeoutError in RTMClient#start() - Thanks \@liorblob \@seratch +- \[WebClient\] #751 Fix #718 by handling unexpected response body format - Thanks \@jeffbuswell \@seratch ## v2.7.2 (2020-06-23) -Refer to [v2.7.2 -milestone](https://github.com/slackapi/python-slackclient/milestone/12?closed=1) -to know the complete list of the issues resolved by this release. +Refer to [v2.7.2 milestone](https://github.com/slackapi/python-slackclient/milestone/12?closed=1) to know the complete list of the issues resolved by this release. **Updates** -1. \[WebClient\] Fix #728 by adding bytearray support in files_upload - (sync mode) - Thanks \@sofya-salmanova \@seratch -2. \[WebClient\] #726 Fix InputBlock.hint validation failure - Thanks - \@jourdanrodrigues -3. \[WebClient\] #723 Correct the default value of InputBlock.label, - hint - Thanks \@jourdanrodrigues +- \[WebClient\] Fix #728 by adding bytearray support in files_upload (sync mode) - Thanks \@sofya-salmanova \@seratch +- \[WebClient\] #726 Fix InputBlock.hint validation failure - Thanks \@jourdanrodrigues +- \[WebClient\] #723 Correct the default value of InputBlock.label, hint - Thanks \@jourdanrodrigues ## v2.7.1 (2020-06-04) -This release includes the fixes for regression bugs in -`WebClient` since v2.6.0. Refer to [v2.7.1 -milestone](https://github.com/slackapi/python-slackclient/milestone/11?closed=1) -to know the complete list of the issues resolved by this release. +This release includes the fixes for regression bugs in `WebClient` since v2.6.0. Refer to [v2.7.1 milestone](https://github.com/slackapi/python-slackclient/milestone/11?closed=1) to know the complete list of the issues resolved by this release. **Updates** -1. \[WebClient\] #716 #712 Support timeout in sync sync web clients - - Thanks \@DanialErfanian \@seratch -2. \[WebClient\] #713 Support custom SSL context in sync sync web - clients - Thanks \@austinbutler -3. \[WebClient\] #715 #714 Support proxy in sync sync web clients - - Thanks \@austinbutler \@seratch +- \[WebClient\] #716 #712 Support timeout in sync sync web clients - Thanks \@DanialErfanian \@seratch +- \[WebClient\] #713 Support custom SSL context in sync sync web clients - Thanks \@austinbutler +- \[WebClient\] #715 #714 Support proxy in sync sync web clients - Thanks \@austinbutler \@seratch ## v2.7.0 (2020-06-02) -Refer to [v2.7.0 -milestone](https://github.com/slackapi/python-slackclient/milestone/6?closed=1) -to know the complete list of the issues resolved by this release. +Refer to [v2.7.0 milestone](https://github.com/slackapi/python-slackclient/milestone/6?closed=1) to know the complete list of the issues resolved by this release. **New Features** -1. \[WebhookClient\] #707 #270 #531 Add `WebhookClient` for - Incoming Webhooks & response_url - Thanks \@seratch \@chubz - \@Ambro17 +- \[WebhookClient\] #707 #270 #531 Add `WebhookClient` for Incoming Webhooks & response_url - Thanks \@seratch \@chubz \@Ambro17 **Updates** -1. \[WebClient\] #704 #695 Add `calls\_\*` methods to - `WebClient` and `CallBlock` in Block Kit - classes - Thanks \@seratch -2. \[WebClient\] #710 #536 Allow Tokens to be specified per request - - Thanks \@seratch -3. \[WebClient\] #709 #708 Add default_to_current_conversation in - conversations_select elements - Thanks \@seratch +- \[WebClient\] #704 #695 Add `calls\_\*` methods to `WebClient` and `CallBlock` in Block Kit classes - Thanks \@seratch +- \[WebClient\] #710 #536 Allow Tokens to be specified per request - Thanks \@seratch +- \[WebClient\] #709 #708 Add default_to_current_conversation in conversations_select elements - Thanks \@seratch ## v2.6.2 (2020-05-28) -Refer to [v2.6.2 -milestone](https://github.com/slackapi/python-slackclient/milestone/9?closed=1) -to know the complete details of this release. +Refer to [v2.6.2 milestone](https://github.com/slackapi/python-slackclient/milestone/9?closed=1) to know the complete details of this release. **Updates** -1. \[WebClient\] #705 WebClient\'s paginated API calls may fail with no - params - Thanks \@seratch +- \[WebClient\] #705 WebClient\'s paginated API calls may fail with no params - Thanks \@seratch ## v2.6.1 (2020-05-24) -This patch release is a quick fix for #701, a major issue that affected -RTMClient users in v2.6.0. The malfunction was introduced by #667 trying -to address #558 #619. Those issues were reopened and will be resolved by -another approach. Refer to [v2.6.1 -milestone](https://github.com/slackapi/python-slackclient/milestone/8) -to know the complete list of the issues resolved by this release. +This patch release is a quick fix for #701, a major issue that affected RTMClient users in v2.6.0. The malfunction was introduced by #667 trying to address #558 #619. Those issues were reopened and will be resolved by another approach. Refer to [v2.6.1 milestone](https://github.com/slackapi/python-slackclient/milestone/8) to know the complete list of the issues resolved by this release. **Updates** -1. \[RTMClient\] #701 RTMClient drops some messages when they come in - rapid succession - Thanks \@pbrackin \@seratch +- \[RTMClient\] #701 RTMClient drops some messages when they come in rapid succession - Thanks \@pbrackin \@seratch ## v2.6.0 (2020-05-21) -Refer to [v2.6.0 -milestone](https://github.com/slackapi/python-slackclient/milestone/5?closed=1) -to know the complete list of the issues resolved by this release. +Refer to [v2.6.0 milestone](https://github.com/slackapi/python-slackclient/milestone/5?closed=1) to know the complete list of the issues resolved by this release. **New Features** -1. \[Block Kit\] #659 Add complete supports for Block Kit components - and fixed a few existing bugs as well (#500 #519 #623 #632 #635 #639 - #676 #699) - Thanks \@seratch \@diurnalist \@ruberVulpes - \@jeremyschulman \@e271828- \@RodneyU215 -2. \[Signature\] #686 Add slack.signature.SignatureVerifier for request - verification - Thanks \@seratch -3. \[WebClient\] #682 Add missing Grid admin APIs - (`admin.usergroups.\*`, `admin.users.\*`, - `admin.apps.\*`) - Thanks \@stevengill \@seratch +- \[Block Kit\] #659 Add complete supports for Block Kit components and fixed a few existing bugs as well (#500 #519 #623 #632 #635 #639 #676 #699) - Thanks \@seratch \@diurnalist \@ruberVulpes \@jeremyschulman \@e271828- \@RodneyU215 +- \[Signature\] #686 Add slack.signature.SignatureVerifier for request verification - Thanks \@seratch +- \[WebClient\] #682 Add missing Grid admin APIs (`admin.usergroups.\*`, `admin.users.\*`, `admin.apps.\*`) - Thanks \@stevengill \@seratch **Updates** -1. \[WebClient\]\[RTMClient\] Fixed a bunch of the currency issues this - SDK had (#429 #463 #492 #497 #530 #569 #605 #613 #626 #630 #631 #633 - #669) - Thanks \@seratch \@aaguilartablada \@aoberoi \@stevengill - \@marshallino16 -2. \[WebClient\] #681 #560 Enable using bool values for request - parameters - Thanks \@roman-kachanovsky \@seratch -3. \[WebClient\] #661 #678 Improve handling of required \"ids\" - parameters (e.g., channel_ids, users) - Thanks \@seratch -4. \[WebClient\] #680 Add non-conversation API deprecation warnings - - Thanks \@seratch -5. \[WebClient\] #671 #670 Enable passing None values for request - parameters (they used to result in errors) - Thanks \@yuji38kwmt - \@seratch -6. \[WebClient\] #673 Fix #672 files.upload fails with a filepath - containing multi byte chars - Thanks \@yuji38kwmt \@seratch -7. \[WebClient\] #656 Fix #594 preview_image for files.remote.add API - method is not properly supported - Thanks \@Eothred \@seratch -8. \[Maintenance\] #618 Add py.typed file to package distribution - - Thanks \@JKillian -9. \[WebClient\] #599 Strip token string parameters of whitespace - - Thanks \@TheFrozenFire -10. \[WebClient\] #692 Fix superfluous_charset warnings since v2.4.0 - - Thanks \@seratch -11. \[WebClient\] #652 Update oauth_v2_access to include redirect_uri - (as optional) - Thanks \@tomasreimers +- \[WebClient\]\[RTMClient\] Fixed a bunch of the currency issues this SDK had (#429 #463 #492 #497 #530 #569 #605 #613 #626 #630 #631 #633 #669) - Thanks \@seratch \@aaguilartablada \@aoberoi \@stevengill \@marshallino16 +- \[WebClient\] #681 #560 Enable using bool values for request parameters - Thanks \@roman-kachanovsky \@seratch +- \[WebClient\] #661 #678 Improve handling of required \"ids\" parameters (e.g., channel_ids, users) - Thanks \@seratch +- \[WebClient\] #680 Add non-conversation API deprecation warnings - Thanks \@seratch +- \[WebClient\] #671 #670 Enable passing None values for request parameters (they used to result in errors) - Thanks \@yuji38kwmt \@seratch +- \[WebClient\] #673 Fix #672 files.upload fails with a filepath containing multi byte chars - Thanks \@yuji38kwmt \@seratch +- \[WebClient\] #656 Fix #594 preview_image for files.remote.add API method is not properly supported - Thanks \@Eothred \@seratch +- \[Maintenance\] #618 Add py.typed file to package distribution - Thanks \@JKillian +- \[WebClient\] #599 Strip token string parameters of whitespace - Thanks \@TheFrozenFire +- \[WebClient\] #692 Fix superfluous_charset warnings since v2.4.0 - Thanks \@seratch +- \[WebClient\] #652 Update oauth_v2_access to include redirect_uri (as optional) - Thanks \@tomasreimers ## v2.5.0 (2019-12-09) **New Features** -1. \[WebClient\] Adding new oauth.v2.access Web API method. #577 +- \[WebClient\] Adding new oauth.v2.access Web API method. #577 ## v2.4.0 (2019-11-27) **New Features** -1. \[WebClient\] Adding new admin.\* Web API methods. #571 +- \[WebClient\] Adding new admin.\* Web API methods. #571 + +**Updates** -**Updates** 1. \[WebClient\] We\'re no longer validating token types for -Web API methods. Improves compatibility with granular bot permissions. -#568 (Thanks \@Smotko) 2. \[WebClient\] Correcting typos in descriptions -#554 (Thanks \@phamk) 3. \[WebClient\] Fixed \'iteracting\' typo in -library file headers #564 (Thanks \@acabey) 4. \[Message Builders\] -Remove value from LinkButtonElement #563 (Thanks \@pedroma) +- \[WebClient\] We\'re no longer validating token types for Web API methods. Improves compatibility with granular bot permissions. #568 (Thanks \@Smotko) +- \[WebClient\] Correcting typos in descriptions #554 (Thanks \@phamk) +- \[WebClient\] Fixed \'iteracting\' typo in library file headers #564 (Thanks \@acabey) +- \[Message Builders\] Remove value from LinkButtonElement #563 (Thanks \@pedroma) ## v2.3.1 (2019-10-29) **Updates** -1. \[WebClient\] Fixing a regression that causes the client to close - sessions prematurely. #544 (Thanks \@fatih-acar!) -2. \[WebClient\] Adding required missing view param to - views.update Web API method. #542 +- \[WebClient\] Fixing a regression that causes the client to close sessions prematurely. #544 (Thanks \@fatih-acar!) +- \[WebClient\] Adding required missing view param to views.update Web API method. #542 ## v2.3.0 (2019-10-22) **New Features** -1. \[WebClient\] Adding new views.publish Web API method. #540 +- \[WebClient\] Adding new views.publish Web API method. #540 **Updates** -1. \[WebClient\] Some server responses don\'t return json. Correcting - initial assumption. #540 -2. \[Maintenance\] Add `py.typed` to mark the library to - support type hinting #524s +- \[WebClient\] Some server responses don\'t return json. Correcting initial assumption. #540 +- \[Maintenance\] Add `py.typed` to mark the library to support type hinting #524s ## v2.2.1 (2019-10-08) **Updates** -1. \[Docs\] Fix Indentation of Code Snippets in README.md #525 (Thanks - \@abhishekjiitr) -2. \[WebClient\] Fix Web Client custom iterator #521 (Thanks - \@smaeda-ks) -3. \[WebClient\] Oauth previously failed to pass along credentials - properly. This is fixed now. #527 -4. \[WebClient\] When a SlackApiError occurs we\'re now passing the - entire SlackResponse into the exception. #527 +- \[Docs\] Fix Indentation of Code Snippets in README.md #525 (Thanks \@abhishekjiitr) +- \[WebClient\] Fix Web Client custom iterator #521 (Thanks \@smaeda-ks) +- \[WebClient\] Oauth previously failed to pass along credentials properly. This is fixed now. #527 +- \[WebClient\] When a SlackApiError occurs we\'re now passing the entire SlackResponse into the exception. #527 ## v2.2.0 (2019-09-25) **New Features** -1. \[WebClient\] Adding new admin and remote files API methods. #501 -2. \[WebClient\] Adding new view API methods. #517 +- \[WebClient\] Adding new admin and remote files API methods. #501 +- \[WebClient\] Adding new view API methods. #517 **Updates** -1. \[Message Builders\] Update BlockAttachment to not send invalid JSON - due to fields attribute #473 (Thanks \@paul-griffith) -2. \[Docs\] Add RTM section for docs v2 #477 (Thanks \@shanedewael) -3. \[Docs\] Fix typo; recieved -\> received #478 (Thanks - \@joakimnordling) -4. \[Docs\] Fix block kit link & update docs #484 (Thanks \@clavin) -5. \[RTMClient\] Return callback from `RTMClient.run_on` - #490 (Thanks \@clavin) -6. \[Docs\] Fix link to Auth Guide in readme #498 (Thanks \@asherf) -7. \[Docs\] Fix missing word and typo #512 (Thanks \@marks) -8. \[Message Builders\] bugfix for value length in button elements #514 - (Thanks \@avanderm) -9. \[Docs\] Fixes formatting #515 (Thanks \@vpetersson) -10. \[Docs\] Improve a code snippet on README #516 (Thanks \@seratch) -11. \[WebClient\] Fixed an OAuth Headers bug and made the - `token` param optional. #517 +- \[Message Builders\] Update BlockAttachment to not send invalid JSON due to fields attribute #473 (Thanks \@paul-griffith) +- \[Docs\] Add RTM section for docs v2 #477 (Thanks \@shanedewael) +- \[Docs\] Fix typo; recieved -\> received #478 (Thanks \@joakimnordling) +- \[Docs\] Fix block kit link & update docs #484 (Thanks \@clavin) +- \[RTMClient\] Return callback from `RTMClient.run_on` #490 (Thanks \@clavin) +- \[Docs\] Fix link to Auth Guide in readme #498 (Thanks \@asherf) +- \[Docs\] Fix missing word and typo #512 (Thanks \@marks) +- \[Message Builders\] bugfix for value length in button elements #514 (Thanks \@avanderm) +- \[Docs\] Fixes formatting #515 (Thanks \@vpetersson) +- \[Docs\] Improve a code snippet on README #516 (Thanks \@seratch) +- \[WebClient\] Fixed an OAuth Headers bug and made the `token` param optional. #517 ## v2.1.0 (2019-07-01) **New Features** -1. Type-hinted helper classes for building messages in v2 #400 (Thanks - \@paul-griffith) +- Type-hinted helper classes for building messages in v2 #400 (Thanks \@paul-griffith) **Breaking Changes** -1. \[RTMClient\] Converted the `RTMClient#typing()` - function to async #446 +- \[RTMClient\] Converted the `RTMClient#typing()` function to async #446 **Updates** -1. \[RTMClient\] Handle case in which aiohttp closes the websocket due - to lack of ping responses. #453 (Thanks \@flyte) -2. Modify package identifier in user agent to match v1.x identifier - #418 (Thanks \@aoberoi) -3. \[WebClient\] Fixed typo in Scheduled message #428 & #435 (Thanks - \@splinterific) -4. Transform install_requires of \'aiodns\' into extras_require. #440 - (Thanks \@staticdev) +- \[RTMClient\] Handle case in which aiohttp closes the websocket due to lack of ping responses. #453 (Thanks \@flyte) +- Modify package identifier in user agent to match v1.x identifier #418 (Thanks \@aoberoi) +- \[WebClient\] Fixed typo in Scheduled message #428 & #435 (Thanks \@splinterific) +- Transform install_requires of \'aiodns\' into extras_require. #440 (Thanks \@staticdev) -**Thank you!!** To everyone who\'s opened, commented or reacted to an -issue; this project is better because of you! Thank you for helping the -Slack community! +**Thank you!** To everyone who has opened, commented or reacted to an issue; this project is better because of you! Thank you for helping the Slack community! ## v2.0.0 (2019-04-29) -[Original -RFC](https://github.com/slackapi/python-slackclient/issues/384) +[Original RFC](https://github.com/slackapi/python-slackclient/issues/384) [v2 PR](https://github.com/slackapi/python-slackclient/pull/394) **New Features** -1. Client Decomposition: We've split the client into two. - -> a. WebClient: A HTTP client focused on Slack\'s Web API. -> b. RTMClient: A websocket client focused on Slack\'s RTM API. - -2. RTMClient: Completely redesigned, this client allows you to link - your application\'s callbacks to corresponding Slack events. -3. WebClient: The WebClient now provides built-in methods for Slack\'s - Web API. These methods act as helpers enabling you to focus less on - how the request is constructed. Here are a few things that this - provides: +- Client Decomposition: We've split the client into two. + - WebClient: A HTTP client focused on Slack\'s Web API. + - RTMClient: A websocket client focused on Slack\'s RTM API. +- RTMClient: Completely redesigned, this client allows you to link your application\'s callbacks to corresponding Slack events. +- WebClient: The WebClient now provides built-in methods for Slack\'s Web API. These methods act as helpers enabling you to focus less on how the request is constructed. Here are a few things this provides: + - Basic information about each method through the docstring. + - Easy File Uploads: You can now pass in the location of a file and the library will handle opening and retrieving the file object to be transmitted. + - Token type validation: This gives you better error messaging when you\'re attempting to consume an API method that your token doesn\'t have access to. + - Constructs requests using Slack\'s preferred HTTP methods and content-types. -> a. Basic information about each method through the docstring. -> b. Easy File Uploads: You can now pass in the location of a file and -> the library will handle opening and retrieving the file object to -> be transmitted. -> c. Token type validation: This gives you better error messaging when -> you\'re attempting to consume an api method that your token -> doesn\'t have access to. -> d. Constructs requests using Slack\'s preferred HTTP methods and -> content-types. +**Breaking Changes:** If you\'re migrating from v1.x of slackclient to v2.x, Please follow our [migration guide](https://github.com/slackapi/python-slackclient/wiki/Migrating-to-2.x) to ensure your app continues working after updating. -**Breaking Changes:** If you\'re migrating from v1.x of slackclient to -v2.x, Please follow our migration guide to ensure your app continues -working after updating. - -[Check out the Migration Guide -here!](https://github.com/slackapi/python-slackclient/wiki/Migrating-to-2.x) - -**Thank you!** This release would not have been possible without the -support of our community. Thank you to everyone who's contributed to -this release. +**Thank you!** This release would not have been possible without the support of our community. Thank you to everyone who has contributed to this release. ## v1.3.1 (2019-02-28) @@ -416,14 +281,16 @@ this release. ## v1.3.0 (2018-09-11) -\## New Features - Adds support for short lived tokens and automatic -token refresh #347 (Thanks \@roach!) +**New Features** + +- Adds support for short lived tokens and automatic token refresh #347 (Thanks \@roach!) + +**Other** -\## Other - update RTM rate limiting comment and error message #308 -(Thanks \@benoitlavigne!) - Use logging instead of traceback #309 -(Thanks \@harlowja!) - Remove Python 3.3 from test environments #346 -(Thanks \@roach!) - Enforced linting when using VSCode. #347 (Thanks -\@roach!) +- Update RTM rate limiting comment and error message #308 (Thanks \@benoitlavigne!) +- Use logging instead of traceback #309 (Thanks \@harlowja!) +- Remove Python 3.3 from test environments #346 (Thanks \@roach!) +- Enforced linting when using VSCode. #347 (Thanks \@roach!) ## v1.2.1 (2018-03-26) @@ -431,123 +298,102 @@ token refresh #347 (Thanks \@roach!) ## v1.2.0 (2018-03-20) -- You can now tell the RTM client to automatically reconnect by - passing `auto_reconnect=True` +- You can now tell the RTM client to automatically reconnect by passing `auto_reconnect=True` ## v1.1.3 (2018-03-01) -- Fixed another API param encoding bug. It encodes things properly - now. +- Fixed another API param encoding bug. It encodes things properly now. ## v1.1.2 (2018-01-31) -- Fixed an encoding issue which was encoding some Web API params - incorrectly (sorry) +- Fixed an encoding issue which was encoding some Web API params incorrectly ## v1.1.1 (2018-01-30) -> - Adds HTTP response headers to `api_call` responses to -> expose things like rate limit info -> - Moves `token` into auth header rather than request -> params +- Adds HTTP response headers to `api_call` responses to expose things like rate limit info +- Moves `token` into auth header rather than request params ## v1.1.0 (2017-11-21) -> - Aadds new SlackClientError and ResponseParseError types to -> describe errors - thanks \@aoberoi! -> - Fix Build Error (#245) - thanks \@stasfilin! -> - include email as user property (#173) - thanks \@acaire! -> - Add http reply into slack login and slack connection error -> (#216) - thanks \@harlowja! -> - Removed unused exception class (#233) -> - Fix rtm_send_message bug (#225) - thanks \@kt5356! -> - Allow use of custom parameters on rtm_connect() (#210) - thanks -> \@kamushadenes! -> - Fix link to rtm.connect docs (#223) - \@sampart! +- Adds new SlackClientError and ResponseParseError types to describe errors - thanks \@aoberoi! +- Fix Build Error (#245) - thanks \@stasfilin! +- Include email as user property (#173) - thanks \@acaire! +- Add http reply into slack login and slack connection error (#216) - thanks \@harlowja! +- Removed unused exception class (#233) +- Fix rtm_send_message bug (#225) - thanks \@kt5356! +- Allow use of custom parameters on rtm_connect() (#210) - thanks \@kamushadenes! +- Fix link to rtm.connect docs (#223) - \@sampart! ## v1.0.9 (2017-08-31) -> - Fixed rtm_send_message ID bug introduced in 1.0.8 +- Fixed rtm_send_message ID bug introduced in 1.0.8 ## v1.0.8 (2017-08-31) -> - Added rtm.connect support +- Added rtm.connect support ## v1.0.7 (2017-08-02) -> - Fixes an issue where connecting over RTM to large teams may result -> in "Websocket URL expired" errors -> - A load of packaging improvements +- Fixes an issue where connecting over RTM to large teams may result in "Websocket URL expired" errors +- A bunch of packaging improvements ## v1.0.6 (2017-06-12) -> - Added proxy support (thanks \@timfeirg!) -> - Tidied up docs (thanks \@schlueter!) -> - Added tox settings for Python 3 testing (thanks \@cclauss!) +- Added proxy support (thanks \@timfeirg!) +- Tidied up docs (thanks \@schlueter!) +- Added tox settings for Python 3 testing (thanks \@cclauss!) ## v1.0.5 (2017-01-23) -> - Allow RTM Channel.send_message to reply to a thread -> - Index users by ID instead of Name (non-breaking change) -> - Added timeout to api calls. -> - Fixed a typo about token access in auth.rst, thanks \@kelvintaywl! -> - Added Message Threads to the docs +- Allow RTM Channel.send_message to reply to a thread +- Index users by ID instead of Name (non-breaking change) +- Added timeout to api calls +- Fixed a typo about token access in auth.rst, thanks \@kelvintaywl! +- Added Message Threads to the docs ## v1.0.4 (2016-12-15) -> - fixed the ability to search for a user by ID +- Fixed the ability to search for a user by ID ## v1.0.3 (2016-12-13) -> - fixed an issue causing RTM connections to fail for large teams +- Fixed an issue causing RTM connections to fail for large teams ## v1.0.2 (2016-09-22) -> - removed unused ping counter -> - fixed contributor guidelines links -> - updated documentation -> - Fix bug preventing API calls requiring a file ID -> - Removes files from api_calls before JSON encoding, so the request -> is properly formatted +- Removed unused ping counter +- Fixed contributor guidelines links +- Updated documentation +- Fix bug preventing API calls requiring a file ID +- Removes files from api_calls before JSON encoding, so the request is properly formatted ## v1.0.1 (2016-03-25) -> - fix for \_\_eq\_\_ comparison in channels using \'#\' in channel -> name -> - added copyright info to the LICENSE file +- Fix for \_\_eq\_\_ comparison in channels using \'#\' in channel name +- Added copyright info to the LICENSE file ## v1.0.0 (2016-02-28) -> - the `api_call` function now returns a decoded JSON object, rather -> than a JSON encoded string -> - some `api_call` calls now call actions on the parent server -> object: -> - `im.open` -> - `mpim.open`, `groups.create`, `groups.createChild` -> - `channels.create`, `channels.join` +- The `api_call` function now returns a decoded JSON object, rather than a JSON encoded string +- Some `api_call` calls now call actions on the parent server object: + - `dm.open` + - `mpdm.open`, `groups.create`, `groups.createChild` + - `channels.create`, `channels.join` ## v0.18.0 (2016-02-21) -> - Moves to use semver for versioning -> - Adds support for private groups and MPDMs -> - Switches to use requests instead of urllib -> - Gets Travis CI integration working -> - Fixes some formatting issues so the code will work for python 2.6 -> - Cleans up some unused imports, some PEP-8 fixes and a couple bad -> default args fixes +- Moves to use semver for versioning +- Adds support for private groups and MPDMs +- Switches to use requests instead of urllib +- Gets Travis CI integration working +- Fixes some formatting issues so the code will work for python 2.6 +- Cleans up some unused imports, some PEP-8 fixes and a couple bad default args fixes ## v0.17.0 (2016-02-15) -> - Fixes the server so that it doesn\'t add duplicate users or -> channels to its internal lists, -> https://github.com/slackapi/python-slackclient/commit/0cb4bcd6e887b428e27e8059b6278b86ee661aaa -> - README updates: -> - Updates the URLs pointing to Slack docs for configuring -> authentication, -> https://github.com/slackapi/python-slackclient/commit/7d01515cebc80918a29100b0e4793790eb83e7b9 -> - s/channnels/channels, -> https://github.com/slackapi/python-slackclient/commit/d45285d2f1025899dcd65e259624ee73771f94bb -> - Adds users to the local cache when they join the team, -> https://github.com/slackapi/python-slackclient/commit/f7bb8889580cc34471ba1ddc05afc34d1a5efa23 -> - Fixes urllib py 2/3 compatibility, -> https://github.com/slackapi/python-slackclient/commit/1046cc2375a85a22e94573e2aad954ba7287c886 +- Fixes the server so that it doesn\'t add duplicate users or channels to its internal lists, https://github.com/slackapi/python-slackclient/commit/0cb4bcd6e887b428e27e8059b6278b86ee661aaa +- README updates: + - Updates the URLs pointing to Slack docs for configuring authentication, https://github.com/slackapi/python-slackclient/commit/7d01515cebc80918a29100b0e4793790eb83e7b9 + - s/channnels/channels, https://github.com/slackapi/python-slackclient/commit/d45285d2f1025899dcd65e259624ee73771f94bb + - Adds users to the local cache when they join the team, https://github.com/slackapi/python-slackclient/commit/f7bb8889580cc34471ba1ddc05afc34d1a5efa23 + - Fixes urllib py 2/3 compatibility, https://github.com/slackapi/python-slackclient/commit/1046cc2375a85a22e94573e2aad954ba7287c886 diff --git a/docs/content/legacy/conversations.md b/docs/content/legacy/conversations.md index f24652709..6d53e620d 100644 --- a/docs/content/legacy/conversations.md +++ b/docs/content/legacy/conversations.md @@ -1,33 +1,22 @@ -# Conversations API {#conversations_api} +# Conversations API :::danger -The [slackclient](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode now and [slack-sdk](https://pypi.org/project/slack-sdk/) project is the successor. The v3 SDK provides more functionalities such as Socket Mode, OAuth flow module, SCIM API, Audit Logs API, better asyncio support, retry handlers, and many more. +The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor. The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. ::: -The Slack Conversations API provides your app with a unified interface to work with all the channel-like things encountered in Slack; public channels, private channels, direct messages, group direct messages, and our newest channel type, Shared Channels. +The Slack Conversations API provides your app with a unified interface to work with all the channel-like things encountered in Slack: public channels, private channels, direct messages, group direct messages, and shared channels. -See [Conversations API](https://api.slack.com/docs/conversations-api) docs for more info. +Refer to [using the Conversations API](https://docs.slack.dev/apis/web-api/using-the-conversations-api) for more information. ------------------------------------------------------------------------- +## Direct messages {#direct-messages} -## Direct messages +The `conversations.open` API method opens either a 1:1 direct message with a single user or a multi-person direct message, depending on the number of users supplied to the `users` parameter. (For public or private channels, use the `conversations.create` API method.) -The `conversations_open` method opens either a 1:1 direct message with a -single user or a a multi-person direct message, depending on the number -of users supplied to the `users` parameter. +Provide a `users` parameter as an array with 1-8 user IDs to open or resume a conversation. Providing only 1 ID will create a direct message. providing more IDs will create a new multi-party direct message or will resume an existing conversation. -*For public or private channels, use the \`\`conversations_create\`\` -method.* - -Provide a `users` parameter as an array with 1 to 8 user IDs to open or -resume a conversation. Providing only 1 ID will create a direct message. -Providing more will create a new multi-party DM or resume an existing -conversation. - -Subsequent calls to `conversations_open` with the same set of users will -return the already existing conversation. +Subsequent calls with the same set of users will return the already existing conversation. ``` python import os @@ -37,18 +26,11 @@ client = WebClient(token=os.environ["SLACK_API_TOKEN"]) response = client.conversations_open(users=["W123456789", "U987654321"]) ``` -See -[conversations.open](https://api.slack.com/methods/conversations.open) -additional info. +See the [`conversations.open`](https://docs.slack.dev/reference/methods/conversations.open) API method for additional details. ------------------------------------------------------------------------- +## Creating channels {#creating-channels} -## Creating channels - -Creates a new channel, either public or private. The `name` parameter is -required, may contain numbers, letters, hyphens, and underscores, and -must contain fewer than 80 characters. To make the channel private, set -the option `is_private` parameter to `True`. +Creates a new channel, either public or private. The `name` parameter is required and may contain numbers, letters, hyphens, or underscores, and must contain fewer than 80 characters. To make the channel private, set the optional `is_private` parameter to `True`. ``` python import os @@ -65,20 +47,11 @@ channel_id = response["channel"]["id"] response = client.conversations_archive(channel=channel_id) ``` -See -[conversations.create](https://api.slack.com/methods/conversations.create) -additional info. - ------------------------------------------------------------------------- +See the [`conversations.create`](https://docs.slack.dev/reference/methods/conversations.create) API method for additional details. -## Getting more information +## Getting conversation information {#more-information} -To retrieve a set of metadata about a channel (public, private, DM, or -multi-party DM), use `conversations_info`. The `channel` parameter is -required and must be a valid channel ID. The optional `include_locale` -boolean parameter will return locale data, which may be useful if you -wish to return localized responses. The `include_num_members` boolean -parameter will return the number of people in a channel. +To retrieve a set of metadata about a channel (public, private, DM, or multi-party DM), use the `conversations.info` API method. The `channel` parameter is required and must be a valid channel ID. The optional `include_locale` boolean parameter will return locale data, which may be useful if you wish to return localized responses. The `include_num_members` boolean parameter will return the number of people in a channel. ``` python import os @@ -91,19 +64,11 @@ response = client.conversations_info( ) ``` -See -[conversations.info](https://api.slack.com/methods/conversations.info) -for more info. +See the [`conversations.info`](https://docs.slack.dev/reference/methods/conversations.info) API method for more details. ------------------------------------------------------------------------- +## Listing conversations {#listing-conversations} -## Listing conversations - -To get a list of all the conversations in a workspace, use -`conversations_list`. By default, only public conversations are -returned; use the `types` parameter specify which types of conversations -you're interested in (Note: `types` is a string of comma-separated -values) +To get a list of all the conversations in a workspace, use the `conversations.list` API method. By default, only public conversations are returned. Use the `types` parameter specify which types of conversations you're interested in. Note that `types` is a string of comma-separated values. ``` python import os @@ -114,9 +79,7 @@ response = client.conversations_list() conversations = response["channels"] ``` -Use the `types` parameter to request additional channels, including -`public_channel`, `private_channel`, `mpim`, and `im`. This parameter is -a string of comma-separated values. +Use the `types` parameter to request additional channels, including `public_channel`, `private_channel`, `mpdm`, and `dm`. This parameter is a string of comma-separated values. ``` python import os @@ -128,45 +91,33 @@ response = client.conversations_list( ) ``` -See -[conversations.list](https://api.slack.com/methods/conversations.list) -for more info. - ------------------------------------------------------------------------- +See the [`conversations.list`](https://docs.slack.dev/reference/methods/conversations.list) API method for more details. -## Leaving a conversation +## Getting members of a conversation {#get-members} -To leave a conversation, use `conversations_leave` with the required -`channel` param containing the ID of the channel to leave. +To get a list of members for a conversation, use the `conversations.members` API method with the required `channel` parameter. ``` python import os from slack import WebClient client = WebClient(token=os.environ["SLACK_API_TOKEN"]) -response = client.conversations_leave(channel="C27182818") +response = client.conversations_members(channel="C16180339") +user_ids = response["members"] ``` -See -[conversations.leave](https://api.slack.com/methods/conversations.leave) -for more info. - ------------------------------------------------------------------------- +See the [`conversations.members`](https://docs.slack.dev/reference/methods/conversations.members) API method for more details. -## Getting members +## Leaving a conversation {#leave-conversations} -To get a list of the members of a conversation, use -`conversations_members` with the required `channel` parameter. +To leave a conversation, use the `conversations.leave` API method with the required `channel` parameter containing the ID of the channel to leave. ``` python import os from slack import WebClient client = WebClient(token=os.environ["SLACK_API_TOKEN"]) -response = client.conversations_members(channel="C16180339") -user_ids = response["members"] +response = client.conversations_leave(channel="C27182818") ``` -See -[conversations.members](https://api.slack.com/methods/conversations.members) -for more info. +See the [`conversations.leave`](https://docs.slack.dev/reference/methods/conversations.leave) API method for more details. diff --git a/docs/content/legacy/faq.md b/docs/content/legacy/faq.md index 99ebb8757..cae9326db 100644 --- a/docs/content/legacy/faq.md +++ b/docs/content/legacy/faq.md @@ -1,15 +1,15 @@ -# Frequently Asked Questions +# FAQs :::danger -The [slackclient](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode now and [slack-sdk](https://pypi.org/project/slack-sdk/) project is the successor. The v3 SDK provides more functionalities such as Socket Mode, OAuth flow module, SCIM API, Audit Logs API, better asyncio support, retry handlers, and many more. +The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor. The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. ::: -## I cannot install `slackclient` +## Why can't I install `slackclient`? We recommend using [virtualenv (venv)](https://docs.python.org/3/tutorial/venv.html) to set up your -Python runtime. +Python runtime as follows: ``` bash # Create a dedicated virtual env for running your Python scripts @@ -25,8 +25,7 @@ pip install "slackclient>=2.0" export SLACK_API_TOKEN=xoxb-*** ``` -Then, verify the following code works on the Python REPL (you can start -it by just `python`). +Then, verify the following code works on the Python REPL (you can start it using just `python`): ``` python import os @@ -45,52 +44,27 @@ try removing `slack` by `pip uninstall slack` and reinstalling ## Should I go with `run_async`? -For most cases, we recommend going with `run_async=False` mode. So, the -default is `False`. +For most cases, we recommend going with `run_async=False` mode. So, the default is `False`. -If your application turns `run_async` on, the app should follow right -and efficient ways to use -[asyncio](https://docs.python.org/3/library/asyncio.html)'s -non-blocking event loops and -[aiohttp](https://docs.aiohttp.org/en/stable/). Also, consider using -async frameworks and their appropriate runtime. Running event loops -along with Flask or similar may not be a good fit. +If your application turns `run_async` on, the app should follow efficient ways to use [asyncio](https://docs.python.org/3/library/asyncio.html)'s non-blocking event loops and [aiohttp](https://docs.aiohttp.org/en/stable/). Also, consider using async frameworks and their appropriate runtime. Running event loops along with Flask or similar may not be a good fit. -If you have to simultaneously run `WebClient` with `run_async=True` -outside an event loop for some reason, sharing a single `WebClient` -instance doesn't work for you. Create an instance every time you run -the code. The `run_async=False` mode doesn't have such issues. +If you have to simultaneously run `WebClient` with `run_async=True` outside an event loop for some reason, sharing a single `WebClient` instance doesn't work for you. Create an instance every time you run the code. The `run_async=False` mode doesn't have such issues. -## I found a bug! +## What if I found a bug? -That's great! Thank you. Let us know on the Issue Tracker. If -you're feeling particularly ambitious, why not submit a pull request with a bug fix? +That's great! Thank you. Let us know by [creating an issue](https://github.com/slackapi/python-slack-sdk/issues/new/choose), or if you're feeling particularly ambitious, why not submit a pull request with a bug fix? Check out our contributor's guide [here](https://github.com/SlackAPI/python-slack-sdk/blob/main/.github/contributing.md). -## There's a feature missing! +## What if I have a feature suggestion? -There's always something more that could be added! You can let us know -in the Issue Tracker to start a discussion around the proposed -feature, that's a good start. If you're feeling particularly -ambitious, why not write the feature yourself, and submit a pull request! We love feedback and we love help and we don't bite. Much. +There's always something more that could be added! Let us know by [creating an issue](https://github.com/slackapi/python-slack-sdk/issues/new/choose) to start a discussion around the proposed feature. If you're feeling particularly ambitious, why not write the feature yourself, and submit a pull request? We love feedback and we also love help from our amazing community of developers! ## How do I contribute? What an excellent question. First of all, please have a look at our -general contributing guidelines. - -All done? Great! While we're super excited to incorporate your new -feature, there are a couple of things we want to make sure you've given -thought to. - -- Please write unit tests for your new code. But don't **just** aim - to increase the test coverage, rather, we expect you to have written - **thoughtful** tests that ensure your new feature will continue to - work as expected, and to help future contributors to ensure they - don't break it! -- Please document your new feature. Think about **concrete use cases** - for your feature, and add a section to the appropriate document, - including a **complete** sample program that demonstrates your - feature. Don't forget to update the changelog in `changelog.rst`! - -Including these two items with your pull request will totally make our -day---and, more importantly, your future users' days! +contributor's guide [here](https://github.com/SlackAPI/python-slack-sdk/blob/main/.github/contributing.md). + +All done? Great! While we're super excited to incorporate your new feature, there are a couple of things we want to make sure you've given thought to: +* Please include unit tests for your new code. But don't just aim to increase the test coverage, rather, we expect you to have written thoughtful tests that ensure your new feature will continue to work as expected, and to help future contributors to ensure they don't break it! +* Please document your new feature. Think about concrete use cases for your feature, and add a section to the appropriate document, including a complete sample program that demonstrates your feature. + +Including these two items with your pull request will totally make our day - and, more importantly, your future users' days! diff --git a/docs/content/legacy/index.md b/docs/content/legacy/index.md index 1040eeefa..984cf6aca 100644 --- a/docs/content/legacy/index.md +++ b/docs/content/legacy/index.md @@ -2,50 +2,39 @@ :::danger -The [slackclient](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode now and [slack-sdk](https://pypi.org/project/slack-sdk/) project is the successor. The v3 SDK provides more functionalities such as Socket Mode, OAuth flow module, SCIM API, Audit Logs API, better asyncio support, and retry handlers. +The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor. The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. ::: -Refer to [the migration guide](https://tools.slack.dev/python-slack-sdk/v3-migration/index.html#from-slackclient-2-x) to learn how to smoothly migrate your existing code. +Refer to the [migration guide](https://tools.slack.dev/python-slack-sdk/v3-migration) to learn how to smoothly migrate your existing code. -Slack APIs allow anyone to build full featured integrations that extend and expand the capabilities of your Slack workspace. These APIs allow you to build applications that interact with Slack just like the people on your team — they can post messages, respond to events that happen — as well as build complex UIs for getting work done. +Slack APIs allow anyone to build full featured integrations that extend and expand the capabilities of your Slack workspace. These APIs allow you to build applications that interact with Slack just like the people on your team. They can post messages, respond to events that happen, and build complex UIs for getting work done. -To make it easier for Python programmers to build Slack applications, we've provided this open source SDK. will let you get started building Python apps as quickly as possible. The current version is built for Python 3.6 and higher — if you need to target Python 2.x, you might consider using v1 of the SDK. +To make it easier for Python programmers to build Slack applications, we've provided this open source SDK that will help you get started building Python apps as quickly as possible. The current version is built for Python 3.6 and higher — if you need to target Python 2.x, you might consider using v1 of the SDK. -## Slack Platform Basics +## Slack platform basics {#platform-basics} -If you're new to the Slack platform, we have a general purpose [guide -for building apps](https://api.slack.com/start) that isn't specific to -any language or framework. Its a great place to learn all about the -concepts that go into building a great Slack app. +If you're new to the Slack platform, we have a general purpose [quickstart guide](https://docs.slack.dev/quickstart) that isn't specific to any language or framework. Its a great place to learn all about the concepts that go into building a great Slack app. -Before you get started building on the Slack platform, you need to [set -up your app's configuration](https://api.slack.com/apps/new). This is -where you define things like your apps permissions and the endpoints -that Slack should use for interacting with the backend you will build -with Python. +Before you get started building on the Slack platform, you need to set up [your app's configuration](https://api.slack.com/apps/new). This is where you define things like your apps permissions and the endpoints that Slack should use for interacting with the backend you'll build using Python. -The app configuration page is also where you will acquire the OAuth -token you will use to call Slack APIs. Treat this token with care, -just like you would a password, because it has access to workspace and -can potentially read and write data to and from it. +The app configuration page is also where you'll acquire the OAuth token you'll use to call Slack API methods. Treat this token with care, just like you would a password, because it has access to your workspace and can potentially read and write data to and from it. -## Installation +## Installation {#installation} -We recommend using [PyPI](https://pypi.python.org/pypi) to install +We recommend using [PyPI](https://pypi.python.org/pypi) to install as follows: ``` bash pip install slackclient ``` -Of course, you can always pull the source code directly into your -project: +Of course, you can always pull the source code directly into your project like this: ``` bash git clone https://github.com/slackapi/python-slackclient.git ``` -And then, save a few lines of code as `./test.py`. +And then, save a few lines of code as `./test.py` like so: ``` python # test.py @@ -61,10 +50,8 @@ client = WebClient() api_response = client.api_test() ``` -You can run the code this way. +Run the code as follows: ``` bash python test.py ``` - -It's also good to try on the Python REPL. \ No newline at end of file diff --git a/docs/content/legacy/real_time_messaging.md b/docs/content/legacy/real_time_messaging.md index e9b53d577..1dd905284 100644 --- a/docs/content/legacy/real_time_messaging.md +++ b/docs/content/legacy/real_time_messaging.md @@ -1,37 +1,28 @@ -# Real Time Messaging (RTM) {#real-time-messaging} +# Real Time Messaging (RTM) :::danger -The [slackclient](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode now and [slack-sdk](https://pypi.org/project/slack-sdk/) project is the successor. The v3 SDK provides more functionalities such as Socket Mode, OAuth flow module, SCIM API, Audit Logs API, better asyncio support, retry handlers, and many more. +The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor. The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. ::: -The [Real Time Messaging (RTM) API](https://api.slack.com/rtm) is a WebSocket-based API that allows you to receive events from Slack in real time and send messages as users. +The [Legacy Real Time Messaging (RTM) API](https://docs.slack.dev/legacy/legacy-rtm-api) is a WebSocket-based API that allows you to receive events from Slack in real time and to send messages as users. -If you prefer events to be pushed to your app, we recommend using the HTTP-based [Events API](https://api.slack.com/events-api) instead. The Events API contains some events that aren't supported in the RTM API (like [app_home_opened event](https://api.slack.com/events/app_home_opened)), and it supports most of the event types in the RTM API. If you'd like to use the Events API, you can use the [Python Slack Events Adaptor](https://github.com/slackapi/python-slack-events-api). +If you prefer events to be pushed to your app, we recommend using the HTTP-based [Events API](https://docs.slack.dev/apis/events-api) instead. The Events API contains some events that aren't supported in the Legacy RTM API (such as the [app_home_opened event](https://docs.slack.dev/reference/events/app_home_opened)), and it supports most of the event types in the Legacy RTM API. If you'd like to use the Events API, you can use the [Python Slack Events Adaptor](https://github.com/slackapi/python-slack-events-api). -The RTMClient allows apps to communicate with the Slack RTM API. +The RTMClient allows apps to communicate with the Legacy RTM API. -The event-driven architecture of this client allows you to simply link callbacks to their corresponding events. When an event occurs this client executes your callback while passing along any information it receives. We also give you the ability to call our web client from inside your callbacks. +The event-driven architecture of this client allows you to simply link callbacks to their corresponding events. When an event occurs, this client executes your callback while passing along any information it receives. We also give you the ability to call our web client from inside your callbacks. -In our example below, we watch for a [message event](https://api.slack.com/events/message) that contains \"Hello\" and if its received, we call the `say_hello()` function. We then issue a call to the web client to post back to the channel saying \"Hi\" to the user. +In our example below, we watch for a [message event](https://docs.slack.dev/reference/events/message) that contains \"Hello\" and if it's received, we call the `say_hello()` function. We then issue a call to the web client to post back to the channel saying \"Hi\" to the user. -## Configuring the RTM API +## Configuring the RTM API {#configuration} -Events using the RTM API **must** use a classic Slack app (with a plain -`bot` scope). +Events using the Legacy RTM API **must** use a Slack app with a plain `bot` scope. -If you already have a classic Slack app, you can use those credentials. -If you don't and need to use the RTM API, you can [create a classic -Slack app](https://api.slack.com/apps?new_classic_app=1). You can learn -more in the [API -documentation](https://api.slack.com/authentication/basics#soon). +If you already have a Slack app with a plain `bot` scope, you can use those credentials. If you don't and need to use the Legacy RTM API, you can create a Slack app [here](https://api.slack.com/apps?new_classic_app=1). Even if the Slack app configuration pages encourage you to upgrade to a newer permission model, don't upgrade it and continue using the \"classic\" bot permission. -Also, even if the Slack app configuration pages encourage you to upgrade -to the newer permission model, don't upgrade it and keep using the -\"classic\" bot permission. - -## Connecting to the RTM API +## Connecting to the RTM API {#connecting} ``` python import os @@ -58,17 +49,11 @@ rtm_client = RTMClient(token=slack_token) rtm_client.start() ``` -## rtm.start vs rtm.connect +## The `rtm.start` vs. `rtm.connect` API methods {#rtm-methods} -By default, the RTM client uses `rtm.connect` to establish a WebSocket -connection with Slack. The response contains basic information about the -team and WebSocket url. +By default, the RTM client uses the [`rtm.connect`](https://docs.slack.dev/reference/methods/rtm.connect) API method to establish a WebSocket connection with Slack. The response contains basic information about the team and WebSocket URL. -If you'd rather use `rtm.start` to establish the connection, which -provides more information about the conversations and users on the team, -you can set the `connect_method` option to `rtm.start` when -instantiating the RTM Client. Note that on larger teams, use of -`rtm.start` can be slow and unreliable. +If you'd rather use the [`rtm.start`](https://docs.slack.dev/reference/methods/rtm.start) API method to establish the connection, which provides more information about the conversations and users on the team, you can set the `connect_method` option to `rtm.start` when instantiating the RTM Client. Note that on larger teams, use of `rtm.start` can be slow and unreliable. ``` python import os @@ -97,11 +82,9 @@ rtm_client = RTMClient( rtm_client.start() ``` -Read the [rtm.connect docs](https://api.slack.com/methods/rtm.connect) -and the [rtm.start docs](https://api.slack.com/methods/rtm.start) for -more details. +See the [`rtm.connect`](https://docs.slack.dev/reference/methods/rtm.connect) and [`rtm.start`](https://docs.slack.dev/reference/methods/rtm.start) API methods for more details. -## RTM Events +## RTM events {#rtm-events} ``` javascript { @@ -112,5 +95,4 @@ more details. } ``` -See [RTM Events](https://api.slack.com/rtm#events) for a complete list -of events. +Refer to the [Legacy RTM API](https://docs.slack.dev/legacy/legacy-rtm-api) page for more information. diff --git a/docs/content/oauth.md b/docs/content/oauth.md index 6ab518d0b..bcc0a946d 100644 --- a/docs/content/oauth.md +++ b/docs/content/oauth.md @@ -1,21 +1,18 @@ -# OAuth Modules +# OAuth modules -This section explains the details about how to handle the Slack OAuth flow. +This page explains how to handle the Slack OAuth flow. If you're looking for a much easier way to do this, check out [Bolt for Python](https://github.com/slackapi/bolt-python), a full-stack Slack app framework. With Bolt, you won't need to implement most of the following code on your own. -If you're looking for a much easier way to do the same, check [Bolt for Python](https://github.com/slackapi/bolt-python), which is a full-stack Slack App framework. With Bolt, you don't need to implement most of the following code on your own. +Refer to the [Python document for this module](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/) for more details. -View the [Python document for this module](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/) +## App installation flow {#app-installation} +OAuth allows a user in any Slack workspace to install your app. At the end of the OAuth flow, your app gains an access token. Refer to the [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth) guide for details. -## App Installation Flow +The Python Slack SDK provides the necessary modules for building the OAuth flow. -OAuth lets a user in any Slack workspace install your app. At the end of OAuth, your app gains an access token. Refer to [Installing with OAuth](https://api.slack.com/authentication/oauth-v2) for details. +### Starting an OAuth flow {#oauth-flow} -Python Slack SDK provides the necessary modules for building the OAuth flow. - -### Starting an OAuth flow - -The first step of Slack OAuth flow is to redirect a Slack user to [authorize](https://slack.com/oauth/v2/authorize) with a valid `state` parameter. To implement this process, you can use the following modules. +The first step of the OAuth flow is to redirect a Slack user to [authorize](https://slack.com/oauth/v2/authorize) with a valid `state` parameter. To implement this process, you can use the following modules. Module | What its for | Default Implementation ----------------------|-----------------------------------------|------------------------- @@ -23,8 +20,7 @@ Module | What its for | Default Im `OAuthStateStore` | Issue and consume `state` parameter value on the server-side. | `FileOAuthStateStore` `AuthorizeUrlGenerator` | Build https://slack.com/oauth/v2/authorize with sufficient query parameters | (same) -The code snippet below demonstrates how to build it using -[Flask](https://flask.palletsprojects.com/). +The code snippet below demonstrates how to build it using [Flask](https://flask.palletsprojects.com/). ``` python import os @@ -58,20 +54,13 @@ def oauth_start(): f'' ``` -When accessing `https://(your domain)/slack/install`, you will see \"Add -to Slack\" button in the webpage. You can start the app's installation -flow by clicking the button. +When accessing `https://(your domain)/slack/install`, you will see an \"Add to Slack\" button on the page. You can start the app's installation flow by clicking the button. -### Handling a callback request from Slack +### Handling a callback request from Slack {#handling-callback-requests} -If all's well, a user goes through the Slack app installation UI and -okays your app with all the scopes that it requests. After that happens, -Slack redirects the user back to your specified Redirect URL. +If all is well, a user goes through the Slack app installation UI and accepts all the scopes your app requests. After that happens, Slack redirects the user back to your specified Redirect URL. -The redirection gives you a `code` parameter. You can exchange the value -for an access token by calling -[oauth.v2.access](https://api.slack.com/methods/oauth.v2.access) API -method. +The redirection gives you a `code` parameter. You can exchange the value for an access token by calling the [oauth.v2.access](https://docs.slack.dev/reference/methods/oauth.v2.access) API method. ``` python from slack_sdk.web import WebClient @@ -140,12 +129,9 @@ def oauth_callback(): return make_response(f"Something is wrong with the installation (error: {html.escape(error)})", 400) ``` -## Token Lookup +## Token lookup {#token-lookup} -Now that your Flask app can choose the right access token for incoming -event requests, let's add the Slack event handler endpoint. - -You can use the same `InstallationStore` in the Slack event handler. +Now that your Flask app can choose the right access token for incoming event requests, let's add the Slack event handler endpoint. You can use the same `InstallationStore` in the Slack event handler. ``` python import json @@ -158,7 +144,7 @@ signature_verifier = SignatureVerifier(signing_secret=signing_secret) @app.route("/slack/events", methods=["POST"]) def slack_app(): # Verify incoming requests from Slack - # https://api.slack.com/authentication/verifying-requests-from-slack + # https://docs.slack.dev/authentication/verifying-requests-from-slack if not signature_verifier.is_valid( body=request.get_data(), timestamp=request.headers.get("X-Slack-Request-Timestamp"), @@ -234,17 +220,9 @@ def slack_app(): return make_response("", 404) ``` -Again, if you're looking for an easier solution, take a look at [Bolt -for Python](https://github.com/slackapi/bolt-python). With Bolt, you -don't need to implement most of the above code on your own. - -## Sign in with Slack +## Sign in with Slack {#siws} -[Sign in with Slack](https://api.slack.com/authentication/sign-in-with-slack) helps -users log into your service using their Slack profile. The platform -feature was recently upgraded to be compatible with the standard [OpenID -Connect](https://openid.net/connect/) specification. With slack-sdk -v3.9+, implementing the auth flow is much easier. +[Sign in with Slack](https://docs.slack.dev/authentication/sign-in-with-slack) helps users log into your service using their Slack profile. The platform feature was upgraded to be compatible with the standard [OpenID Connect](https://openid.net/connect/) specification. With slack-sdk v3.9+, implementing the OAuth flow is much easier. When you create a new Slack app, set the following user scopes: @@ -259,23 +237,15 @@ oauth_config: - profile # optional ``` -Check [the Flask app -example](https://github.com/slackapi/python-slack-sdk/blob/main/integration_tests/samples/openid_connect/flask_example.py) -to learn how to implement your Web app that handles the OpenID Connect -flow with end-users. It does the following: +Check [the Flask app example](https://github.com/slackapi/python-slack-sdk/blob/main/integration_tests/samples/openid_connect/flask_example.py) to learn how to implement an app that handles the OpenID Connect flow with your end-users as follows: **Build the OpenID Connect authorize URL** -- `slack_sdk.oauth.OpenIDConnectAuthorizeUrlGenerator` helps you - easily do this -- `slack_sdk.oauth.OAuthStateStore` is still available for generating - `state` parameter value. It's available for `nonce` management too. +- `slack_sdk.oauth.OpenIDConnectAuthorizeUrlGenerator` helps you do this. +- `slack_sdk.oauth.OAuthStateStore` is still available for generating the `state` parameter value. It's available for `nonce` management, too. **openid.connect.\* API calls** -`WebClient` can perform `openid.connect.token` API calls with given -`code` parameter +- `WebClient` can perform `openid.connect.token` API calls with given `code` parameter. -If you want to know the way with asyncio, check [the Sanic app -example](https://github.com/slackapi/python-slack-sdk/blob/main/integration_tests/samples/openid_connect/sanic_example.py) -in the same directory. +If you want to know the way with asyncio, check [the Sanic app example](https://github.com/slackapi/python-slack-sdk/blob/main/integration_tests/samples/openid_connect/sanic_example.py) in the same directory. diff --git a/docs/content/rtm.md b/docs/content/rtm.md index 7aba8c74b..c9612614b 100644 --- a/docs/content/rtm.md +++ b/docs/content/rtm.md @@ -1,36 +1,24 @@ -# RTM API Client {#real-time-messaging} +# RTM API client -The [Real Time Messaging (RTM) API](https://api.slack.com/rtm) is a WebSocket-based API that allows you to receive events from Slack in real time and send messages as users. +The [Legacy Real Time Messaging (RTM) API](https://docs.slack.dev/legacy/legacy-rtm-api) is a WebSocket-based API that allows you to receive events from Slack in real time and to send messages as users. -If you prefer events to be pushed to your app, we recommend using the HTTP-based [Events API](https://api.slack.com/events-api) along with [Socket Mode](https://api.slack.com/socket-mode) instead. The Events API contains some events that aren't supported in the RTM API (like [app_home_opened event](https://api.slack.com/events/app_home_opened)), and it supports most of the event types in the RTM API. If you'd like to use the Events API, you can use the [Python Slack Events Adaptor](https://github.com/slackapi/python-slack-events-api). +If you prefer events to be pushed to your app, we recommend using the HTTP-based [Events API](https://docs.slack.dev/apis/events-api) instead. The Events API contains some events that aren't supported in the Legacy RTM API (such as the [app_home_opened event](https://docs.slack.dev/reference/events/app_home_opened)), and it supports most of the event types in the Legacy RTM API. If you'd like to use the Events API, you can use the [Python Slack Events Adaptor](https://github.com/slackapi/python-slack-events-api). -The RTMClient allows apps to communicate with the Slack Platform's RTM API. +The RTMClient allows apps to communicate with the Legacy RTM API. -The event-driven architecture of this client allows you to simply link callbacks to their corresponding events. When an event occurs this client executes your callback while passing along any information it receives. We also give you the ability to call our web client from inside your callbacks. +The event-driven architecture of this client allows you to simply link callbacks to their corresponding events. When an event occurs, this client executes your callback while passing along any information it receives. We also give you the ability to call our web client from inside your callbacks. -In our example below, we watch for a [message event](https://api.slack.com/events/message) that contains \"Hello\" and if its received, we call the `say_hello()` function. We then issue a call to the web client to post back to the channel saying \"Hi\" to the user. +In our example below, we watch for a [message event](https://docs.slack.dev/reference/events/message) that contains \"Hello\" and if it's received, we call the `say_hello()` function. We then issue a call to the web client to post back to the channel saying \"Hi\" to the user. -## Configuring the RTM API +## Configuring the RTM API {#configuration} -Events using the RTM API **must** use a classic Slack app (with a plain -`bot` scope). +Events using the Legacy RTM API **must** use a Slack app with a plain `bot` scope. -If you already have a classic Slack app, you can use those credentials. -If you don't and need to use the RTM API, you can [create a classic -Slack app](https://api.slack.com/apps?new_classic_app=1). You can learn -more in the [API -documentation](https://api.slack.com/authentication/basics#soon). +If you already have a Slack app with a plain `bot` scope, you can use those credentials. If you don't and need to use the Legacy RTM API, you can create a Slack app [here](https://api.slack.com/apps?new_classic_app=1). Even if the Slack app configuration pages encourage you to upgrade to a newer permission model, don't upgrade it and continue using the \"classic\" bot permission. -Also, even if the Slack app configuration pages encourage you to upgrade -to the newer permission model, don't upgrade it and keep using the -\"classic\" bot permission. +## Connecting to the RTM API {#connecting} -## Connecting to the RTM API - -Note that the import here is not `from slack_sdk.rtm import RTMClient` -but `from slack_sdk.rtm_v2 import RTMClient` (`_v2` is added in the -latter one). If you would like to use the legacy version of the client, -go to the next section. +Note that the import here is not `from slack_sdk.rtm import RTMClient` but `from slack_sdk.rtm_v2 import RTMClient` (`_v2` is added in the latter one). ``` python import os @@ -54,13 +42,9 @@ def handle(client: RTMClient, event: dict): rtm.start() ``` -## Connecting to the RTM API (v1 client) +## Connecting to the RTM API (v1 client) {#connecting-v1} -Below is a code snippet that uses the legacy version of `RTMClient`. For -new app development, we **do not recommend** using it as it contains -issues that have been resolved in v2. Please refer to the [list of these -issues](https://github.com/slackapi/python-slack-sdk/issues?q=is%3Aissue+is%3Aclosed+milestone%3A3.3.0+label%3Artm-client) -for more details. +Below is a code snippet that uses the legacy version of `RTMClient`. For new app development, we **do not recommend** using it as it contains issues that have been resolved in v2. Please refer to the [list of these issues](https://github.com/slackapi/python-slack-sdk/issues?q=is%3Aissue+is%3Aclosed+milestone%3A3.3.0+label%3Artm-client) for more details. ``` python import os @@ -87,18 +71,13 @@ rtm_client = RTMClient(token=slack_token) rtm_client.start() ``` -## rtm.start vs rtm.connect (v1 client) +## The `rtm.start` vs. `rtm.connect` API methods (v1 client) {#rtm-methods} -By default, the RTM client uses `rtm.connect` to establish a WebSocket -connection with Slack. The response contains basic information about the -team and WebSocket url. +By default, the RTM client uses the [`rtm.connect`](https://docs.slack.dev/reference/methods/rtm.connect) API method to establish a WebSocket connection with Slack. The response contains basic information about the team and WebSocket URL. -Read the [rtm.connect docs](https://api.slack.com/methods/rtm.connect) -and the [rtm.start docs](https://api.slack.com/methods/rtm.start) for -more details. Also, note that `slack.rtm_v2.RTMClient` does not support -`rtm.start`. +See the [`rtm.connect`](https://docs.slack.dev/reference/methods/rtm.connect) and [`rtm.start`](https://docs.slack.dev/reference/methods/rtm.start) API methods for more details. Note that `slack.rtm_v2.RTMClient` does not support `rtm.start`. -## RTM Events +## RTM events {#rtm-events} ``` javascript { @@ -109,5 +88,4 @@ more details. Also, note that `slack.rtm_v2.RTMClient` does not support } ``` -See [RTM Events](https://api.slack.com/rtm#events) for a complete list -of events. +Refer to the [Legacy RTM events](https://docs.slack.dev/legacy/legacy-rtm-api#events) section for a complete list of events. diff --git a/docs/content/scim.md b/docs/content/scim.md index 5ee562501..1877afbb0 100644 --- a/docs/content/scim.md +++ b/docs/content/scim.md @@ -1,18 +1,14 @@ -# SCIM API Client +# SCIM API client -[SCIM API](https://api.slack.com/scim) is a set of APIs for provisioning and managing user accounts and groups. SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack. +[SCIM](http://www.simplecloud.info/) is supported by a myriad of services. The SCIM API is a set of APIs for provisioning and managing user accounts and groups. SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack. -[SCIM (System for Cross-domain Identity Management)](http://www.simplecloud.info/) is supported by a myriad of services. It behaves slightly differently from other Slack APIs. +Refer to [using the Slack SCIM API](https://docs.slack.dev/admins/scim-api) for more details. -Refer to [the API document](https://api.slack.com/scim) for more details. +View the [Python document for this module](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/). -View the [Python document for this module](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/) +## SCIMClient {#scimclient} -## SCIMClient - -An OAuth token with [the admin scope](https://api.slack.com/scopes/admin) is required to access the SCIM API. - -To fetch provisioned user data, you can use the `search_users` method in the client. +An OAuth token with [the admin scope](https://docs.slack.dev/reference/scopes/admin) is required to access the SCIM API. To fetch provisioned user data, you can use the `search_users` method in the client. ``` python import os @@ -30,9 +26,7 @@ response.users # List[User] Check out [the class source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/scim/v1/user.py) to learn more about the structure of the `user` in `response.users`. -Similarly, the `search_groups` method is available and the shape of the -`Group` object can be [found -here](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/scim/v1/group.py). +Similarly, the `search_groups` method is available and the shape of the `Group` object can be [found here](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/scim/v1/group.py). ``` python response = client.search_groups( @@ -42,7 +36,7 @@ response = client.search_groups( response.groups # List[Group] ``` -For creating, updating, and deleting users/groups: +For creating, updating, and deleting users or groups: ``` python from slack_sdk.scim.v1.user import User, UserName, UserEmail @@ -78,10 +72,9 @@ update_result = client.update_user(user=user_to_update) delete_result = client.delete_user(user_to_update.id) ``` -## AsyncSCIMClient +## AsyncSCIMClient {#asyncscimclient} -Lastly, if you are keen to use asyncio for SCIM API calls, we offer -`AsyncSCIMClient` for it. This client relies on aiohttp library. +If you are keen to use asyncio for SCIM API calls, we offer `AsyncSCIMClient`. This client relies on the aiohttp library. ``` python import asyncio @@ -99,18 +92,11 @@ asyncio.run(main()) ------------------------------------------------------------------------ -## RetryHandler +## RetryHandler {#retryhandler} -With the default settings, only `ConnectionErrorRetryHandler` with its -default configuration (=only one retry in the manner of [exponential -backoff and -jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) -is enabled. The retry handler retries if an API client encounters a -connectivity-related failure (e.g., Connection reset by peer). +With the default settings, only `ConnectionErrorRetryHandler` with its default configuration (=only one retry in the manner of [exponential backoff and jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) is enabled. The retry handler retries if an API client encounters a connectivity-related failure (e.g., connection reset by peer). -To use other retry handlers, you can pass a list of `RetryHandler` to -the client constructor. For instance, you can add the built-in -`RateLimitErrorRetryHandler` this way: +To use other retry handlers, you can pass a list of `RetryHandler` to the client constructor. For instance, you can add the built-in `RateLimitErrorRetryHandler` this way: ``` python import os @@ -125,11 +111,7 @@ rate_limit_handler = RateLimitErrorRetryHandler(max_retry_count=1) client.retry_handlers.append(rate_limit_handler) ``` -Creating your own ones is also quite simple. Defining a new class that -inherits `slack_sdk.http_retry.RetryHandler` (`AsyncRetryHandler` for -asyncio apps) and implements required methods (internals of `can_retry` -/ `prepare_for_next_retry`). Check the built-in ones' source code for -learning how to properly implement. +You can also create one on your own by defining a new class that inherits `slack_sdk.http_retry RetryHandler` (`AsyncRetryHandler` for asyncio apps) and implements required methods (internals of `can_retry` / `prepare_for_next_retry`). Check out the source code for the ones that are built in to learn how to properly implement them. ``` python import socket @@ -162,10 +144,4 @@ client = SCIMClient( ) ``` -For asyncio apps, `Async` prefixed corresponding modules are available. -All the methods in those methods are async/await compatible. Check [the -source -code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) -and -[tests](https://github.com/slackapi/python-slack-sdk/blob/main/tests/slack_sdk_async/web/test_async_web_client_http_retry.py) -for more details. +For asyncio apps, `Async` prefixed corresponding modules are available. All the methods in those methods are async/await compatible. Check [the source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) for more details. diff --git a/docs/content/socket-mode.md b/docs/content/socket-mode.md index 64f0af110..ddb89b5e0 100644 --- a/docs/content/socket-mode.md +++ b/docs/content/socket-mode.md @@ -1,46 +1,27 @@ -# Socket Mode Client +# Socket Mode client -Socket Mode is a method of connecting your app to the Slack APIs using WebSockets instead of HTTP. You can use `slack_sdk.socket_mode.SocketModeClient` for managing [Socket Mode](https://api.slack.com/apis/connections/socket) connections and performing interactions with Slack. +Socket Mode is a method of connecting your app to the Slack APIs using WebSockets instead of HTTP. You can use `slack_sdk.socket_mode.SocketModeClient` for managing [Socket Mode](https://docs.slack.dev/apis/events-api/using-socket-mode) connections and performing interactions with Slack. -## Using Socket Mode +## Using Socket Mode {#socket-mode} -First off, let's start with enabling Socket Mode. Visit [the Slack App configuration page](http://api.slack.com/apps), choose the app you're working on, and go to **Settings** on the left pane. There are a few things to do on the page. - -- Go to **Settings** \> **Basic Information**, then add a new - **App-Level Token** with the `connections:write` scope - -- Go to **Settings** \> **Socket Mode**, then turn on **Enable Socket - Mode** - -- Go to **Features** \> **App Home**, look under **Show Tabs** \> - **Messages Tab** then turn on **Allow users to send Slash commands - and messages from the messages tab** - -- Go to **Features** \> **Event Subscriptions**, then turn on **Enable - Events** - -- On the same page expand **Subscribe to bot events** click **Add Bot User Event** and select **message.im**. This will allow the bot to get events for messages that are sent in 1:1 direct messages with itself - -- Go to **Features** \> **Interactivity and Shortcuts**, look under - *Shortcuts*\* click **Create a New Shortcut** then create a new - Global shortcut with the following details +Let's start with enabling Socket Mode. Visit [app page](http://api.slack.com/apps), choose the app you're working on, and go to **Settings** on the left pane. There are a few things to do on this page. +- Go to **Settings** \> **Basic Information**, then add a new **App-Level Token** with the `connections:write` scope. +- Go to **Settings** \> **Socket Mode**, then toggle on **Enable Socket Mode**. +- Go to **Features** \> **App Home**, look under **Show Tabs** \> **Messages Tab**, then toggle on **Allow users to send Slash commands and messages from the messages tab**. +- Go to **Features** \> **Event Subscriptions**, then toggle on **Enable Events**. +- On the same page, expand **Subscribe to bot events**, click **Add Bot User Event**, and select **message.im**. This will allow the bot to get events for messages that are sent in 1:1 direct messages with itself. +- Go to **Features** \> **Interactivity and Shortcuts**, look under *Shortcuts*\*, click **Create a New Shortcut**, then create a new Global shortcut with the following details: > **Name**: Hello > **Short Description**: Receive a Greeting > **Callback ID**: hello-shortcut + +- Go to **Features** \> **OAuth & Permissions** under **Scopes** \> **Bot Token Scopes**, click **Add an OAuth Scope**, and select **reactions:write**. This will allow the bot to add emoji reactions (Reacjis) to messages. +- Go to **Features** \> **Oauth & Permissions** under **OAuth Tokens for Your Workspace** and click **Install to Workspace**. -- Go to **Features** \> **OAuth & Permissions** under **Scopes** \> - **Bot Token Scopes** click **Add an OAuth Scope** and select - **reactions:write**. This will allow the bot to add emoji reactions (Reacjis) to messages. - -- Go to **Features** \> **Oauth & Permissions** under **OAuth Tokens - for Your Workspace** click **Install to Workspace** - -You will be using the app-level token that starts with `xapp-` prefix. -Note that the token here is not the ones starting with either `xoxb-` or -`xoxp-`. +You will be using the app-level token that starts with `xapp-`. Note that the token here is not one that starts with either `xoxb-` or `xoxp-`. ``` python import os @@ -123,12 +104,9 @@ Event().wait() --- -## Supported Libraries +## Supported libraries {#supported-libraries} -This SDK offers its own simple WebSocket client covering only required -features for Socket Mode. In addition to that, `SocketModeClient` is -implemented with a few 3rd party open-source libraries. If you prefer -any of the following, you can use it over the built-in one. +This SDK offers its own WebSocket client covering only required features for Socket Mode. In addition, `SocketModeClient` is implemented with a few 3rd party open source libraries. If you prefer any of the following, you can use it over the built-in one. |PyPI Project | SocketModeClient |--------------|------------------ @@ -137,10 +115,7 @@ any of the following, you can use it over the built-in one. | [`aiohttp`](https://pypi.org/project/aiohttp/) (asyncio-based) | [`slack_sdk.socket_mode.aiohttp.SocketModeClient`](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/socket_mode/aiohttp) | [`websockets`](https://pypi.org/project/websockets/) (asyncio-based) | [`slack_sdk.socket_mode.websockets.SocketModeClient`](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/socket_mode/websockets) -To use the -[`websocket_client`](https://pypi.org/project/websocket_client/) based -one, add [`websocket_client`](https://pypi.org/project/websocket_client/) -dependency and to change the import as below. +To use the [`websocket_client`](https://pypi.org/project/websocket_client/) based-one, add the[`websocket_client`](https://pypi.org/project/websocket_client/) dependency and change the import as below. ``` python # Note that the pockage is different @@ -152,17 +127,13 @@ client = SocketModeClient( ) ``` -You can pass a few additional arguments that are specific to the -library. Apart from that, all the functionalities work in the same way -with the built-in version. +You can pass a few additional arguments that are specific to the library. Apart from that, all the functionalities work in the same way as the built-in version. --- -## Asyncio Based Libraries +## Asyncio-based libraries {#asyncio-libraries} -To use the asyncio-based ones such as aiohttp, your app needs to be -compatible with asyncio's async/await programming model. The -`SocketModeClient` only works with `AsyncWebClient` and async listeners. +To use the asyncio-based ones such as aiohttp, your app needs to be compatible with asyncio's async/await programming model. The `SocketModeClient` only works with `AsyncWebClient` and async listeners. ``` python import asyncio diff --git a/docs/content/tutorial/understanding-oauth-scopes.md b/docs/content/tutorial/understanding-oauth-scopes.md index 92112ae6e..ed51b334c 100644 --- a/docs/content/tutorial/understanding-oauth-scopes.md +++ b/docs/content/tutorial/understanding-oauth-scopes.md @@ -2,10 +2,10 @@ In this tutorial, we'll: -* explore Slack app permissioning and distribution using OAuth, and along the way, you'll learn how to identify which scopes your app needs and how to use OAuth to request them. -* build an app that sends a direct message to users joining a specific channel. Once installed in a workspace, it will create a new channel named **#the-welcome-channel** if it doesn’t already exist. The channel will be used to thank users for joining the channel. We'll also share code snippets from the app, but you can view the full source code on [GitHub](https://github.com/stevengill/slack-python-oauth-example). The code and implementation of OAuth is general enough that you should be able to follow along, even if Python isn't your preferred language. +* explore Slack app permissions and distribution using OAuth, and along the way, learn how to identify which scopes apps need and how to use OAuth to request them. +* build an app that sends a direct message to users joining a specific channel. Once installed in a workspace, it will create a new channel named **#the-welcome-channel** if it doesn’t already exist. The channel will be used to thank users for joining the channel. We'll also share code snippets from the app, but the full source code is available on [GitHub](https://github.com/stevengill/slack-python-oauth-example). The code and implementation of OAuth is general enough that you should be able to follow along, even if Python isn't your preferred language. -## Prerequisites +## Prerequisites {#prerequisites} Before we get started, ensure you have a development workspace with permissions to install apps. If you don’t have one set up, go ahead and [create one](https://slack.com/create). You also need to [create a new app](https://api.slack.com/apps/new) if you haven’t already. @@ -51,7 +51,7 @@ To determine which scopes we need, we should take a closer look at what our app resp = client.conversations_create(name="the-welcome-channel") ``` -3. When a user joins our newly created channel, our app sends them a direct message. To see when a user joins our channel, we need to listen for an event. Looking at our list of events, we see that `member_joined_channel` is the event that we need (_Note: events need to be added to your app’s configuration_). The scopes required for this event are `channels:read` and `groups:read` (same ones from step one). Now to send a direct message, we need to use the `chat.postMessage` method, which requires the `chat:write` scope. +3. When a user joins our newly created channel, our app sends them a direct message. To see when a user joins our channel, we need to listen for an event. Looking at our list of events, we see that `member_joined_channel` is the event that we need (_Note: events need to be added to your app’s configuration_). The scopes required for this event are `channels:read` and `groups:read` (same ones from step one). Now to send a direct message, we need to use the `chat.postMessage` API method, which requires the `chat:write` scope. ``` # Create an event listener for "member_joined_channel" events @@ -73,9 +73,9 @@ Our final list of scopes required are: ## Setting up OAuth and requesting scopes {#setup} -If you want users to be able to install your app on additional workspaces or from the [Slack Marketplace](https://api.slack.com/slack-marketplace/review-guide), you'll need to implement an OAuth flow. +If you want users to be able to install your app on additional workspaces or from the [Slack Marketplace](https://docs.slack.dev/slack-marketplace/slack-marketplace-review-guide), you'll need to implement an OAuth flow. -We'll be following the general flow of OAuth with Slack, which is covered in [Installing with OAuth](https://api.slack.com/authentication/oauth-v2) and nicely illustrated in the image below: +We'll be following the general flow of OAuth with Slack, which is covered in the [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth) guide and nicely illustrated in the image below: ![OAuth flow](/img/understanding-oauth-flow.png) @@ -118,7 +118,7 @@ We'll be following the general flow of OAuth with Slack, which is covered in [In After the user approves the app, Slack will redirect the user to your specified Redirect URL. As we mentioned earlier, we did not include a `redirect_uri` in our **Add to Slack** button, so our app will use our Redirect URL specified on the app’s **OAuth and Permissions** page. - Our Redirect URL function will have to parse the HTTP request for the `code` and `state` query parameters. We need to check that the `state` parameter was created by our app. If it is, we can now exchange the `code` for an access token. To do this, we need to call the `oauth.v2.access` method with the `code`, `client_id`, and `client_secret`. This method will return the access token, which we can now save (preferably in a persistent database) and use for any of the Slack API method calls we make. (_Note: use this access token for all of the Slack API method calls we covered in the scopes section above_) + Our Redirect URL function will have to parse the HTTP request for the `code` and `state` query parameters. We need to check that the `state` parameter was created by our app. If it is, we can now exchange the `code` for an access token. To do this, we need to call the `oauth.v2.access` API method with the `code`, `client_id`, and `client_secret`. This method will return the access token, which we can now save (preferably in a persistent database) and use for any of the Slack API method calls we make. (_Note: use this access token for all of the Slack API method calls we covered in the scopes section above_) ``` # Grab client Secret from your environment variables @@ -160,4 +160,4 @@ We'll be following the general flow of OAuth with Slack, which is covered in [In At this point, you should feel more comfortable learning what scopes your app needs and using OAuth to request those scopes. A few resources you can check out next include: * [Slack-Python-OAuth-Example](https://github.com/stevengill/slack-python-oauth-example): we used code snippets from this app in this tutorial. The README contains more detailed information about running the app locally using ngrok, setting up a Redirect URL for OAuth, and setting up a request URL for events. -* Learn more about [Installing with OAuth](https://api.slack.com/authentication/oauth-v2). +* Learn more about [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth). diff --git a/docs/content/tutorial/uploading-files.md b/docs/content/tutorial/uploading-files.md index 93173c078..6399ffd99 100644 --- a/docs/content/tutorial/uploading-files.md +++ b/docs/content/tutorial/uploading-files.md @@ -4,11 +4,11 @@ This tutorial details how to use the [`slack-sdk` package for Python](https://py ## Creating an app {#create-app} -First, [create a Slack app](https://api.slack.com/apps/new). +First, create a [Slack app](https://api.slack.com/apps/new). ## Configuring your app's settings with an app manifest {#configuration} -Creating your app using this method will include all the required settings for this tutorial, and you won't be bogged down with too many details — all you'll need to do is decide where this app will live. If you're curious about the inner workings of how this button works, refer to [App Manifests](https://api.slack.com/reference/manifests) for more information. +Creating your app using this method will include all the required settings for this tutorial, and you won't be bogged down with too many details - all you'll need to do is decide where this app will live. If you're curious about the inner workings of how this button works, refer to [App Manifests](https://docs.slack.dev/app-manifests) for more information. ```yaml _metadata: @@ -72,7 +72,7 @@ pip install -r requirements.txt While it's possible to enter the following into the Python shell, we've gathered some code samples and wrote it in script form. -For each of the code samples, make sure to add in the following to the top of your Python file if you're going to run it as a script — the examples won't run without it. +For each of the code samples, make sure to add in the following to the top of your Python file if you're going to run it as a script - the examples won't run without it. ```python import logging, os @@ -254,7 +254,7 @@ Once we run this, the `files` array should be empty. The count for files found w ![Delete a file](/img/upload-files-delete.png) -## Next steps {#next-steps} +## Next steps {#next} This tutorial summarized how to use the Slack API to upload files and share them within a channel, using the Python SDK. The same principles apply to other languages as well, so if Python isn't your fancy, feel free to try out our other SDKs: diff --git a/docs/content/v3-migration.md b/docs/content/v3-migration.md index 08a579264..3a1618c73 100644 --- a/docs/content/v3-migration.md +++ b/docs/content/v3-migration.md @@ -2,115 +2,84 @@ sidebar_label: Migrating from slackclient --- -# Migrating from v2.x to v3.x +# Migrating from v2.x to v3.x {#migrating} -You may still view the legacy `slackclient` v2 [documentation](/legacy/). However, the **slackclient** project is in maintenance mode now and this **slack_sdk** project is the successor. +You may still view the legacy `slackclient` v2 [documentation](/legacy/). However, the **slackclient** project is in maintenance mode and this **slack_sdk** project is the successor. -## From slackclient 2.x +## From `slackclient` 2.x {#fromv2} There are a few changes introduced in v3.0: -- The PyPI project is renamed from `slackclient` to `slack_sdk` -- Importing `slack_sdk.*` is recommended. You can still use `slack.*` - with deprecation warnings for a while. -- `slack_sdk` has no required dependencies. This means `aiohttp` is no - longer automatically resolved. -- `WebClient` no longer has `run_async` and `aiohttp` specific - options. If you still need the option or other `aiohttp` specific - options, use `LegacyWebClient` (`slackclient` v2 compatible) or - `AsyncWebClient`. +- The PyPI project has been renamed from `slackclient` to `slack_sdk`. +- Importing `slack_sdk.*` is recommended. You can still use `slack.*` with deprecation warnings. +- `slack_sdk` has no required dependencies. This means `aiohttp` is no longer automatically resolved. +- `WebClient` no longer has `run_async` and `aiohttp` specific options. If you still need the option or other `aiohttp` specific options, use `LegacyWebClient` (`slackclient` v2 compatible) or `AsyncWebClient`. We're sorry for the inconvenience. ------------------------------------------------------------------------ -**Change:** The PyPI project is renamed from `slackclient` to -`slack_sdk` +**Change:** The PyPI project has been renamed from `slackclient` to `slack_sdk`. -**Action**: Remove `slackclient`, add `slack_sdk` in `requirements.txt` +**Action**: Remove `slackclient`, add `slack_sdk` in `requirements.txt`. -Since v3, the PyPI project name is -[slack_sdk](https://pypi.org/project/slack_sdk/) (technically -`slack-sdk` also works). +Since v3, the PyPI project name is [slack_sdk](https://pypi.org/project/slack_sdk/) (technically `slack-sdk` also works). -The biggest reason for the renaming is the feature coverage in v3 and -newer. The SDK v3 provides not only API clients but also other modules. -As the first step, it starts supporting OAuth flow out-of-the-box. The -secondary reason is to make the names more consistent. The renaming -addresses the long-lived confusion between the PyPI project and package -names. +The biggest reason for the renaming is the feature coverage in v3 and newer. The SDK v3 provides not only API clients, but also other modules. As the first step, it starts supporting OAuth flow out-of-the-box. The secondary reason is to make the names more consistent. The renaming addresses the long-lived confusion between the PyPI project and package names. ------------------------------------------------------------------------ -**Change:** Importing `slack_sdk.*` is recommended. You can still use -`slack.*` with deprecation warnings for a while. +**Change:** Importing `slack_sdk.*` is recommended. You can still use `slack.*` with deprecation warnings. -**Action**: Replace `from slack import`, `import slack`, and so on in -your source code. +**Action**: Replace `from slack import`, `import slack`, etc. in your source code. -Most imports can be simply replaced by -`find your_app -name '*.py' | xargs sed -i '' 's/from slack /from slack_sdk /g'` -or something similar. If you use `slack.web.classes.*`, the conversion -is not so simple that we recommend manually replacing imports for those. +Most imports can be simply replaced by `find your_app -name '*.py' | xargs sed -i '' 's/from slack /from slack_sdk /g'` or similar. If you use `slack.web.classes.*`, the conversion is not so simple that we recommend manually replacing imports for those. -That said, all existing code can be migrated to v3 without any code -changes. If you don't have time for it, you can use `slack` package -with deprecation warnings saying -`UserWarning: slack package is deprecated. Please use slack_sdk.web/webhook/rtm package instead. For more info, go to https://tools.slack.dev/python-slack-sdk/v3-migration/` -for a while. We won't remove the compatibility in the short term. +That said, all existing code can be migrated to v3 without any code changes. If you don't have time for it, you can use the `slack` package with deprecation warnings saying `UserWarning: slack package is deprecated. Please use slack_sdk.web/webhook/rtm package instead. For more info, go to https://tools slack.dev/python-slack-sdk/v3-migration/` for a while. ------------------------------------------------------------------------ -**Change:** `slack_sdk` has no required dependencies. This means -`aiohttp` is no longer automatically resolved. +**Change:** `slack_sdk` has no required dependencies. This means `aiohttp` is no longer automatically resolved. -**Action**: Add `aiohttp` to `requirements.txt` if you use any of -`AsyncWebClient`, `AsyncWebhookClient`, and `LegacyWebClient` +**Action**: Add `aiohttp` to `requirements.txt` if you use any of `AsyncWebClient`, `AsyncWebhookClient`, and `LegacyWebClient`. -If you use some modules that require `aiohttp`, your `requirements.txt` -needs to explicitly have `aiohttp`. The `slack_sdk` dependency doesn't -resolve it for you, unlike `slackclient` v2. +If you use some modules that require `aiohttp`, your `requirements.txt` needs to explicitly list `aiohttp`. The `slack_sdk` dependency doesn't resolve it for you, unlike `slackclient` v2. ------------------------------------------------------------------------ -**Change:** `WebClient` no longer has `run_async` and `aiohttp` specific -options. +**Change:** `WebClient` no longer has `run_async` and `aiohttp` specific options. -**Action:** If you still need the option or other `aiohttp` specific -options, use `LegacyWebClient` (`slackclient` v2 compatible) or -`AsyncWebClient`. +**Action:** If you still need the option or other `aiohttp` specific options, use `LegacyWebClient` (`slackclient` v2 compatible) or `AsyncWebClient`. -The new `slack_sdk.web.WebClient` doesn't rely on `aiohttp` internally -at all. The class provides only the synchronous way to call Web APIs. If -you need a v2 compatible one, you can use `LegacyWebClient`. Apart from -the name, there is no breaking change in the class. +The new `slack_sdk.web.WebClient` doesn't rely on `aiohttp` internally at all. The class provides only the synchronous way to call Web APIs. If you need a v2 compatible one, you can use `LegacyWebClient`. Apart from the name, there is no breaking change in the class. -If you're using `run_async=True` option, we highly recommend switching -to `AsyncWebClient`. `AsyncWebClient` is a straight-forward async HTTP -client. You can expect the class properly works in the nature of -`async/await` provided by the standard `asyncio` library. +If you're using `run_async=True` option, we highly recommend switching to `AsyncWebClient`. `AsyncWebClient` is a straight-forward async HTTP client. You can expect the class properly works in the nature of `async/await` provided by the standard `asyncio` library. --- -## Migration from v1.x to v2.x +## Migration from v1.x to v2.x {#fromv1} -If you're migrating from v1.x of slackclient to v2.x, here's what you need to change to ensure your app continues working after updating. +If you're migrating from v1.x of `slackclient` to v2.x, here's what you need to change to ensure your app continues working after updating. -**NOTE**: We have completely rewritten this library and you should only upgrade once you have fully tested it in your development environment. If you don't wish to upgrade yet, be sure to pin your module for the Python slackclient to `1.3.1`. +:::info +We have completely rewritten this library and you should only upgrade once you have fully tested it in your development environment. If you don't wish to upgrade yet, be sure to pin your module for the Python `slackclient` to `1.3.1`. +::: -### Minimum Python versions -slackclient v2.x requires Python 3.6 (or higher). Support for Python 2.7 will be maintained in the existing slackclient v1.x. +### Minimum Python versions {#minimum-versions} -Client v1 Support Plan: -- Python 2 Timeline: Python 2.7 will continue to be supported in the 1.x version of the client until Dec 31st, 2019. After this time we will immediately end of life our support. -- New Slack features: We’ll continue to add support for any new Slack features that are released as they become available on the Platform. Support for Token Rotation is an example of a Slack feature. -- Client-specific features: We will NOT be adding any new client specific functionality to v1. Support for “asynchronous programming” is an example of of a client feature. Another example is storing additional data on the client. -- Bug and security fixes: We’ll be continuing to address bug fixes throughout the remaining lifetime of v1. -- Github Branching: `master` branch is used for v2 code. `v1` branch will be used for v1 code. +`slackclient` v2.x requires Python 3.6 (or higher). Support for Python 2.7 is maintained in the existing `slackclient` v1.x. + +Client v1 support: +- Python 2: Python 2.7 was supported in the 1.x version of the client up until Dec 31st, 2019. +- We’ll continue to add support for any new Slack features that are released as they become available on the platform. Support for token rotation is an example of a Slack feature. +- We will no longer be adding any new client-specific functionality to v1. Support for “asynchronous programming” is an example of a client feature. Another example is storing additional data on the client. +- We are no longer addressing bug or security fixes. +- Github branching: The `master` branch is used for v2 code. The `v1` branch is used for v1 code. + +### Import changes {#import-changes} + + The goal of this project is to provide a set of tools that ease the creation of Python Slack apps. To better align with this goal, we’re renaming the main module to `slack`. From `slack`, developers can import various tools. -### Import changes ---- - The goal of this project is to provide a set of tools that ease the creation of Python Slack apps. To better align with this goal we’re renaming the main module to `slack`. From `slack` developers can import various tools. ```Python # Before: # import slackclient @@ -119,12 +88,14 @@ Client v1 Support Plan: from slack import WebClient ``` -### RTM API Changes: ---- -An RTMClient allows apps to communicate with the Slack Platform's RTM API. This client allows you to simply link callbacks to their corresponding events. When an event occurs this client executes your callback while passing along any information it receives. +### RTM API changes {#RTM-changes} + +An RTMClient allows apps to communicate with the Slack platform's Legacy RTM API. This client allows you to link callbacks to their corresponding events. When an event occurs, this client executes your callback while passing along any information it receives. + +Example app in v1: -Example App in v1: Here's a simple example app that replies "Hi \<@userid\>!" in a thread if you send it a message containing "Hello". + ```Python from slackclient import SlackClient @@ -153,7 +124,9 @@ else: ``` Example App in v2: -Here's that same simple example app that replies "Hi \<\@userid\>!" in a thread if you send it a message containing "Hello". + +Here's that same example app that replies "Hi \<\@userid\>!" in a thread if you send it a message containing "Hello". + ```Python import slack @@ -178,7 +151,8 @@ def say_hello(**payload): rtmclient.start() ``` -**We no longer store any team data.**: In the current 1.x version of the client we store some channel and user information internally on [`Server.py`](https://github.com/slackapi/python-slackclient/blob/master/slackclient/server.py) in `client`. This data will now be available in the open event for consumption. Developers are then free to store any information they choose. Here's an example: +**We no longer store any team data.** In the current 1.x version of the client, we store some channel and user information internally on [`Server.py`](https://github.com/slackapi/python-slackclient/blob/master/slackclient/server.py) in `client`. This data will now be available in the open event for consumption. Developers are then free to store any information they choose. Here's an example: + ```Python # Retrieving the team domain. # Before: @@ -192,15 +166,16 @@ def get_team_data(**payload): RTM usage has been completely redesigned. -For new projects, we recommend using [Events API](https://api.slack.com/events). This package `slackclient` v2 doesn't have any supports for Events API but you can try https://github.com/slackapi/python-slack-events-api that works as an enhancement of Flask web framework. +For new projects, we recommend using [Events API](https://docs.slack.dev/apis/events-api). This package `slackclient` v2 doesn't have any supports for Events API but you can try https://github.com/slackapi/python-slack-events-api that works as an enhancement of Flask web framework. In the near future, we'll be providing better supports for Events API in the official SDK. -### Web Client API Changes: ---- +### Web Client API changes {#web-client-changes} + **Token refresh removed**: -This feature originally shipped as a part of Workspace Tokens. Since we're [heading in a new direction](https://medium.com/slack-developer-blog/the-latest-with-app-tokens-fe878d44130c) it's safe to remove this, along with any related attributes stored on the client. +This feature originally shipped as a part of workspace tokens. Since we've [gone in a new direction](https://medium.com/slack-developer-blog/the-latest-with-app-tokens-fe878d44130c) it's safe to remove this along with any related attributes stored on the client. + - ~refresh_token~ - ~token_update_callback~ - ~client_id~ @@ -235,13 +210,13 @@ client.chat_postMessage( text='Hi!') ``` -The WebClient provides built-in methods for the Slack Web API. These methods act as helpers enabling you to focus less on how the request is constructed. Here are a few things that this provides: +The WebClient provides built-in methods for the Slack Web API. These methods act as helpers, enabling you to focus less on how the request is constructed. Here are a few things this provides: + - Basic information about each method through the docstring. -- Easy File Uploads: You can now pass in the location of a file and the library will handle opening and retrieving the file object to be transmitted. -- Token type validation: This gives you better error messaging when you're attempting to consume an api method that your token doesn't have access to. +- Easy file uploads: You can pass in the location of a file and the library will handle opening and retrieving the file object to be transmitted. +- Token type validation: This gives you better error messaging when you're attempting to consume an API method your token doesn't have access to. - Constructs requests using Slack preferred HTTP methods and content-types. -### Error Handling Changes: ---- +### Error handling changes {#error-handling-changes} -In 1.x, a failed api call would return the error payload to you and have you handle the error. In 2.x, a failed api call will throw an exception. To handle this in your code, you will have to wrap api calls with a `try except` block. \ No newline at end of file +In version 1.x, a failed API call would return the error payload to you and expect you to handle the error. In version 2.x, a failed API call will throw an exception. To handle this in your code, you will have to wrap API calls with a `try except` block. diff --git a/docs/content/web.md b/docs/content/web.md index 81232576c..9d0d311ba 100644 --- a/docs/content/web.md +++ b/docs/content/web.md @@ -1,30 +1,16 @@ -# Web Client +# Web client The Slack Web API allows you to build applications that interact with Slack in more complex ways than the integrations we provide out of the box. -Access the Slack API methods requires an OAuth token — see the [Tokens & Authentication](/installation#handling-tokens) section for more on how Slack uses OAuth tokens as well as best practices. +Accessing Slack API methods requires an OAuth token — read more about [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth). -[Each of these API methods](https://api.slack.com/methods) is fully documented in our [API documentation site](https://api.slack.com). +Each of these [API methods](https://docs.slack.dev/reference/methods) is fully documented on our developer site at [docs.slack.dev](https://docs.slack.dev/). ---- +## Sending a message {#sending-messages} -## Messaging +One of the primary uses of Slack is posting messages to a channel using the channel ID, or as a DM to another person using their user ID. This method will handle either a channel ID or a user ID passed to the `channel` parameter. -### Sending a message - -One of the primary uses of Slack is posting messages to a channel using -the channel ID or as a DM to another person using their user ID. This -method will handle either a channel ID or a user ID passed to the -`channel` parameter. - -Note that your app's bot user needs to be in the channel (otherwise, -you will get either `not_in_channel` or `channel_not_found` error code). -If your app has -[chat:write.public](https://api.slack.com/scopes/chat:write.public) -scope, your app can post messages without joining a channel as long as -the channel is public. See -[chat.postMessage](https://api.slack.com/methods/chat.postMessage) for -more info. +Your app's bot user needs to be in the channel (otherwise, you will get either `not_in_channel` or `channel_not_found` error code). If your app has the [chat:write.public](https://docs.slack.dev/reference/scopes/chat.write.public) scope, your app can post messages without joining a channel as long as the channel is public. See the [chat.postMessage](https://docs.slack.dev/reference/methods/chat.postmessage) API method for more info. ``` python import logging @@ -47,9 +33,7 @@ except SlackApiError as e: assert e.response["error"] # str like 'invalid_auth', 'channel_not_found' ``` -Sending an ephemeral message, which is only visible to an assigned user -in a specified channel, is nearly the same as sending a regular message, -but with an additional `user` parameter. +Sending an ephemeral message, which is only visible to an assigned user in a specified channel, is nearly the same as sending a regular message but with an additional `user` parameter. ``` python import os @@ -65,24 +49,16 @@ response = client.chat_postEphemeral( ) ``` -See -[chat.postEphemeral](https://api.slack.com/methods/chat.postEphemeral) -for more info. +See the [`chat.postEphemeral`](https://docs.slack.dev/reference/methods/chat.postephemeral) API method for more details. -#### Formatting with Block Kit +## Formatting messages with Block Kit {#block-kit} -Messages posted from apps can contain more than just text, though. They -can include full user interfaces composed of -[blocks](https://api.slack.com/block-kit). +Messages posted from apps can contain more than just text; they can also include full user interfaces composed of blocks using [Block Kit](https://docs.slack.dev/block-kit). -The chat.postMessage method takes an optional `blocks` argument that -allows you to customize the layout of a message. Blocks can be specified -in a single array of either dict values or -[slack_sdk.models.blocks.Block](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/models/blocks/index.html) -objects. +The [`chat.postMessage method`](https://docs.slack.dev/reference/methods/chat.postmessage) takes an optional blocks argument that allows you to customize the layout of a message. Blocks can be specified +in a single array of either dict values or [slack_sdk.models.blocks.Block](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/models/blocks/index.html) objects. -To send a message to a channel, use the channel's ID. For IMs, use the -user's ID. +To send a message to a channel, use the channel's ID. For DMs, use the user's ID. ``` python client.chat_postMessage( @@ -123,26 +99,15 @@ client.chat_postMessage( :::tip -You can use the [Block Kit -Builder](https://api.slack.com/tools/block-kit-builder) to prototype -your message's look and feel. +You can use [Block Kit Builder](https://app.slack.com/block-kit-builder/) to prototype your message's look and feel. ::: -### Threading Messages +## Threading messages {#threading-messages} -Threaded messages are a way of grouping messages together to provide -greater context. You can reply to a thread or start a new threaded -conversation by simply passing the original message's `ts` ID in the -`thread_ts` attribute when posting a message. If you're replying to a -threaded message, you'll pass the `thread_ts` ID of the -message you're replying to. +Threaded messages are a way of grouping messages together to provide greater context. You can reply to a thread or start a new threaded conversation by simply passing the original message's `ts` ID in the `thread_ts` attribute when posting a message. If you're replying to a threaded message, you'll pass the `thread_ts` ID of the message you're replying to. -A channel or DM conversation is a nearly linear timeline of messages -exchanged between people, bots, and apps. When one of these messages is -replied to, it becomes the parent of a thread. By default, threaded -replies do not appear directly in the channel, instead relegated to a -kind of forked timeline descending from the parent message. +A channel or DM conversation is a nearly linear timeline of messages exchanged between people, bots, and apps. When one of these messages is replied to, it becomes the parent of a thread. By default, threaded replies do not appear directly in the channel, but are instead relegated to a kind of forked timeline descending from the parent message. ``` python response = client.chat_postMessage( @@ -152,10 +117,7 @@ response = client.chat_postMessage( ) ``` -By default, `reply_broadcast` is set to `False`. To indicate your reply -is germane to all members of a channel, and therefore a notification of -the reply should be posted in-channel, set the `reply_broadcast` to -`True`. +By default, the `reply_broadcast` parameter is set to `False`. To indicate your reply is germane to all members of a channel and therefore a notification of the reply should be posted in-channel, set the `reply_broadcast` parameter to `True`. ``` python response = client.chat_postMessage( @@ -165,23 +127,17 @@ response = client.chat_postMessage( reply_broadcast=True ) ``` +:::info -While threaded messages may contain attachments and message -buttons, when your reply is broadcast to the channel, it'll actually be -a reference to your reply, not the reply itself. So, when appearing in -the channel, it won't contain any attachments or message buttons. Also -note that updates and deletion of threaded replies works the same as -regular messages. +While threaded messages may contain attachments and message buttons, when your reply is broadcast to the channel, it'll actually be a reference to your reply and not the reply itself. When appearing in the channel, it won't contain any attachments or message buttons. Updates and deletion of threaded replies works the same as regular messages. + +::: -See the [Threading messages -together](https://api.slack.com/docs/message-threading#forking_conversations) -article for more information. +Refer to the [threading messages](https://docs.slack.dev/messaging#threading) page for more information. -### Updating a message +## Updating a message {#updating-messages} -Let's say you have a bot which posts the status of a request. When that -request changes, you'll want to update the message to reflect it's -state. +Let's say you have a bot that posts the status of a request. When that request changes, you'll want to update the message to reflect it's state. ``` python response = client.chat_update( @@ -191,11 +147,9 @@ response = client.chat_update( ) ``` -See [chat.update](https://api.slack.com/methods/chat.update) for -formatting options and some special considerations when calling this -with a bot user. +See the [`chat.update`](https://docs.slack.dev/reference/methods/chat.update) API method for formatting options and some special considerations when calling this with a bot user. -### Deleting a message +## Deleting a message {#deleting-messages} Sometimes you need to delete things. @@ -206,121 +160,22 @@ response = client.chat_delete( ) ``` -See [chat.delete](https://api.slack.com/methods/chat.delete) for more -info. - -### Emoji reactions - -You can quickly respond to any message on Slack with an emoji reaction. -Reactions can be used for any purpose: voting, checking off to-do items, -showing excitement ---- or just for fun. - -This method adds a reaction (emoji) to an item (`file`, `file comment`, -`channel message`, `group message`, or `direct message`). One of file, -file_comment, or the combination of channel and timestamp must be -specified. Also, note that your app's bot user needs to be in the -channel (otherwise, you will get either `not_in_channel` or -`channel_not_found` error code). - -``` python -response = client.reactions_add( - channel="C0XXXXXXX", - name="thumbsup", - timestamp="1234567890.123456" -) -``` - -Removing an emoji reaction is basically the same format, but you'll use -`reactions.remove` instead of `reactions.add` - -``` python -response = client.reactions_remove( - channel="C0XXXXXXX", - name="thumbsup", - timestamp="1234567890.123456" -) -``` - -See [reactions.add](https://api.slack.com/methods/reactions.add) and -[reactions.remove](https://api.slack.com/methods/reactions.remove) for -more info. - -## Files - -### Uploading files - -You can upload files onto Slack and share the file with people in -channels. Note that your app's bot user needs to be in the channel -(otherwise, you will get either `not_in_channel` or `channel_not_found` -error code). - -``` python -response = client.files_upload_v2( - file="test.pdf", - title="Test upload", - channel="C3UKJTQAC", - initial_comment="Here is the latest version of the file!", -) -``` - -If you want to share files within a thread, you can pass "thread_ts" in addition to "channel_id" as shown below: - -``` python -response = client.files_upload_v2( - file="test.pdf", - title="Test upload", - channel="C3UKJTQAC", - thread_ts="1731398999.934122", - initial_comment="Here is the latest version of the file!", -) -``` - -See [files_upload_v2 method release -notes](https://github.com/slackapi/python-slack-sdk/releases/tag/v3.19.0) -for more info. - -### Adding a remote file - -You can add a file information that is stored in an external storage, -not in Slack. - -``` python -response = client.files_remote_add( - external_id="the-all-hands-deck-12345", - external_url="https://{your domain}/files/the-all-hands-deck-12345", - title="The All-hands Deck", - preview_image="./preview.png" # will be displayed in channels -) -``` - -See [files.remote.add](https://api.slack.com/methods/files.remote.add) -for more info. - -## Conversations +See the [`chat.delete`](https://docs.slack.dev/reference/methods/chat.delete) API method for more +details. -The Slack Conversations API provides your app with a unified interface -to work with all the channel-like things encountered in Slack; public -channels, private channels, direct messages, group direct messages, and -our newest channel type, Shared Channels. +## Conversations {#conversations} -See [Conversations API](https://api.slack.com/docs/conversations-api) -docs for more info. +The Slack Conversations API provides your app with a unified interface to work with all the channel-like things encountered in Slack: public channels, private channels, direct messages, group direct messages, and shared channels. -### Start a direct message +Refer to [using the Conversations API](https://docs.slack.dev/apis/web-api/using-the-conversations-api) for more information. -The `conversations_open` method opens either a 1:1 direct message with a -single user or a a multi-person direct message, depending on the number -of users supplied to the `users` parameter. +### Direct messages {#direct-messages} -*For public or private channels, use the conversations_create method.* +The `conversations.open` API method opens either a 1:1 direct message with a single user or a multi-person direct message, depending on the number of users supplied to the `users` parameter. (For public or private channels, use the `conversations.create` API method.) -Provide a `users` parameter as an array with 1 to 8 user IDs to open or -resume a conversation. Providing only 1 ID will create a direct message. -Providing more will create a new multi-party DM or resume an existing -conversation. +Provide a `users` parameter as an array with 1-8 user IDs to open or resume a conversation. Providing only 1 ID will create a direct message. providing more IDs will create a new multi-party direct message or will resume an existing conversation. -Subsequent calls to `conversations_open` with the same set of users will -return the already existing conversation. +Subsequent calls with the same set of users will return the already existing conversation. ``` python import os @@ -330,16 +185,11 @@ client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) response = client.conversations_open(users=["W123456789", "U987654321"]) ``` -See -[conversations.open](https://api.slack.com/methods/conversations.open) -additional info. +See the [`conversations.open`](https://docs.slack.dev/reference/methods/conversations.open) API method for additional details. -### Creating channels +### Creating channels {#creating-channels} -Creates a new channel, either public or private. The `name` parameter is -required, may contain numbers, letters, hyphens, and underscores, and -must contain fewer than 80 characters. To make the channel private, set -the option `is_private` parameter to `True`. +Creates a new channel, either public or private. The `name` parameter is required and may contain numbers, letters, hyphens, or underscores, and must contain fewer than 80 characters. To make the channel private, set the optional `is_private` parameter to `True`. ``` python import os @@ -356,17 +206,28 @@ channel_id = response["channel"]["id"] response = client.conversations_archive(channel=channel_id) ``` -See -[conversations.create](https://api.slack.com/methods/conversations.create) -additional info. +See the [`conversations.create`](https://docs.slack.dev/reference/methods/conversations.create) API method for additional details. + +### Getting conversation information {#getting-conversation-info} + +To retrieve a set of metadata about a channel (public, private, DM, or multi-party DM), use the `conversations.info` API method. The `channel` parameter is required and must be a valid channel ID. The optional `include_locale` boolean parameter will return locale data, which may be useful if you wish to return localized responses. The `include_num_members` boolean parameter will return the number of people in a channel. + +``` python +import os +from slack_sdk import WebClient + +client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) +response = client.conversations_info( + channel="C031415926", + include_num_members=1 +) +``` + +See the [`conversations.info`](https://docs.slack.dev/reference/methods/conversations.info) API method for more details. -### Listing conversations +### Listing conversations {#listing-conversations} -To get a list of all the conversations in a workspace, use -`conversations_list`. By default, only public conversations are -returned; use the `types` parameter specify which types of conversations -you're interested in (Note: `types` is a string of comma-separated -values) +To get a list of all the conversations in a workspace, use the `conversations.list` API method. By default, only public conversations are returned. Use the `types` parameter specify which types of conversations you're interested in. Note that `types` is a string of comma-separated values. ``` python import os @@ -377,9 +238,7 @@ response = client.conversations_list() conversations = response["channels"] ``` -Use the `types` parameter to request additional channels, including -`public_channel`, `private_channel`, `mpim`, and `im`. This parameter is -a string of comma-separated values. +Use the `types` parameter to request additional channels, including `public_channel`, `private_channel`, `mpdm`, and `dm`. This parameter is a string of comma-separated values. ``` python import os @@ -391,49 +250,17 @@ response = client.conversations_list( ) ``` -See -[conversations.list](https://api.slack.com/methods/conversations.list) -for more info. - -Archived channels are included by default. You can exclude them by -passing `exclude_archived=True` to your request. +Archived channels are included by default. You can exclude them by passing `exclude_archived=True` to your request. ``` python response = client.conversations_list(exclude_archived=True) ``` -See -[conversations.list](https://api.slack.com/methods/conversations.list) -for more info. - -### Getting a conversation information - -To retrieve a set of metadata about a channel (public, private, DM, or -multi-party DM), use `conversations_info`. The `channel` parameter is -required and must be a valid channel ID. The optional `include_locale` -boolean parameter will return locale data, which may be useful if you -wish to return localized responses. The `include_num_members` boolean -parameter will return the number of people in a channel. - -``` python -import os -from slack_sdk import WebClient - -client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) -response = client.conversations_info( - channel="C031415926", - include_num_members=1 -) -``` - -See -[conversations.info](https://api.slack.com/methods/conversations.info) -for more info. +See the [`conversations.list`](https://docs.slack.dev/reference/methods/conversations.list) API method for more details. -### Getting members of a conversation +### Getting members of a conversation {#getting-conversation-members} -To get a list of the members of a conversation, use -`conversations_members` with the required `channel` parameter. +To get a list of members for a conversation, use the `conversations.members` API method with the required `channel` parameter. ``` python import os @@ -444,32 +271,23 @@ response = client.conversations_members(channel="C16180339") user_ids = response["members"] ``` -See -[conversations.members](https://api.slack.com/methods/conversations.members) -for more info. +See the [`conversations.members`](https://docs.slack.dev/reference/methods/conversations.members) API method for more details. -### Joining a conversation +### Joining a conversation {#joining-conversations} -Channels are the social hub of most Slack teams. Here's how you hop -into one: +Channels are the social hub of most Slack teams. Here's how you hop into one: ``` python response = client.conversations_join(channel="C0XXXXXXY") ``` -If you are already in the channel, the response is slightly different. -`already_in_channel` will be true, and a limited `channel` object will -be returned. Bot users cannot join a channel on their own, they need to -be invited by another user. +If you are already in the channel, the response is slightly different. The `already_in_channel` attribute will be true, and a limited `channel` object will be returned. Bot users cannot join a channel on their own, they need to be invited by another user. -See -[conversations.join](https://api.slack.com/methods/conversations.join) -for more info. +See the [`conversations.join`](https://docs.slack.dev/reference/methods/conversations.join) API method for more details. -### Leaving a conversation +### Leaving a conversation {#leaving-conversations} -To leave a conversation, use `conversations_leave` with the required -`channel` param containing the ID of the channel to leave. +To leave a conversation, use the `conversations.leave` API method with the required `channel` parameter containing the ID of the channel to leave. ``` python import os @@ -479,19 +297,11 @@ client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) response = client.conversations_leave(channel="C27182818") ``` -See -[conversations.leave](https://api.slack.com/methods/conversations.leave) -for more info. +See the [`conversations.leave`](https://docs.slack.dev/reference/methods/conversations.leave) API method for more details. -## Modals +## Opening a modal {#opening-modals} -### Opening a modal - -Modals allow you to collect data from users and display dynamic -information in a focused surface. - -Modals use the same `blocks` that compose messages with the addition of -an `input` block. +Modals allow you to collect data from users and display dynamic information in a focused surface. Modals use the same blocks that compose messages, with the addition of an `input` block. ``` python from slack_sdk.signature import SignatureVerifier @@ -565,19 +375,19 @@ if __name__ == "__main__": app.run("localhost", 3000) ``` -See [views.open](https://api.slack.com/methods/views.open) more details -and additional parameters. +See the [`views.open`](https://docs.slack.dev/reference/methods/views.open) API method more details and additional parameters. Also, to run the above example, the following [Slack app configurations](https://api.slack.com/apps) are required. -- Enable **Interactivity** with a valid Request URL: - `https://{your-public-domain}/slack/events` -- Add a global shortcut with the Callback ID: `open-modal-shortcut` +To run the above example, the following [app configurations](https://api.slack.com/apps) are required: -### Updating and pushing modals +* Enable **Interactivity** with a valid Request URL: `https://{your-public-domain}/slack/events` +* Add a global shortcut with the callback ID: `open-modal-shortcut` -In response to `view_submission` requests, you can tell Slack to update the current modal view by having `"response_action": update` and an updated view. Also, there are other `response_action` types such as `errors` and `push`. Refer to [the API docs](https://api.slack.com/surfaces/modals/using#updating_response) for more details. +## Updating and pushing modals {#updating-pushing-modals} + +In response to `view_submission` requests, you can tell Slack to update the current modal view by having `"response_action": update` and an updated view. There are also other `response_action` types, such as `errors` and `push`. Refer to the [modals](https://docs.slack.dev/surfaces/modals) page for more details. ``` python if ( @@ -613,9 +423,7 @@ if ( ) ``` -If your app modify the current modal view when receiving -`block_actions` requests from Slack, you can call the -`views.update` API method with the given view ID. +If your app modifies the current modal view when receiving `block_actions` requests from Slack, you can call the `views.update` API method with the given view ID. ``` python private_metadata = "any str data you want to store" @@ -656,78 +464,81 @@ response = client.views_update( ) ``` -See [views.update](https://api.slack.com/methods/views.update) for more -info. +See the [`views.update`](https://docs.slack.dev/reference/methods/views.update) API method for more details. -If you want to push a new view onto the modal instead of updating an -existing view, reference the -[views.push](https://api.slack.com/methods/views.push) documentation. +If you want to push a new view onto the modal instead of updating an existing view, see the [`views.push`](https://docs.slack.dev/reference/methods/views.push) API method. -## Rate Limits +## Emoji reactions {#emoji} -When posting messages to a channel, Slack allows applications to send no -more than one message per channel per second. We allow bursts over that -limit for short periods. However, if your app continues to exceed the -limit over a longer period of time it will be rate limited. Different -API methods have other rate limits — be sure to [check the -limits](https://api.slack.com/docs/rate-limits) and test that your -application has a graceful fallback if it should hit those limits. +You can quickly respond to any message on Slack with an emoji reaction. Reactions can be used for any purpose: voting, checking off to-do items, showing excitement, or just for fun. -If you go over these limits, Slack will start returning a HTTP 429 Too -Many Requests error, a JSON object containing the number of calls you -have been making, and a Retry-After header containing the number of -seconds until you can retry. +This method adds a reaction (emoji) to an item (`file`, `file comment`, `channel message`, `group message`, or `direct message`). One of `file`, `file_comment`, or the combination of `channel` and `timestamp` must be specified. Note that your app's bot user needs to be in the channel (otherwise, you will get either a `not_in_channel` or `channel_not_found` error code). -Here's a very basic example of how one might deal with rate limited -requests. +``` python +response = client.reactions_add( + channel="C0XXXXXXX", + name="thumbsup", + timestamp="1234567890.123456" +) +``` + +Removing an emoji reaction is basically the same format, but you'll use the `reactions.remove` API method instead of the `reactions.add` API method. ``` python -import os -import time -from slack_sdk import WebClient -from slack_sdk.errors import SlackApiError +response = client.reactions_remove( + channel="C0XXXXXXX", + name="thumbsup", + timestamp="1234567890.123456" +) +``` -client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) +See the [`reactions.add`](https://docs.slack.dev/reference/methods/reactions.add) and [`reactions.remove`](https://docs.slack.dev/reference/methods/reactions.remove) API methods for more details. -# Simple wrapper for sending a Slack message -def send_slack_message(channel, message): - return client.chat_postMessage( - channel=channel, - text=message - ) +## Uploading files {#upload-files} -# Make the API call and save results to `response` -channel = "#random" -message = "Hello, from Python!" -# Do until being rate limited -while True: - try: - response = send_slack_message(channel, message) - except SlackApiError as e: - if e.response.status_code == 429: - # The `Retry-After` header will tell you how long to wait before retrying - delay = int(e.response.headers['Retry-After']) - print(f"Rate limited. Retrying in {delay} seconds") - time.sleep(delay) - response = send_slack_message(channel, message) - else: - # other errors - raise e +You can upload files to Slack and share them with people in channels. Note that your app's bot user needs to be in the channel (otherwise, you will get either `not_in_channel` or `channel_not_found` error code). + +``` python +response = client.files_upload_v2( + file="test.pdf", + title="Test upload", + channel="C3UKJTQAC", + initial_comment="Here is the latest version of the file!", +) ``` -Since v3.9.0, the built-in `RateLimitErrorRetryHandler` is available as -an easier way to do the retries for rate limited errors. Refer to the -RetryHandler section in this page for more details. +If you want to share files within a thread, you can pass `thread_ts` in addition to `channel_id` as shown below: -To learn the Slack rate limits in general, see the documentation on -[Rate Limiting](https://api.slack.com/docs/rate-limits). +``` python +response = client.files_upload_v2( + file="test.pdf", + title="Test upload", + channel="C3UKJTQAC", + thread_ts="1731398999.934122", + initial_comment="Here is the latest version of the file!", +) +``` -## Calling API methods +See the [`files.upload`](https://docs.slack.dev/reference/methods/files.upload) API method for more details. -This library covers all the public endpoints as the methods in -`WebClient`. That said, you may see a bit delay of the library release. -When you're in a hurry, you can directly use `api_call` method as -below. +## Adding a remote file {#adding-remote-files} + +You can add a file information that is stored in an external storage rather than in Slack. + +``` python +response = client.files_remote_add( + external_id="the-all-hands-deck-12345", + external_url="https://{your domain}/files/the-all-hands-deck-12345", + title="The All-hands Deck", + preview_image="./preview.png" # will be displayed in channels +) +``` + +See the [files.remote.add](https://docs.slack.dev/reference/methods/files.remote.add) API method for more details. + +## Calling API methods {#calling-API-methods} + +This library covers all the public endpoints as the methods in `WebClient`. That said, you may see a bit of a delay with the library release. When you're in a hurry, you can directly use the `api_call` method as below. ``` python import os @@ -741,16 +552,9 @@ response = client.api_call( assert response["message"]["text"] == "Hello world!" ``` -## AsyncWebClient +## AsyncWebClient {#asyncwebclient} -All the API methods are available in asynchronous programming using the -standard [asyncio](https://docs.python.org/3/library/asyncio.html) -library. You use `AsyncWebClient` instead for it. - -`AsyncWebClient` internally relies on -[AIOHTTP](https://docs.aiohttp.org/en/stable/) library but it is an -optional dependency. So, to use this class, run `pip install aiohttp` -beforehand. +The webhook client is available in asynchronous programming using the standard [asyncio](https://docs.python.org/3/library/asyncio.html) library. You use `AsyncWebhookClient` instead. `AsyncWebhookClient` internally relies on the [AIOHTTP](https://docs.aiohttp.org/en/stable/) library, but it is an optional dependency. To use this class, run `pip install aiohttp` beforehand. ``` python import asyncio @@ -780,18 +584,11 @@ async def post_message(): asyncio.run(post_message()) ``` -## RetryHandler +## RetryHandler {#retryhandler} -With the default settings, only `ConnectionErrorRetryHandler` with its -default configuration (=only one retry in the manner of [exponential -backoff and -jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) -is enabled. The retry handler retries if an API client encounters a -connectivity-related failure (e.g., Connection reset by peer). +With the default settings, only `ConnectionErrorRetryHandler` with its default configuration (=only one retry in the manner of [exponential backoff and jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) is enabled. The retry handler retries if an API client encounters a connectivity-related failure (e.g., connection reset by peer). -To use other retry handlers, you can pass a list of `RetryHandler` to -the client constructor. For instance, you can add the built-in -`RateLimitErrorRetryHandler` this way: +To use other retry handlers, you can pass a list of `RetryHandler` to the client constructor. For instance, you can add the built-in `RateLimitErrorRetryHandler` this way: ``` python import os @@ -806,11 +603,7 @@ rate_limit_handler = RateLimitErrorRetryHandler(max_retry_count=1) client.retry_handlers.append(rate_limit_handler) ``` -Creating your own ones is also quite simple. Defining a new class that -inherits `slack_sdk.http_retry.RetryHandler` (`AsyncRetryHandler` for -asyncio apps) and implements required methods (internals of `can_retry` -/ `prepare_for_next_retry`). Check the built-in ones' source code for -learning how to properly implement. +You can also create one on your own by defining a new class that inherits `slack_sdk.http_retry RetryHandler` (`AsyncRetryHandler` for asyncio apps) and implements required methods (internals of `can_retry` / `prepare_for_next_retry`). Check out the source code for the ones that are built in to learn how to properly implement them. ``` python import socket @@ -843,10 +636,50 @@ client = WebClient( ) ``` -For asyncio apps, `Async` prefixed corresponding modules are available. -All the methods in those methods are async/await compatible. Check [the -source -code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) -and -[tests](https://github.com/slackapi/python-slack-sdk/blob/main/tests/slack_sdk_async/web/test_async_web_client_http_retry.py) -for more details. +For asyncio apps, `Async` prefixed corresponding modules are available. All the methods in those methods are async/await compatible. Check [the source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) for more details. + +## Rate limits {#rate-limits} + +When posting messages to a channel, Slack allows apps to send no more than one message per channel per second. We allow bursts over that limit for short periods; however, if your app continues to exceed the limit over a longer period of time, it will be rate limited. Different API methods have other limits — be sure to check the [rate limits](https://docs.slack.dev/apis/web-api/rate-limits) and test that your app has a graceful fallback if it should hit those limits. + +If you go over these limits, Slack will begin returning *HTTP 429 Too Many Requests* errors, a JSON object containing the number of calls you have been making, and a *Retry-After* header containing the number of seconds until you can retry. + +Here's an example of how you might handle rate limited requests: + +``` python +import os +import time +from slack_sdk import WebClient +from slack_sdk.errors import SlackApiError + +client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) + +# Simple wrapper for sending a Slack message +def send_slack_message(channel, message): + return client.chat_postMessage( + channel=channel, + text=message + ) + +# Make the API call and save results to `response` +channel = "#random" +message = "Hello, from Python!" +# Do until being rate limited +while True: + try: + response = send_slack_message(channel, message) + except SlackApiError as e: + if e.response.status_code == 429: + # The `Retry-After` header will tell you how long to wait before retrying + delay = int(e.response.headers['Retry-After']) + print(f"Rate limited. Retrying in {delay} seconds") + time.sleep(delay) + response = send_slack_message(channel, message) + else: + # other errors + raise e +``` + +Since v3.9.0, the built-in `RateLimitErrorRetryHandler` is available as an easier way to do retries for rate limited errors. Refer to the [RetryHandler](#retryhandler) section for more details. + +Refer to the [rate limits](https://docs.slack.dev/apis/web-api/rate-limits) page for more information. diff --git a/docs/content/webhook.md b/docs/content/webhook.md index 80428e7c5..572710cc3 100644 --- a/docs/content/webhook.md +++ b/docs/content/webhook.md @@ -1,10 +1,10 @@ -# Webhook Client +# Webhook client -## Incoming Webhooks +## Incoming webhooks {#incoming-webhooks} -You can use `slack_sdk.webhook.WebhookClient` for [Incoming Webhooks](https://api.slack.com/messaging/webhooks) and message responses using [response_url in payloads](https://api.slack.com/interactivity/handling#message_responses). +You can use `slack_sdk.webhook.WebhookClient` for [incoming webhooks](https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks) and message responses using [`response_url`](https://docs.slack.dev/interactivity/handling-user-interaction#message_responses) in payloads. -To use [Incoming Webhooks](https://api.slack.com/messaging/webhooks), just calling `WebhookClient(url)#send(payload)` method works for you. The call posts a message in a channel associated with the webhook URL. +To use [incoming webhooks](https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks), calling the `WebhookClient(url)#send(payload)` method works for you. The call posts a message in a channel associated with the webhook URL. ``` python from slack_sdk.webhook import WebhookClient @@ -16,8 +16,7 @@ assert response.status_code == 200 assert response.body == "ok" ``` -It's also possible to use `blocks`, richer message using [Block -Kit](https://api.slack.com/block-kit). +It's also possible to use `blocks` using [Block Kit](https://docs.slack.dev/block-kit). ``` python from slack_sdk.webhook import WebhookClient @@ -37,12 +36,9 @@ response = webhook.send( ) ``` -## `response_url` +## The `response_url` -User actions in channels generates a -[response_url](https://api.slack.com/interactivity/handling#message_responses) -and includes the URL in its payload. You can use `WebhookClient` to send -a message via the `response_url`. +User actions in channels generates a [`response_url`](https://docs.slack.dev/interactivity/handling-user-interaction#message_responses) and includes the URL in its payload. You can use `WebhookClient` to send a message via the `response_url`. ``` python import os @@ -59,7 +55,7 @@ app = Flask(__name__) @app.route("/slack/events", methods=["POST"]) def slack_app(): # Verify incoming requests from Slack - # https://api.slack.com/authentication/verifying-requests-from-slack + # https://docs.slack.dev/authentication/verifying-requests-from-slack if not signature_verifier.is_valid( body=request.get_data(), timestamp=request.headers.get("X-Slack-Request-Timestamp"), @@ -80,16 +76,9 @@ def slack_app(): return make_response("", 404) ``` -## AsyncWebhookClient +## AsyncWebhookClient {#asyncwebhookclient} -The webhook client is available in asynchronous programming using the -standard [asyncio](https://docs.python.org/3/library/asyncio.html) -library, too. You use `AsyncWebhookClient` instead for it. - -`AsyncWebhookClient` internally relies on -[AIOHTTP](https://docs.aiohttp.org/en/stable/) library but it is an -optional dependency. So, to use this class, run `pip install aiohttp` -beforehand. +The webhook client is available in asynchronous programming using the standard [asyncio](https://docs.python.org/3/library/asyncio.html) library. You use `AsyncWebhookClient` instead. `AsyncWebhookClient` internally relies on the [AIOHTTP](https://docs.aiohttp.org/en/stable/) library, but it is an optional dependency. To use this class, run `pip install aiohttp` beforehand. ``` python import asyncio @@ -108,18 +97,11 @@ async def send_message_via_webhook(url: str): asyncio.run(send_message_via_webhook(url)) ``` -## RetryHandler +## RetryHandler {#retryhandler} -With the default settings, only `ConnectionErrorRetryHandler` with its -default configuration (=only one retry in the manner of [exponential -backoff and -jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) -is enabled. The retry handler retries if an API client encounters a -connectivity-related failure (e.g., Connection reset by peer). +With the default settings, only `ConnectionErrorRetryHandler` with its default configuration (=only one retry in the manner of [exponential backoff and jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) is enabled. The retry handler retries if an API client encounters a connectivity-related failure (e.g., connection reset by peer). -To use other retry handlers, you can pass a list of `RetryHandler` to -the client constructor. For instance, you can add the built-in -`RateLimitErrorRetryHandler` this way: +To use other retry handlers, you can pass a list of `RetryHandler` to the client constructor. For instance, you can add the built-in `RateLimitErrorRetryHandler` this way: ``` python from slack_sdk.webhook import WebhookClient @@ -134,11 +116,7 @@ rate_limit_handler = RateLimitErrorRetryHandler(max_retry_count=1) client.retry_handlers.append(rate_limit_handler) ``` -Creating your own ones is also quite simple. Defining a new class that -inherits `slack_sdk.http_retry.RetryHandler` (`AsyncRetryHandler` for -asyncio apps) and implements required methods (internals of `can_retry` -/ `prepare_for_next_retry`). Check the built-in ones' source code for -learning how to properly implement. +You can also create one on your own by defining a new class that inherits `slack_sdk.http_retry RetryHandler` (`AsyncRetryHandler` for asyncio apps) and implements required methods (internals of `can_retry` / `prepare_for_next_retry`). Check out the source code for the ones that are built in to learn how to properly implement them. ``` python import socket @@ -171,10 +149,4 @@ webhook = WebhookClient( ) ``` -For asyncio apps, `Async` prefixed corresponding modules are available. -All the methods in those methods are async/await compatible. Check [the -source -code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) -and -[tests](https://github.com/slackapi/python-slack-sdk/blob/main/tests/slack_sdk_async/web/test_async_web_client_http_retry.py) -for more details. +For asyncio apps, `Async` prefixed corresponding modules are available. All the methods in those methods are async/await compatible. Check [the source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) for more details. From 1fcdcf981bac056ca6d6df48dc081e12496dd666 Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Wed, 18 Jun 2025 15:38:23 -0400 Subject: [PATCH 07/72] feat: add support for elevate methods (#1703) * feat: add support for elevate apis * Update test_web_client_coverage.py --- slack_sdk/web/async_client.py | 54 +++++++++++++++++++ slack_sdk/web/client.py | 54 +++++++++++++++++++ slack_sdk/web/legacy_client.py | 54 +++++++++++++++++++ .../web/test_web_client_coverage.py | 33 +++++++++++- 4 files changed, 193 insertions(+), 2 deletions(-) diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index dadde5a49..9334abfd2 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -437,6 +437,60 @@ async def admin_auth_policy_removeEntities( kwargs.update({"entity_type": entity_type}) return await self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + async def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Create a Salesforce channel for the corresponding object provided. + https://api.slack.com/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return await self.api_call("admin.conversations.createForObjects", params=kwargs) + + async def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> AsyncSlackResponse: + """Link a Salesforce record to a channel. + https://api.slack.com/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return await self.api_call("admin.conversations.linkObjects", params=kwargs) + + async def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> AsyncSlackResponse: + """Unlink a Salesforce record from a channel. + https://api.slack.com/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return await self.api_call("admin.conversations.unlinkObjects", params=kwargs) + async def admin_barriers_create( self, *, diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index 433e447c2..80fbec86b 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -427,6 +427,60 @@ def admin_auth_policy_removeEntities( kwargs.update({"entity_type": entity_type}) return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Create a Salesforce channel for the corresponding object provided. + https://api.slack.com/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return self.api_call("admin.conversations.createForObjects", params=kwargs) + + def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> SlackResponse: + """Link a Salesforce record to a channel. + https://api.slack.com/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return self.api_call("admin.conversations.linkObjects", params=kwargs) + + def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> SlackResponse: + """Unlink a Salesforce record from a channel. + https://api.slack.com/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs) + def admin_barriers_create( self, *, diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index 2caa6db0a..5496226bc 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -439,6 +439,60 @@ def admin_auth_policy_removeEntities( kwargs.update({"entity_type": entity_type}) return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Create a Salesforce channel for the corresponding object provided. + https://api.slack.com/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return self.api_call("admin.conversations.createForObjects", params=kwargs) + + def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Link a Salesforce record to a channel. + https://api.slack.com/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return self.api_call("admin.conversations.linkObjects", params=kwargs) + + def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Unlink a Salesforce record from a channel. + https://api.slack.com/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs) + def admin_barriers_create( self, *, diff --git a/tests/slack_sdk_async/web/test_web_client_coverage.py b/tests/slack_sdk_async/web/test_web_client_coverage.py index e09a0c0ec..531427ba1 100644 --- a/tests/slack_sdk_async/web/test_web_client_coverage.py +++ b/tests/slack_sdk_async/web/test_web_client_coverage.py @@ -14,9 +14,9 @@ class TestWebClientCoverage(unittest.TestCase): - # 289 endpoints as of Sept 4, 2024 + # 288 endpoints as of June 17, 2025 # Can be fetched by running `var methodNames = [].slice.call(document.getElementsByClassName('apiReferenceFilterableList__listItemLink')).map(e => e.href.replace("https://api.slack.com/methods/", ""));console.log(methodNames.toString());console.log(methodNames.length);` on https://api.slack.com/methods - all_api_methods = "admin.analytics.getFile,admin.apps.activities.list,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.config.lookup,admin.apps.config.set,admin.apps.requests.cancel,admin.apps.requests.list,admin.apps.restricted.list,admin.audit.anomaly.allow.getItem,admin.audit.anomaly.allow.updateItem,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.bulkArchive,admin.conversations.bulkDelete,admin.conversations.bulkMove,admin.conversations.convertToPrivate,admin.conversations.convertToPublic,admin.conversations.create,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.lookup,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.functions.list,admin.functions.permissions.lookup,admin.functions.permissions.set,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.roles.addAssignments,admin.roles.listAssignments,admin.roles.removeAssignments,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.resetBulk,admin.users.session.setSettings,admin.users.unsupportedVersions.export,admin.workflows.collaborators.add,admin.workflows.collaborators.remove,admin.workflows.permissions.lookup,admin.workflows.search,admin.workflows.unpublish,admin.workflows.triggers.types.permissions.lookup,admin.workflows.triggers.types.permissions.set,api.test,apps.activities.list,apps.auth.external.delete,apps.auth.external.get,apps.connections.open,apps.uninstall,apps.datastore.bulkDelete,apps.datastore.bulkGet,apps.datastore.bulkPut,apps.datastore.count,apps.datastore.delete,apps.datastore.get,apps.datastore.put,apps.datastore.query,apps.datastore.update,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,auth.revoke,auth.test,auth.teams.list,bookmarks.add,bookmarks.edit,bookmarks.list,bookmarks.remove,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,canvases.access.delete,canvases.access.set,canvases.create,canvases.delete,canvases.edit,canvases.sections.lookup,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.unfurl,chat.update,chat.scheduledMessages.list,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,conversations.canvases.create,conversations.externalInvitePermissions.set,conversations.requestSharedInvite.approve,conversations.requestSharedInvite.deny,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.completeUploadExternal,files.delete,files.getUploadURLExternal,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.comments.delete,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,functions.completeError,functions.completeSuccess,functions.distributions.permissions.add,functions.distributions.permissions.list,functions.distributions.permissions.remove,functions.distributions.permissions.set,functions.workflows.steps.list,functions.workflows.steps.responses.export,migration.exchange,oauth.access,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.billing.info,team.externalTeams.disconnect,team.externalTeams.list,team.preferences.list,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.discoverableContacts.lookup,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,workflows.triggers.permissions.add,workflows.triggers.permissions.list,workflows.triggers.permissions.remove,workflows.triggers.permissions.set,channels.create,channels.info,channels.invite,channels.mark,groups.create,groups.info,groups.invite,groups.mark,groups.open,im.list,im.mark,im.open,mpim.list,mpim.mark,mpim.open,assistant.threads.setStatus,assistant.threads.setTitle,assistant.threads.setSuggestedPrompts".split( + all_api_methods = "admin.analytics.getFile,admin.apps.activities.list,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.config.lookup,admin.apps.config.set,admin.apps.requests.cancel,admin.apps.requests.list,admin.apps.restricted.list,admin.audit.anomaly.allow.getItem,admin.audit.anomaly.allow.updateItem,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.bulkArchive,admin.conversations.bulkDelete,admin.conversations.bulkMove,admin.conversations.convertToPrivate,admin.conversations.convertToPublic,admin.conversations.create,admin.conversations.createForObjects,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.linkObjects,admin.conversations.lookup,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.unlinkObjects,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.functions.list,admin.functions.permissions.lookup,admin.functions.permissions.set,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.roles.addAssignments,admin.roles.listAssignments,admin.roles.removeAssignments,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.resetBulk,admin.users.session.setSettings,admin.users.unsupportedVersions.export,admin.workflows.collaborators.add,admin.workflows.collaborators.remove,admin.workflows.permissions.lookup,admin.workflows.search,admin.workflows.unpublish,admin.workflows.triggers.types.permissions.lookup,admin.workflows.triggers.types.permissions.set,api.test,apps.activities.list,apps.auth.external.delete,apps.auth.external.get,apps.connections.open,apps.uninstall,apps.datastore.bulkDelete,apps.datastore.bulkGet,apps.datastore.bulkPut,apps.datastore.count,apps.datastore.delete,apps.datastore.get,apps.datastore.put,apps.datastore.query,apps.datastore.update,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,assistant.search.context,assistant.threads.setStatus,assistant.threads.setSuggestedPrompts,assistant.threads.setTitle,auth.revoke,auth.test,auth.teams.list,bookmarks.add,bookmarks.edit,bookmarks.list,bookmarks.remove,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,canvases.access.delete,canvases.access.set,canvases.create,canvases.delete,canvases.edit,canvases.sections.lookup,channels.mark,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.unfurl,chat.update,chat.scheduledMessages.list,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,conversations.canvases.create,conversations.externalInvitePermissions.set,conversations.requestSharedInvite.approve,conversations.requestSharedInvite.deny,conversations.requestSharedInvite.list,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.completeUploadExternal,files.delete,files.getUploadURLExternal,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.comments.delete,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,functions.completeError,functions.completeSuccess,functions.distributions.permissions.add,functions.distributions.permissions.list,functions.distributions.permissions.remove,functions.distributions.permissions.set,functions.workflows.steps.list,functions.workflows.steps.responses.export,groups.mark,migration.exchange,oauth.access,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.billing.info,team.externalTeams.disconnect,team.externalTeams.list,team.preferences.list,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.discoverableContacts.lookup,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,workflows.triggers.permissions.add,workflows.triggers.permissions.list,workflows.triggers.permissions.remove,workflows.triggers.permissions.set,im.list,im.mark,mpim.list,mpim.mark".split( "," ) @@ -68,6 +68,8 @@ def setUp(self): # TODO: admin.audit.anomaly.allow.* / The endpoints requires a "session" token "admin.audit.anomaly.allow.getItem", "admin.audit.anomaly.allow.updateItem", + "assistant.search.context", # TODO: add this method in follow up PR + "conversations.requestSharedInvite.list", # TODO: add this method in follow up PR ]: continue self.api_methods_to_call.append(api_method) @@ -143,6 +145,33 @@ async def run_method(self, method_name, method, async_method): )["method"] ) await async_method(entity_ids=["1", "2"], entity_type="type", policy_name="policyname") + elif method_name == "admin_conversations_createForObjects": + self.api_methods_to_call.remove( + method( + object_id="0019000000DmehKAAR", + salesforce_org_id="00DGC00000024hsuWY", + )["method"] + ) + await async_method(object_id="0019000000DmehKAAR", salesforce_org_id="00DGC00000024hsuWY") + elif method_name == "admin_conversations_linkObjects": + self.api_methods_to_call.remove( + method( + channel="C1234567890", + record_id="0019000000DmehKAAR", + salesforce_org_id="00DGC00000024hsuWY", + )["method"] + ) + await async_method( + channel="C1234567890", record_id="0019000000DmehKAAR", salesforce_org_id="00DGC00000024hsuWY" + ) + elif method_name == "admin_conversations_unlinkObjects": + self.api_methods_to_call.remove( + method( + channel="C1234567890", + new_name="new-channel-name", + )["method"] + ) + await async_method(channel="C1234567890", new_name="new-channel-name") elif method_name == "admin_barriers_create": self.api_methods_to_call.remove( method( From d9b99df50ee9150e287f2fee932d7ec3c3f8bf4a Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Thu, 19 Jun 2025 09:50:00 -0400 Subject: [PATCH 08/72] chore: increase the robustness of the uninstall script (#1704) * chore: increase the robustness of the uninstall script * Update uninstall_all.sh --- scripts/uninstall_all.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/uninstall_all.sh b/scripts/uninstall_all.sh index bf53e7175..71a1e51f6 100755 --- a/scripts/uninstall_all.sh +++ b/scripts/uninstall_all.sh @@ -1,4 +1,10 @@ #!/bin/bash -pip uninstall -y slack-sdk && \ - pip freeze | grep -v "^-e" | sed 's/@.*//' | sed 's/\=\=.*//' | xargs pip uninstall -y +# remove slack-sdk without a version specifier so that local builds are cleaned up +pip uninstall -y slack-sdk +# collect all installed packages +PACKAGES=$(pip freeze | grep -v "^-e" | sed 's/@.*//' | sed 's/\=\=.*//') +# uninstall packages without exiting on a failure +for package in $PACKAGES; do + pip uninstall -y $package +done From d5c24b49ccc12cd69d5c10661ec40cb495843a57 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Jul 2025 19:11:31 +0000 Subject: [PATCH 09/72] chore(deps): bump the docusaurus group in /docs with 5 updates (#1705) --- docs/package-lock.json | 1068 +++++++++++++++------------------------- docs/package.json | 6 +- 2 files changed, 388 insertions(+), 686 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 4778990d8..33368abfc 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8,9 +8,9 @@ "name": "website", "version": "2024.08.01", "dependencies": { - "@docusaurus/core": "^3.8.0", - "@docusaurus/plugin-client-redirects": "^3.8.0", - "@docusaurus/preset-classic": "^3.8.0", + "@docusaurus/core": "^3.8.1", + "@docusaurus/plugin-client-redirects": "^3.8.1", + "@docusaurus/preset-classic": "^3.8.1", "@mdx-js/react": "^3.1.0", "clsx": "^2.0.0", "docusaurus-theme-github-codeblock": "^2.0.2", @@ -30,7 +30,6 @@ "version": "1.17.9", "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz", "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==", - "license": "MIT", "dependencies": { "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", "@algolia/autocomplete-shared": "1.17.9" @@ -40,7 +39,6 @@ "version": "1.17.9", "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz", "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==", - "license": "MIT", "dependencies": { "@algolia/autocomplete-shared": "1.17.9" }, @@ -52,7 +50,6 @@ "version": "1.17.9", "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz", "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==", - "license": "MIT", "dependencies": { "@algolia/autocomplete-shared": "1.17.9" }, @@ -65,106 +62,98 @@ "version": "1.17.9", "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz", "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==", - "license": "MIT", "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "node_modules/@algolia/client-abtesting": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.25.0.tgz", - "integrity": "sha512-1pfQulNUYNf1Tk/svbfjfkLBS36zsuph6m+B6gDkPEivFmso/XnRgwDvjAx80WNtiHnmeNjIXdF7Gos8+OLHqQ==", - "license": "MIT", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.30.0.tgz", + "integrity": "sha512-Q3OQXYlTNqVUN/V1qXX8VIzQbLjP3yrRBO9m6NRe1CBALmoGHh9JrYosEGvfior28+DjqqU3Q+nzCSuf/bX0Gw==", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.30.0", + "@algolia/requester-browser-xhr": "5.30.0", + "@algolia/requester-fetch": "5.30.0", + "@algolia/requester-node-http": "5.30.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.25.0.tgz", - "integrity": "sha512-AFbG6VDJX/o2vDd9hqncj1B6B4Tulk61mY0pzTtzKClyTDlNP0xaUiEKhl6E7KO9I/x0FJF5tDCm0Hn6v5x18A==", - "license": "MIT", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.30.0.tgz", + "integrity": "sha512-/b+SAfHjYjx/ZVeVReCKTTnFAiZWOyvYLrkYpeNMraMT6akYRR8eC1AvFcvR60GLG/jytxcJAp42G8nN5SdcLg==", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.30.0", + "@algolia/requester-browser-xhr": "5.30.0", + "@algolia/requester-fetch": "5.30.0", + "@algolia/requester-node-http": "5.30.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.25.0.tgz", - "integrity": "sha512-il1zS/+Rc6la6RaCdSZ2YbJnkQC6W1wiBO8+SH+DE6CPMWBU6iDVzH0sCKSAtMWl9WBxoN6MhNjGBnCv9Yy2bA==", - "license": "MIT", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.30.0.tgz", + "integrity": "sha512-tbUgvkp2d20mHPbM0+NPbLg6SzkUh0lADUUjzNCF+HiPkjFRaIW3NGMlESKw5ia4Oz6ZvFzyREquUX6rdkdJcQ==", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.25.0.tgz", - "integrity": "sha512-blbjrUH1siZNfyCGeq0iLQu00w3a4fBXm0WRIM0V8alcAPo7rWjLbMJMrfBtzL9X5ic6wgxVpDADXduGtdrnkw==", - "license": "MIT", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.30.0.tgz", + "integrity": "sha512-caXuZqJK761m32KoEAEkjkE2WF/zYg1McuGesWXiLSgfxwZZIAf+DljpiSToBUXhoPesvjcLtINyYUzbkwE0iw==", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.30.0", + "@algolia/requester-browser-xhr": "5.30.0", + "@algolia/requester-fetch": "5.30.0", + "@algolia/requester-node-http": "5.30.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.25.0.tgz", - "integrity": "sha512-aywoEuu1NxChBcHZ1pWaat0Plw7A8jDMwjgRJ00Mcl7wGlwuPt5dJ/LTNcg3McsEUbs2MBNmw0ignXBw9Tbgow==", - "license": "MIT", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.30.0.tgz", + "integrity": "sha512-7K6P7TRBHLX1zTmwKDrIeBSgUidmbj6u3UW/AfroLRDGf9oZFytPKU49wg28lz/yulPuHY0nZqiwbyAxq9V17w==", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.30.0", + "@algolia/requester-browser-xhr": "5.30.0", + "@algolia/requester-fetch": "5.30.0", + "@algolia/requester-node-http": "5.30.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.25.0.tgz", - "integrity": "sha512-a/W2z6XWKjKjIW1QQQV8PTTj1TXtaKx79uR3NGBdBdGvVdt24KzGAaN7sCr5oP8DW4D3cJt44wp2OY/fZcPAVA==", - "license": "MIT", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.30.0.tgz", + "integrity": "sha512-WMjWuBjYxJheRt7Ec5BFr33k3cV0mq2WzmH9aBf5W4TT8kUp34x91VRsYVaWOBRlxIXI8o/WbhleqSngiuqjLA==", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.30.0", + "@algolia/requester-browser-xhr": "5.30.0", + "@algolia/requester-fetch": "5.30.0", + "@algolia/requester-node-http": "5.30.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.25.0.tgz", - "integrity": "sha512-9rUYcMIBOrCtYiLX49djyzxqdK9Dya/6Z/8sebPn94BekT+KLOpaZCuc6s0Fpfq7nx5J6YY5LIVFQrtioK9u0g==", - "license": "MIT", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.30.0.tgz", + "integrity": "sha512-puc1/LREfSqzgmrOFMY5L/aWmhYOlJ0TTpa245C0ZNMKEkdOkcimFbXTXQ8lZhzh+rlyFgR7cQGNtXJ5H0XgZg==", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.30.0", + "@algolia/requester-browser-xhr": "5.30.0", + "@algolia/requester-fetch": "5.30.0", + "@algolia/requester-node-http": "5.30.0" }, "engines": { "node": ">= 14.0.0" @@ -173,85 +162,78 @@ "node_modules/@algolia/events": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", - "license": "MIT" + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "node_modules/@algolia/ingestion": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.25.0.tgz", - "integrity": "sha512-jJeH/Hk+k17Vkokf02lkfYE4A+EJX+UgnMhTLR/Mb+d1ya5WhE+po8p5a/Nxb6lo9OLCRl6w3Hmk1TX1e9gVbQ==", - "license": "MIT", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.30.0.tgz", + "integrity": "sha512-NfqiIKVgGKTLr6T9F81oqB39pPiEtILTy0z8ujxPKg2rCvI/qQeDqDWFBmQPElCfUTU6kk67QAgMkQ7T6fE+gg==", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.30.0", + "@algolia/requester-browser-xhr": "5.30.0", + "@algolia/requester-fetch": "5.30.0", + "@algolia/requester-node-http": "5.30.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.25.0.tgz", - "integrity": "sha512-Ls3i1AehJ0C6xaHe7kK9vPmzImOn5zBg7Kzj8tRYIcmCWVyuuFwCIsbuIIz/qzUf1FPSWmw0TZrGeTumk2fqXg==", - "license": "MIT", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.30.0.tgz", + "integrity": "sha512-/eeM3aqLKro5KBZw0W30iIA6afkGa+bcpvEM0NDa92m5t3vil4LOmJI9FkgzfmSkF4368z/SZMOTPShYcaVXjA==", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.30.0", + "@algolia/requester-browser-xhr": "5.30.0", + "@algolia/requester-fetch": "5.30.0", + "@algolia/requester-node-http": "5.30.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.25.0.tgz", - "integrity": "sha512-79sMdHpiRLXVxSjgw7Pt4R1aNUHxFLHiaTDnN2MQjHwJ1+o3wSseb55T9VXU4kqy3m7TUme3pyRhLk5ip/S4Mw==", - "license": "MIT", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.30.0.tgz", + "integrity": "sha512-iWeAUWqw+xT+2IyUyTqnHCK+cyCKYV5+B6PXKdagc9GJJn6IaPs8vovwoC0Za5vKCje/aXQ24a2Z1pKpc/tdHg==", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.30.0", + "@algolia/requester-browser-xhr": "5.30.0", + "@algolia/requester-fetch": "5.30.0", + "@algolia/requester-node-http": "5.30.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.25.0.tgz", - "integrity": "sha512-JLaF23p1SOPBmfEqozUAgKHQrGl3z/Z5RHbggBu6s07QqXXcazEsub5VLonCxGVqTv6a61AAPr8J1G5HgGGjEw==", - "license": "MIT", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.30.0.tgz", + "integrity": "sha512-alo3ly0tdNLjfMSPz9dmNwYUFHx7guaz5dTGlIzVGnOiwLgIoM6NgA+MJLMcH6e1S7OpmE2AxOy78svlhst2tQ==", "dependencies": { - "@algolia/client-common": "5.25.0" + "@algolia/client-common": "5.30.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.25.0.tgz", - "integrity": "sha512-rtzXwqzFi1edkOF6sXxq+HhmRKDy7tz84u0o5t1fXwz0cwx+cjpmxu/6OQKTdOJFS92JUYHsG51Iunie7xbqfQ==", - "license": "MIT", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.30.0.tgz", + "integrity": "sha512-WOnTYUIY2InllHBy6HHMpGIOo7Or4xhYUx/jkoSK/kPIa1BRoFEHqa8v4pbKHtoG7oLvM2UAsylSnjVpIhGZXg==", "dependencies": { - "@algolia/client-common": "5.25.0" + "@algolia/client-common": "5.30.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.25.0.tgz", - "integrity": "sha512-ZO0UKvDyEFvyeJQX0gmZDQEvhLZ2X10K+ps6hViMo1HgE2V8em00SwNsQ+7E/52a+YiBkVWX61pJJJE44juDMQ==", - "license": "MIT", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.30.0.tgz", + "integrity": "sha512-uSTUh9fxeHde1c7KhvZKUrivk90sdiDftC+rSKNFKKEU9TiIKAGA7B2oKC+AoMCqMymot1vW9SGbeESQPTZd0w==", "dependencies": { - "@algolia/client-common": "5.25.0" + "@algolia/client-common": "5.30.0" }, "engines": { "node": ">= 14.0.0" @@ -731,7 +713,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1379,7 +1360,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1499,7 +1479,6 @@ "version": "7.27.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz", "integrity": "sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==", - "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", @@ -1519,7 +1498,6 @@ "version": "0.11.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", - "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.3", "core-js-compat": "^3.40.0" @@ -1532,7 +1510,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -1838,10 +1815,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.4.tgz", - "integrity": "sha512-H7QhL0ucCGOObsUETNbB2PuzF4gAvN8p32P6r91bX7M/hk4bx+3yz2hTwHL9d/Efzwu1upeb4/cd7oSxCzup3w==", - "license": "MIT", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.6.tgz", + "integrity": "sha512-vDVrlmRAY8z9Ul/HxT+8ceAru95LQgkSKiXkSYZvqtbkPSfhZJgpRp45Cldbh1GJ1kxzQkI70AqyrTI58KpaWQ==", "dependencies": { "core-js-pure": "^3.30.2" }, @@ -1918,7 +1894,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "engines": { "node": ">=18" }, @@ -1941,7 +1916,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" } @@ -1960,7 +1934,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "engines": { "node": ">=18" }, @@ -1983,7 +1956,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "dependencies": { "@csstools/color-helpers": "^5.0.2", "@csstools/css-calc": "^2.1.4" @@ -2010,7 +1982,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "engines": { "node": ">=18" }, @@ -2032,7 +2003,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "engines": { "node": ">=18" } @@ -2051,7 +2021,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "engines": { "node": ">=18" }, @@ -2061,9 +2030,9 @@ } }, "node_modules/@csstools/postcss-cascade-layers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz", - "integrity": "sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz", + "integrity": "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==", "funding": [ { "type": "github", @@ -2074,7 +2043,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" @@ -2100,7 +2068,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -2112,7 +2079,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2135,7 +2101,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-color-parser": "^3.0.10", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2164,7 +2129,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-color-parser": "^3.0.10", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2193,7 +2157,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-color-parser": "^3.0.10", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2222,7 +2185,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", @@ -2250,7 +2212,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2277,7 +2238,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" @@ -2303,7 +2263,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-color-parser": "^3.0.10", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2330,7 +2289,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-color-parser": "^3.0.10", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2359,7 +2317,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-color-parser": "^3.0.10", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2388,7 +2345,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0", @@ -2415,7 +2371,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -2424,9 +2379,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", - "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", + "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", "funding": [ { "type": "github", @@ -2437,7 +2392,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" @@ -2463,7 +2417,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -2475,7 +2428,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2498,7 +2450,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", @@ -2526,7 +2477,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -2548,7 +2498,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -2570,7 +2519,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -2592,7 +2540,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2617,7 +2564,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0" @@ -2643,7 +2589,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2671,7 +2616,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", @@ -2698,7 +2642,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" @@ -2724,7 +2667,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2749,7 +2691,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-color-parser": "^3.0.10", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2778,7 +2719,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2803,7 +2743,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2830,7 +2769,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-color-parser": "^3.0.10", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2859,7 +2797,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "postcss-selector-parser": "^7.0.0" }, @@ -2874,7 +2811,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2897,7 +2833,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2924,7 +2859,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", @@ -2951,7 +2885,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/color-helpers": "^5.0.2", "postcss-value-parser": "^4.2.0" @@ -2977,7 +2910,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", @@ -3004,7 +2936,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -3026,7 +2957,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -3046,14 +2976,12 @@ "node_modules/@docsearch/css": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz", - "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==", - "license": "MIT" + "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==" }, "node_modules/@docsearch/react": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz", "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==", - "license": "MIT", "dependencies": { "@algolia/autocomplete-core": "1.17.9", "@algolia/autocomplete-preset-algolia": "1.17.9", @@ -3082,10 +3010,9 @@ } }, "node_modules/@docusaurus/babel": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.0.tgz", - "integrity": "sha512-9EJwSgS6TgB8IzGk1L8XddJLhZod8fXT4ULYMx6SKqyCBqCFpVCEjR/hNXXhnmtVM2irDuzYoVLGWv7srG/VOA==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.1.tgz", + "integrity": "sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw==", "dependencies": { "@babel/core": "^7.25.9", "@babel/generator": "^7.25.9", @@ -3097,8 +3024,8 @@ "@babel/runtime": "^7.25.9", "@babel/runtime-corejs3": "^7.25.9", "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.8.0", - "@docusaurus/utils": "3.8.0", + "@docusaurus/logger": "3.8.1", + "@docusaurus/utils": "3.8.1", "babel-plugin-dynamic-import-node": "^2.3.3", "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -3108,30 +3035,29 @@ } }, "node_modules/@docusaurus/bundler": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.0.tgz", - "integrity": "sha512-Rq4Z/MSeAHjVzBLirLeMcjLIAQy92pF1OI+2rmt18fSlMARfTGLWRE8Vb+ljQPTOSfJxwDYSzsK6i7XloD2rNA==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.1.tgz", + "integrity": "sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA==", "dependencies": { "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.8.0", - "@docusaurus/cssnano-preset": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", + "@docusaurus/babel": "3.8.1", + "@docusaurus/cssnano-preset": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", "babel-loader": "^9.2.1", - "clean-css": "^5.3.2", + "clean-css": "^5.3.3", "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", + "css-loader": "^6.11.0", "css-minimizer-webpack-plugin": "^5.0.1", "cssnano": "^6.1.2", "file-loader": "^6.2.0", "html-minifier-terser": "^7.2.0", - "mini-css-extract-plugin": "^2.9.1", + "mini-css-extract-plugin": "^2.9.2", "null-loader": "^4.0.1", - "postcss": "^8.4.26", - "postcss-loader": "^7.3.3", - "postcss-preset-env": "^10.1.0", + "postcss": "^8.5.4", + "postcss-loader": "^7.3.4", + "postcss-preset-env": "^10.2.1", "terser-webpack-plugin": "^5.3.9", "tslib": "^2.6.0", "url-loader": "^4.1.1", @@ -3151,18 +3077,17 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.0.tgz", - "integrity": "sha512-c7u6zFELmSGPEP9WSubhVDjgnpiHgDqMh1qVdCB7rTflh4Jx0msTYmMiO91Ez0KtHj4sIsDsASnjwfJ2IZp3Vw==", - "license": "MIT", - "dependencies": { - "@docusaurus/babel": "3.8.0", - "@docusaurus/bundler": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.1.tgz", + "integrity": "sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA==", + "dependencies": { + "@docusaurus/babel": "3.8.1", + "@docusaurus/bundler": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/mdx-loader": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", @@ -3212,13 +3137,12 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.0.tgz", - "integrity": "sha512-UJ4hAS2T0R4WNy+phwVff2Q0L5+RXW9cwlH6AEphHR5qw3m/yacfWcSK7ort2pMMbDn8uGrD38BTm4oLkuuNoQ==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz", + "integrity": "sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug==", "dependencies": { "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.4.38", + "postcss": "^8.5.4", "postcss-sort-media-queries": "^5.2.0", "tslib": "^2.6.0" }, @@ -3227,10 +3151,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.0.tgz", - "integrity": "sha512-7eEMaFIam5Q+v8XwGqF/n0ZoCld4hV4eCCgQkfcN9Mq5inoZa6PHHW9Wu6lmgzoK5Kx3keEeABcO2SxwraoPDQ==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.1.tgz", + "integrity": "sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.6.0" @@ -3240,14 +3163,13 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.0.tgz", - "integrity": "sha512-mDPSzssRnpjSdCGuv7z2EIAnPS1MHuZGTaRLwPn4oQwszu4afjWZ/60sfKjTnjBjI8Vl4OgJl2vMmfmiNDX4Ng==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz", + "integrity": "sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w==", "dependencies": { - "@docusaurus/logger": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "@docusaurus/logger": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", @@ -3279,12 +3201,11 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.0.tgz", - "integrity": "sha512-/uMb4Ipt5J/QnD13MpnoC/A4EYAe6DKNWqTWLlGrqsPJwJv73vSwkA25xnYunwfqWk0FlUQfGv/Swdh5eCCg7g==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz", + "integrity": "sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg==", "dependencies": { - "@docusaurus/types": "3.8.0", + "@docusaurus/types": "3.8.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -3298,16 +3219,15 @@ } }, "node_modules/@docusaurus/plugin-client-redirects": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.8.0.tgz", - "integrity": "sha512-J8f5qzAlO61BnG1I91+N5WH1b/lPWqn6ifTxf/Bluz9JVe1bhFNSl0yW03p+Ff3AFOINDy2ofX70al9nOnOLyw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.8.1.tgz", + "integrity": "sha512-F+86R7PBn6VNgy/Ux8w3ZRypJGJEzksbejQKlbTC8u6uhBUhfdXWkDp6qdOisIoW0buY5nLqucvZt1zNJzhJhA==", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "eta": "^2.2.0", "fs-extra": "^11.1.1", "lodash": "^4.17.21", @@ -3322,19 +3242,18 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.0.tgz", - "integrity": "sha512-0SlOTd9R55WEr1GgIXu+hhTT0hzARYx3zIScA5IzpdekZQesI/hKEa5LPHBd415fLkWMjdD59TaW/3qQKpJ0Lg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.1.tgz", + "integrity": "sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw==", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/mdx-loader": "3.8.1", + "@docusaurus/theme-common": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "cheerio": "1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^11.1.1", @@ -3356,20 +3275,19 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.0.tgz", - "integrity": "sha512-fRDMFLbUN6eVRXcjP8s3Y7HpAt9pzPYh1F/7KKXOCxvJhjjCtbon4VJW0WndEPInVz4t8QUXn5QZkU2tGVCE2g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/module-type-aliases": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.1.tgz", + "integrity": "sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA==", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/mdx-loader": "3.8.1", + "@docusaurus/module-type-aliases": "3.8.1", + "@docusaurus/theme-common": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", @@ -3389,16 +3307,15 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.0.tgz", - "integrity": "sha512-39EDx2y1GA0Pxfion5tQZLNJxL4gq6susd1xzetVBjVIQtwpCdyloOfQBAgX0FylqQxfJrYqL0DIUuq7rd7uBw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.1.tgz", + "integrity": "sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w==", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/mdx-loader": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" @@ -3412,14 +3329,14 @@ } }, "node_modules/@docusaurus/plugin-css-cascade-layers": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.0.tgz", - "integrity": "sha512-/VBTNymPIxQB8oA3ZQ4GFFRYdH4ZxDRRBECxyjRyv486mfUPXfcdk+im4S5mKWa6EK2JzBz95IH/Wu0qQgJ5yQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.1.tgz", + "integrity": "sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw==", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "tslib": "^2.6.0" }, "engines": { @@ -3427,14 +3344,13 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.0.tgz", - "integrity": "sha512-teonJvJsDB9o2OnG6ifbhblg/PXzZvpUKHFgD8dOL1UJ58u0lk8o0ZOkvaYEBa9nDgqzoWrRk9w+e3qaG2mOhQ==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.1.tgz", + "integrity": "sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw==", "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", "fs-extra": "^11.1.1", "react-json-view-lite": "^2.3.0", "tslib": "^2.6.0" @@ -3448,14 +3364,13 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.0.tgz", - "integrity": "sha512-aKKa7Q8+3xRSRESipNvlFgNp3FNPELKhuo48Cg/svQbGNwidSHbZT03JqbW4cBaQnyyVchO1ttk+kJ5VC9Gx0w==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.1.tgz", + "integrity": "sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q==", "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "tslib": "^2.6.0" }, "engines": { @@ -3467,14 +3382,13 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.0.tgz", - "integrity": "sha512-ugQYMGF4BjbAW/JIBtVcp+9eZEgT9HRdvdcDudl5rywNPBA0lct+lXMG3r17s02rrhInMpjMahN3Yc9Cb3H5/g==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.1.tgz", + "integrity": "sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg==", "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" }, @@ -3487,14 +3401,13 @@ } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.0.tgz", - "integrity": "sha512-9juRWxbwZD3SV02Jd9QB6yeN7eu+7T4zB0bvJLcVQwi+am51wAxn2CwbdL0YCCX+9OfiXbADE8D8Q65Hbopu/w==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.1.tgz", + "integrity": "sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw==", "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "tslib": "^2.6.0" }, "engines": { @@ -3506,17 +3419,16 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.0.tgz", - "integrity": "sha512-fGpOIyJvNiuAb90nSJ2Gfy/hUOaDu6826e5w5UxPmbpCIc7KlBHNAZ5g4L4ZuHhc4hdfq4mzVBsQSnne+8Ze1g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.1.tgz", + "integrity": "sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw==", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" @@ -3530,15 +3442,14 @@ } }, "node_modules/@docusaurus/plugin-svgr": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.0.tgz", - "integrity": "sha512-kEDyry+4OMz6BWLG/lEqrNsL/w818bywK70N1gytViw4m9iAmoxCUT7Ri9Dgs7xUdzCHJ3OujolEmD88Wy44OA==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.1.tgz", + "integrity": "sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw==", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "@svgr/core": "8.1.0", "@svgr/webpack": "^8.1.0", "tslib": "^2.6.0", @@ -3553,26 +3464,25 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.0.tgz", - "integrity": "sha512-qOu6tQDOWv+rpTlKu+eJATCJVGnABpRCPuqf7LbEaQ1mNY//N/P8cHQwkpAU+aweQfarcZ0XfwCqRHJfjeSV/g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/plugin-content-blog": "3.8.0", - "@docusaurus/plugin-content-docs": "3.8.0", - "@docusaurus/plugin-content-pages": "3.8.0", - "@docusaurus/plugin-css-cascade-layers": "3.8.0", - "@docusaurus/plugin-debug": "3.8.0", - "@docusaurus/plugin-google-analytics": "3.8.0", - "@docusaurus/plugin-google-gtag": "3.8.0", - "@docusaurus/plugin-google-tag-manager": "3.8.0", - "@docusaurus/plugin-sitemap": "3.8.0", - "@docusaurus/plugin-svgr": "3.8.0", - "@docusaurus/theme-classic": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/theme-search-algolia": "3.8.0", - "@docusaurus/types": "3.8.0" + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.1.tgz", + "integrity": "sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ==", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/plugin-content-blog": "3.8.1", + "@docusaurus/plugin-content-docs": "3.8.1", + "@docusaurus/plugin-content-pages": "3.8.1", + "@docusaurus/plugin-css-cascade-layers": "3.8.1", + "@docusaurus/plugin-debug": "3.8.1", + "@docusaurus/plugin-google-analytics": "3.8.1", + "@docusaurus/plugin-google-gtag": "3.8.1", + "@docusaurus/plugin-google-tag-manager": "3.8.1", + "@docusaurus/plugin-sitemap": "3.8.1", + "@docusaurus/plugin-svgr": "3.8.1", + "@docusaurus/theme-classic": "3.8.1", + "@docusaurus/theme-common": "3.8.1", + "@docusaurus/theme-search-algolia": "3.8.1", + "@docusaurus/types": "3.8.1" }, "engines": { "node": ">=18.0" @@ -3583,31 +3493,30 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.0.tgz", - "integrity": "sha512-nQWFiD5ZjoT76OaELt2n33P3WVuuCz8Dt5KFRP2fCBo2r9JCLsp2GJjZpnaG24LZ5/arRjv4VqWKgpK0/YLt7g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/module-type-aliases": "3.8.0", - "@docusaurus/plugin-content-blog": "3.8.0", - "@docusaurus/plugin-content-docs": "3.8.0", - "@docusaurus/plugin-content-pages": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/theme-translations": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.1.tgz", + "integrity": "sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw==", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/mdx-loader": "3.8.1", + "@docusaurus/module-type-aliases": "3.8.1", + "@docusaurus/plugin-content-blog": "3.8.1", + "@docusaurus/plugin-content-docs": "3.8.1", + "@docusaurus/plugin-content-pages": "3.8.1", + "@docusaurus/theme-common": "3.8.1", + "@docusaurus/theme-translations": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", "infima": "0.2.0-alpha.45", "lodash": "^4.17.21", "nprogress": "^0.2.0", - "postcss": "^8.4.26", + "postcss": "^8.5.4", "prism-react-renderer": "^2.3.0", "prismjs": "^1.29.0", "react-router-dom": "^5.3.4", @@ -3624,15 +3533,14 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.0.tgz", - "integrity": "sha512-YqV2vAWpXGLA+A3PMLrOMtqgTHJLDcT+1Caa6RF7N4/IWgrevy5diY8oIHFkXR/eybjcrFFjUPrHif8gSGs3Tw==", - "license": "MIT", - "dependencies": { - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/module-type-aliases": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.1.tgz", + "integrity": "sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw==", + "dependencies": { + "@docusaurus/mdx-loader": "3.8.1", + "@docusaurus/module-type-aliases": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -3652,19 +3560,18 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.0.tgz", - "integrity": "sha512-GBZ5UOcPgiu6nUw153+0+PNWvFKweSnvKIL6Rp04H9olKb475jfKjAwCCtju5D2xs5qXHvCMvzWOg5o9f6DtuQ==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz", + "integrity": "sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ==", "dependencies": { "@docsearch/react": "^3.9.0", - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/plugin-content-docs": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/theme-translations": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/plugin-content-docs": "3.8.1", + "@docusaurus/theme-common": "3.8.1", + "@docusaurus/theme-translations": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "algoliasearch": "^5.17.1", "algoliasearch-helper": "^3.22.6", "clsx": "^2.0.0", @@ -3683,10 +3590,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.0.tgz", - "integrity": "sha512-1DTy/snHicgkCkryWq54fZvsAglTdjTx4qjOXgqnXJ+DIty1B+aPQrAVUu8LiM+6BiILfmNxYsxhKTj+BS3PZg==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.1.tgz", + "integrity": "sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g==", "dependencies": { "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -3696,10 +3602,9 @@ } }, "node_modules/@docusaurus/types": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.0.tgz", - "integrity": "sha512-RDEClpwNxZq02c+JlaKLWoS13qwWhjcNsi2wG1UpzmEnuti/z1Wx4SGpqbUqRPNSd8QWWePR8Cb7DvG0VN/TtA==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "dependencies": { "@mdx-js/mdx": "^3.0.0", "@types/history": "^4.7.11", @@ -3731,14 +3636,13 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.0.tgz", - "integrity": "sha512-2wvtG28ALCN/A1WCSLxPASFBFzXCnP0YKCAFIPcvEb6imNu1wg7ni/Svcp71b3Z2FaOFFIv4Hq+j4gD7gA0yfQ==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.1.tgz", + "integrity": "sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ==", "dependencies": { - "@docusaurus/logger": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-common": "3.8.0", + "@docusaurus/logger": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils-common": "3.8.1", "escape-string-regexp": "^4.0.0", "execa": "5.1.1", "file-loader": "^6.2.0", @@ -3763,12 +3667,11 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.0.tgz", - "integrity": "sha512-3TGF+wVTGgQ3pAc9+5jVchES4uXUAhAt9pwv7uws4mVOxL4alvU3ue/EZ+R4XuGk94pDy7CNXjRXpPjlfZXQfw==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.1.tgz", + "integrity": "sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg==", "dependencies": { - "@docusaurus/types": "3.8.0", + "@docusaurus/types": "3.8.1", "tslib": "^2.6.0" }, "engines": { @@ -3776,14 +3679,13 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.0.tgz", - "integrity": "sha512-MrnEbkigr54HkdFeg8e4FKc4EF+E9dlVwsY3XQZsNkbv3MKZnbHQ5LsNJDIKDROFe8PBf5C4qCAg5TPBpsjrjg==", - "license": "MIT", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz", + "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==", "dependencies": { - "@docusaurus/logger": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", + "@docusaurus/logger": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", @@ -3811,7 +3713,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -3823,7 +3724,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -4044,8 +3944,7 @@ "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "license": "MIT" + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", @@ -4074,7 +3973,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "license": "MIT", "engines": { "node": ">=14" }, @@ -4090,7 +3988,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "license": "MIT", "engines": { "node": ">=14" }, @@ -4106,7 +4003,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "license": "MIT", "engines": { "node": ">=14" }, @@ -4122,7 +4018,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "license": "MIT", "engines": { "node": ">=14" }, @@ -4138,7 +4033,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "license": "MIT", "engines": { "node": ">=14" }, @@ -4154,7 +4048,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "license": "MIT", "engines": { "node": ">=14" }, @@ -4170,7 +4063,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "license": "MIT", "engines": { "node": ">=14" }, @@ -4186,7 +4078,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -4202,7 +4093,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "license": "MIT", "dependencies": { "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", @@ -4228,7 +4118,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -4248,7 +4137,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "license": "MIT", "dependencies": { "@babel/types": "^7.21.3", "entities": "^4.4.0" @@ -4265,7 +4153,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -4287,7 +4174,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", - "license": "MIT", "dependencies": { "cosmiconfig": "^8.1.3", "deepmerge": "^4.3.1", @@ -4308,7 +4194,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", - "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", "@babel/plugin-transform-react-constant-elements": "^7.21.3", @@ -4471,8 +4356,7 @@ "node_modules/@types/gtag.js": { "version": "0.0.12", "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", - "license": "MIT" + "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==" }, "node_modules/@types/hast": { "version": "3.0.4", @@ -4517,14 +4401,12 @@ "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -4533,7 +4415,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } @@ -4655,7 +4536,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4717,7 +4597,6 @@ "version": "17.0.33", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -4725,8 +4604,7 @@ "node_modules/@types/yargs-parser": { "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "license": "MIT" + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", @@ -5016,34 +4894,32 @@ } }, "node_modules/algoliasearch": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.25.0.tgz", - "integrity": "sha512-n73BVorL4HIwKlfJKb4SEzAYkR3Buwfwbh+MYxg2mloFph2fFGV58E90QTzdbfzWrLn4HE5Czx/WTjI8fcHaMg==", - "license": "MIT", - "dependencies": { - "@algolia/client-abtesting": "5.25.0", - "@algolia/client-analytics": "5.25.0", - "@algolia/client-common": "5.25.0", - "@algolia/client-insights": "5.25.0", - "@algolia/client-personalization": "5.25.0", - "@algolia/client-query-suggestions": "5.25.0", - "@algolia/client-search": "5.25.0", - "@algolia/ingestion": "1.25.0", - "@algolia/monitoring": "1.25.0", - "@algolia/recommend": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.30.0.tgz", + "integrity": "sha512-ILSdPX4je0n5WUKD34TMe57/eqiXUzCIjAsdtLQYhomqOjTtFUg1s6dE7kUegc4Mc43Xr7IXYlMutU9HPiYfdw==", + "dependencies": { + "@algolia/client-abtesting": "5.30.0", + "@algolia/client-analytics": "5.30.0", + "@algolia/client-common": "5.30.0", + "@algolia/client-insights": "5.30.0", + "@algolia/client-personalization": "5.30.0", + "@algolia/client-query-suggestions": "5.30.0", + "@algolia/client-search": "5.30.0", + "@algolia/ingestion": "1.30.0", + "@algolia/monitoring": "1.30.0", + "@algolia/recommend": "5.30.0", + "@algolia/requester-browser-xhr": "5.30.0", + "@algolia/requester-fetch": "5.30.0", + "@algolia/requester-node-http": "5.30.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.25.0.tgz", - "integrity": "sha512-vQoK43U6HXA9/euCqLjvyNdM4G2Fiu/VFp4ae0Gau9sZeIKBPvUPnXfLYAe65Bg7PFuw03coeu5K6lTPSXRObw==", - "license": "MIT", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz", + "integrity": "sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw==", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -5084,7 +4960,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -5099,7 +4974,6 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -5158,8 +5032,7 @@ "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "2.0.1", @@ -5206,7 +5079,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", @@ -5229,7 +5101,6 @@ "version": "9.2.1", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "license": "MIT", "dependencies": { "find-cache-dir": "^4.0.0", "schema-utils": "^4.0.0" @@ -5246,7 +5117,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "license": "MIT", "dependencies": { "object.assign": "^4.1.0" } @@ -5517,7 +5387,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -5593,7 +5462,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "license": "MIT", "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -5694,7 +5562,6 @@ "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -5715,7 +5582,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -5901,8 +5767,7 @@ "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "license": "MIT" + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/colorette": { "version": "2.0.20", @@ -5938,8 +5803,7 @@ "node_modules/common-path-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "license": "ISC" + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" }, "node_modules/compressible": { "version": "2.0.18", @@ -6051,7 +5915,6 @@ "version": "3.4.2", "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "license": "MIT", "engines": { "node": "^14.18.0 || >=16.10.0" } @@ -6098,7 +5961,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -6110,7 +5972,6 @@ "version": "11.0.0", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "license": "MIT", "dependencies": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", @@ -6134,7 +5995,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -6146,7 +6006,6 @@ "version": "13.2.2", "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "license": "MIT", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", @@ -6165,7 +6024,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -6198,11 +6056,10 @@ } }, "node_modules/core-js-pure": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.42.0.tgz", - "integrity": "sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==", + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.43.0.tgz", + "integrity": "sha512-i/AgxU2+A+BbJdMxh3v7/vxi2SbFqxiFmg6VsDwYB4jkucrd1BZNA9a9gphC0fYMG5IBSgQcbQnk865VCLe7xA==", "hasInstallScript": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -6294,7 +6151,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "postcss-selector-parser": "^7.0.0" }, @@ -6309,7 +6165,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -6322,7 +6177,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "license": "ISC", "engines": { "node": "^14 || ^16 || >=18" }, @@ -6344,7 +6198,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0", @@ -6371,7 +6224,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -6383,7 +6235,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -6396,7 +6247,6 @@ "version": "6.11.0", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", @@ -6431,7 +6281,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "cssnano": "^6.0.1", @@ -6485,7 +6334,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -6532,9 +6380,9 @@ } }, "node_modules/cssdb": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.0.tgz", - "integrity": "sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.1.tgz", + "integrity": "sha512-XnDRQMXucLueX92yDe0LPKupXetWoFOgawr4O4X41l5TltgK2NVbJJVDnnOywDYfW1sTJ28AcXGKOqdRKwCcmQ==", "funding": [ { "type": "opencollective", @@ -6544,14 +6392,12 @@ "type": "github", "url": "https://github.com/sponsors/csstools" } - ], - "license": "MIT-0" + ] }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -6563,7 +6409,6 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", - "license": "MIT", "dependencies": { "cssnano-preset-default": "^6.1.2", "lilconfig": "^3.1.1" @@ -6583,7 +6428,6 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", - "license": "MIT", "dependencies": { "autoprefixer": "^10.4.19", "browserslist": "^4.23.0", @@ -6604,7 +6448,6 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", - "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "css-declaration-sorter": "^7.2.0", @@ -6648,7 +6491,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -6765,7 +6607,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6795,7 +6636,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -6821,7 +6661,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -7592,7 +7431,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "license": "MIT", "dependencies": { "xml-js": "^1.6.11" }, @@ -7604,7 +7442,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -7619,7 +7456,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -7736,7 +7572,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "license": "MIT", "dependencies": { "common-path-prefix": "^3.0.0", "pkg-dir": "^7.0.0" @@ -7752,7 +7587,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -7822,7 +7656,6 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "license": "MIT", "engines": { "node": "*" }, @@ -8162,7 +7995,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -8501,7 +8333,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", - "license": "MIT", "dependencies": { "camel-case": "^4.1.2", "clean-css": "~5.3.2", @@ -8522,7 +8353,6 @@ "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", "engines": { "node": ">=14" } @@ -8622,7 +8452,6 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -8752,7 +8581,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -8826,7 +8654,6 @@ "version": "0.2.0-alpha.45", "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", - "license": "MIT", "engines": { "node": ">=12" } @@ -9164,7 +8991,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -9181,7 +9007,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -9196,7 +9021,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9356,7 +9180,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "license": "MIT", "engines": { "node": ">=14" }, @@ -9394,7 +9217,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "license": "MIT", "dependencies": { "p-locate": "^6.0.0" }, @@ -9418,14 +9240,12 @@ "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "license": "MIT" + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "license": "MIT" + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, "node_modules/longest-streak": { "version": "3.1.0", @@ -11726,7 +11546,6 @@ "version": "2.9.2", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", - "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -11796,9 +11615,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -11878,7 +11697,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11910,8 +11728,7 @@ "node_modules/nprogress": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", - "license": "MIT" + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" }, "node_modules/nth-check": { "version": "2.1.1", @@ -11928,7 +11745,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" @@ -11948,7 +11764,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -11964,7 +11779,6 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } @@ -11972,14 +11786,12 @@ "node_modules/null-loader/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/null-loader/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -12017,7 +11829,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -12026,7 +11837,6 @@ "version": "4.1.7", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -12140,7 +11950,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -12155,7 +11964,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -12305,8 +12113,7 @@ "node_modules/parse-numeric-range": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", - "license": "ISC" + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, "node_modules/parse5": { "version": "7.1.2", @@ -12323,7 +12130,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "license": "MIT", "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" @@ -12355,7 +12161,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -12435,7 +12240,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "license": "MIT", "dependencies": { "find-up": "^6.3.0" }, @@ -12447,9 +12251,9 @@ } }, "node_modules/postcss": { - "version": "8.4.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", - "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "funding": [ { "type": "opencollective", @@ -12465,9 +12269,9 @@ } ], "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -12487,7 +12291,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "dependencies": { "postcss-selector-parser": "^7.0.0" }, @@ -12502,7 +12305,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -12515,7 +12317,6 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", - "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0" @@ -12531,7 +12332,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -12556,7 +12356,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-color-parser": "^3.0.10", "@csstools/css-parser-algorithms": "^3.0.5", @@ -12585,7 +12384,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" @@ -12611,7 +12409,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" @@ -12627,7 +12424,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", - "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", @@ -12645,7 +12441,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", - "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" @@ -12671,7 +12466,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "dependencies": { "@csstools/cascade-layer-name-parser": "^2.0.5", "@csstools/css-parser-algorithms": "^3.0.5", @@ -12686,9 +12480,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.5.tgz", - "integrity": "sha512-UWf/vhMapZatv+zOuqlfLmYXeOhhHLh8U8HAKGI2VJ00xLRYoAJh4xv8iX6FB6+TLXeDnm0DBLMi00E0hodbQw==", + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", + "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", "funding": [ { "type": "github", @@ -12699,7 +12493,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "dependencies": { "@csstools/cascade-layer-name-parser": "^2.0.5", "@csstools/css-parser-algorithms": "^3.0.5", @@ -12728,7 +12521,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "dependencies": { "@csstools/cascade-layer-name-parser": "^2.0.5", "@csstools/css-parser-algorithms": "^3.0.5", @@ -12746,7 +12538,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -12769,7 +12560,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "postcss-selector-parser": "^7.0.0" }, @@ -12784,7 +12574,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -12797,7 +12586,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", - "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -12809,7 +12597,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -12821,7 +12608,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", - "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -12833,7 +12619,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", - "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -12845,7 +12630,6 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", - "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" }, @@ -12870,7 +12654,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0", @@ -12897,7 +12680,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "postcss-selector-parser": "^7.0.0" }, @@ -12912,7 +12694,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -12935,7 +12716,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "postcss-selector-parser": "^7.0.0" }, @@ -12950,7 +12730,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -12963,7 +12742,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "license": "MIT", "peerDependencies": { "postcss": "^8.1.0" } @@ -12982,7 +12760,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -13004,7 +12781,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" @@ -13030,7 +12806,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/css-color-parser": "^3.0.10", "@csstools/css-parser-algorithms": "^3.0.5", @@ -13049,7 +12824,6 @@ "version": "7.3.4", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", - "license": "MIT", "dependencies": { "cosmiconfig": "^8.3.5", "jiti": "^1.20.0", @@ -13081,7 +12855,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13096,7 +12869,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", - "license": "MIT", "dependencies": { "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" @@ -13112,7 +12884,6 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^6.1.1" @@ -13128,7 +12899,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", - "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", @@ -13146,7 +12916,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13161,7 +12930,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", - "license": "MIT", "dependencies": { "colord": "^2.9.3", "cssnano-utils": "^4.0.2", @@ -13178,7 +12946,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", - "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "cssnano-utils": "^4.0.2", @@ -13195,7 +12962,6 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", - "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" }, @@ -13210,7 +12976,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -13222,7 +12987,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", - "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^7.0.0", @@ -13239,7 +13003,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -13252,7 +13015,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", - "license": "ISC", "dependencies": { "postcss-selector-parser": "^7.0.0" }, @@ -13267,7 +13029,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -13280,7 +13041,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -13292,9 +13052,9 @@ } }, "node_modules/postcss-nesting": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", - "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", "funding": [ { "type": "github", @@ -13305,9 +13065,8 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { - "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-resolve-nested": "^3.1.0", "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, @@ -13319,9 +13078,9 @@ } }, "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", - "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", + "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", "funding": [ { "type": "github", @@ -13332,7 +13091,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -13354,7 +13112,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": ">=18" }, @@ -13366,7 +13123,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -13379,7 +13135,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", - "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -13391,7 +13146,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13406,7 +13160,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13421,7 +13174,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13436,7 +13188,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13451,7 +13202,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13466,7 +13216,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" @@ -13482,7 +13231,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13497,7 +13245,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13522,7 +13269,6 @@ "url": "https://liberapay.com/mrcgrtz" } ], - "license": "MIT", "engines": { "node": ">=18" }, @@ -13534,7 +13280,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", - "license": "MIT", "dependencies": { "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" @@ -13560,7 +13305,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13575,7 +13319,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "license": "MIT", "peerDependencies": { "postcss": "^8" } @@ -13594,7 +13337,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13606,9 +13348,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.0.tgz", - "integrity": "sha512-cl13sPBbSqo1Q7Ryb19oT5NZO5IHFolRbIMdgDq4f9w1MHYiL6uZS7uSsjXJ1KzRIcX5BMjEeyxmAevVXENa3Q==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.4.tgz", + "integrity": "sha512-q+lXgqmTMdB0Ty+EQ31SuodhdfZetUlwCA/F0zRcd/XdxjzI+Rl2JhZNz5US2n/7t9ePsvuhCnEN4Bmu86zXlA==", "funding": [ { "type": "github", @@ -13619,9 +13361,8 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { - "@csstools/postcss-cascade-layers": "^5.0.1", + "@csstools/postcss-cascade-layers": "^5.0.2", "@csstools/postcss-color-function": "^4.0.10", "@csstools/postcss-color-mix-function": "^3.0.10", "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.0", @@ -13633,7 +13374,7 @@ "@csstools/postcss-hwb-function": "^4.0.10", "@csstools/postcss-ic-unit": "^4.0.2", "@csstools/postcss-initial": "^2.0.1", - "@csstools/postcss-is-pseudo-class": "^5.0.1", + "@csstools/postcss-is-pseudo-class": "^5.0.3", "@csstools/postcss-light-dark-function": "^2.0.9", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", @@ -13655,7 +13396,7 @@ "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", "autoprefixer": "^10.4.21", - "browserslist": "^4.24.5", + "browserslist": "^4.25.0", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.2", "css-prefers-color-scheme": "^10.0.0", @@ -13666,7 +13407,7 @@ "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", "postcss-custom-media": "^11.0.6", - "postcss-custom-properties": "^14.0.5", + "postcss-custom-properties": "^14.0.6", "postcss-custom-selectors": "^8.0.5", "postcss-dir-pseudo-class": "^9.0.1", "postcss-double-position-gradients": "^6.0.2", @@ -13677,7 +13418,7 @@ "postcss-image-set-function": "^7.0.0", "postcss-lab-function": "^7.0.10", "postcss-logical": "^8.1.0", - "postcss-nesting": "^13.0.1", + "postcss-nesting": "^13.0.2", "postcss-opacity-percentage": "^3.0.0", "postcss-overflow-shorthand": "^6.0.0", "postcss-page-break": "^3.0.4", @@ -13707,7 +13448,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "postcss-selector-parser": "^7.0.0" }, @@ -13722,7 +13462,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -13735,7 +13474,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13750,7 +13488,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", - "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0" @@ -13766,7 +13503,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13781,7 +13517,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "license": "MIT", "peerDependencies": { "postcss": "^8.0.3" } @@ -13800,7 +13535,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "dependencies": { "postcss-selector-parser": "^7.0.0" }, @@ -13815,7 +13549,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -13828,7 +13561,6 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -13841,7 +13573,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", - "license": "MIT", "dependencies": { "sort-css-media-queries": "2.2.0" }, @@ -13856,7 +13587,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^3.2.0" @@ -13872,7 +13602,6 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", - "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" }, @@ -13886,14 +13615,12 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/postcss-zindex": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", - "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -13915,7 +13642,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "license": "MIT", "engines": { "node": ">=4" } @@ -13936,7 +13662,6 @@ "version": "1.30.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "license": "MIT", "engines": { "node": ">=6" } @@ -14186,7 +13911,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.4.1.tgz", "integrity": "sha512-fwFYknRIBxjbFm0kBDrzgBy1xa5tDg2LyXXBepC5f1b+MY3BUClMCsvanMPn089JbV1Eg3nZcrp0VCuH43aXnA==", - "license": "MIT", "engines": { "node": ">=18" }, @@ -14638,7 +14362,6 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "license": "MIT", "engines": { "node": ">=0.10" } @@ -14754,7 +14477,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", - "license": "MIT", "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0", @@ -14818,8 +14540,7 @@ "node_modules/sax": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "node_modules/scheduler": { "version": "0.26.0", @@ -14830,8 +14551,7 @@ "node_modules/schema-dts": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", - "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==", - "license": "Apache-2.0" + "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==" }, "node_modules/schema-utils": { "version": "4.3.0", @@ -14856,7 +14576,6 @@ "version": "2.17.3", "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "license": "MIT", "peer": true }, "node_modules/section-matter": { @@ -15106,7 +14825,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -15276,7 +14994,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", - "license": "MIT", "dependencies": { "@types/node": "^17.0.5", "@types/sax": "^1.2.1", @@ -15294,8 +15011,7 @@ "node_modules/sitemap/node_modules/@types/node": { "version": "17.0.45", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "license": "MIT" + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" }, "node_modules/skin-tone": { "version": "2.0.0", @@ -15321,7 +15037,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -15342,7 +15057,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", - "license": "MIT", "engines": { "node": ">= 6.3.0" } @@ -15356,9 +15070,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -15428,7 +15142,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -15448,8 +15161,7 @@ "node_modules/std-env": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", - "license": "MIT" + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==" }, "node_modules/string_decoder": { "version": "1.3.0", @@ -15564,7 +15276,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", "engines": { "node": ">=8" }, @@ -15584,7 +15295,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", - "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-selector-parser": "^6.0.16" @@ -15621,8 +15331,7 @@ "node_modules/svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "license": "MIT" + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, "node_modules/svgo": { "version": "3.3.2", @@ -16762,7 +16471,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", - "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", @@ -16783,14 +16491,12 @@ "node_modules/webpackbar/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/webpackbar/node_modules/markdown-table": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "license": "MIT", "dependencies": { "repeat-string": "^1.0.0" }, @@ -16803,7 +16509,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -16817,7 +16522,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -16998,7 +16702,6 @@ "version": "1.6.11", "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "license": "MIT", "dependencies": { "sax": "^1.2.4" }, @@ -17015,7 +16718,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "license": "MIT", "engines": { "node": ">=12.20" }, diff --git a/docs/package.json b/docs/package.json index 44cf3b0b2..7ea5b1fca 100644 --- a/docs/package.json +++ b/docs/package.json @@ -14,9 +14,9 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "^3.8.0", - "@docusaurus/plugin-client-redirects": "^3.8.0", - "@docusaurus/preset-classic": "^3.8.0", + "@docusaurus/core": "^3.8.1", + "@docusaurus/plugin-client-redirects": "^3.8.1", + "@docusaurus/preset-classic": "^3.8.1", "@mdx-js/react": "^3.1.0", "clsx": "^2.0.0", "docusaurus-theme-github-codeblock": "^2.0.2", From 7b44826eac22b495f4d2aaafc70c62574eadad31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Jul 2025 19:30:57 +0000 Subject: [PATCH 10/72] chore(deps): bump brace-expansion from 1.1.11 to 1.1.12 in /docs (#1706) --- docs/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 33368abfc..51d9cf44b 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -5291,9 +5291,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" From 5e5b89fec684cfa7be3628fe7dcec0aff5f3b0bf Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 9 Jul 2025 13:56:32 -0700 Subject: [PATCH 11/72] chore(release): version 3.36.0 (#1707) --- .../slack_sdk/aiohttp_version_checker.html | 4 +- .../slack_sdk/audit_logs/async_client.html | 4 +- .../api-docs/slack_sdk/audit_logs/index.html | 4 +- .../slack_sdk/audit_logs/v1/async_client.html | 4 +- .../slack_sdk/audit_logs/v1/client.html | 4 +- .../slack_sdk/audit_logs/v1/index.html | 4 +- .../audit_logs/v1/internal_utils.html | 4 +- .../slack_sdk/audit_logs/v1/logs.html | 4 +- .../slack_sdk/audit_logs/v1/response.html | 4 +- .../api-docs/slack_sdk/errors/index.html | 4 +- .../slack_sdk/http_retry/async_handler.html | 4 +- .../http_retry/builtin_async_handlers.html | 4 +- .../http_retry/builtin_handlers.html | 4 +- .../builtin_interval_calculators.html | 4 +- .../slack_sdk/http_retry/handler.html | 4 +- .../api-docs/slack_sdk/http_retry/index.html | 4 +- .../http_retry/interval_calculator.html | 4 +- .../api-docs/slack_sdk/http_retry/jitter.html | 4 +- .../slack_sdk/http_retry/request.html | 4 +- .../slack_sdk/http_retry/response.html | 4 +- .../api-docs/slack_sdk/http_retry/state.html | 4 +- docs/static/api-docs/slack_sdk/index.html | 148 +++++++++++++++++- .../slack_sdk/models/attachments/index.html | 4 +- .../slack_sdk/models/basic_objects.html | 4 +- .../models/blocks/basic_components.html | 4 +- .../models/blocks/block_elements.html | 4 +- .../slack_sdk/models/blocks/blocks.html | 4 +- .../slack_sdk/models/blocks/index.html | 4 +- .../api-docs/slack_sdk/models/dialoags.html | 4 +- .../slack_sdk/models/dialogs/index.html | 4 +- .../api-docs/slack_sdk/models/index.html | 4 +- .../slack_sdk/models/messages/index.html | 4 +- .../slack_sdk/models/messages/message.html | 4 +- .../slack_sdk/models/metadata/index.html | 4 +- .../slack_sdk/models/views/index.html | 4 +- .../oauth/authorize_url_generator/index.html | 4 +- .../api-docs/slack_sdk/oauth/index.html | 4 +- .../installation_store/amazon_s3/index.html | 4 +- .../async_cacheable_installation_store.html | 4 +- .../async_installation_store.html | 4 +- .../cacheable_installation_store.html | 4 +- .../oauth/installation_store/file/index.html | 6 +- .../oauth/installation_store/index.html | 6 +- .../installation_store.html | 4 +- .../oauth/installation_store/internals.html | 4 +- .../oauth/installation_store/models/bot.html | 4 +- .../installation_store/models/index.html | 4 +- .../models/installation.html | 4 +- .../installation_store/sqlalchemy/index.html | 4 +- .../installation_store/sqlite3/index.html | 4 +- .../redirect_uri_page_renderer/index.html | 4 +- .../oauth/state_store/amazon_s3/index.html | 4 +- .../oauth/state_store/async_state_store.html | 4 +- .../oauth/state_store/file/index.html | 6 +- .../slack_sdk/oauth/state_store/index.html | 6 +- .../oauth/state_store/sqlalchemy/index.html | 4 +- .../oauth/state_store/sqlite3/index.html | 4 +- .../oauth/state_store/state_store.html | 4 +- .../slack_sdk/oauth/state_utils/index.html | 4 +- .../oauth/token_rotation/async_rotator.html | 4 +- .../slack_sdk/oauth/token_rotation/index.html | 4 +- .../oauth/token_rotation/rotator.html | 4 +- .../slack_sdk/proxy_env_variable_loader.html | 4 +- docs/static/api-docs/slack_sdk/rtm/index.html | 4 +- .../api-docs/slack_sdk/rtm/v2/index.html | 4 +- .../api-docs/slack_sdk/rtm_v2/index.html | 4 +- .../api-docs/slack_sdk/scim/async_client.html | 4 +- .../static/api-docs/slack_sdk/scim/index.html | 4 +- .../slack_sdk/scim/v1/async_client.html | 4 +- .../api-docs/slack_sdk/scim/v1/client.html | 4 +- .../slack_sdk/scim/v1/default_arg.html | 4 +- .../api-docs/slack_sdk/scim/v1/group.html | 4 +- .../api-docs/slack_sdk/scim/v1/index.html | 4 +- .../slack_sdk/scim/v1/internal_utils.html | 4 +- .../api-docs/slack_sdk/scim/v1/response.html | 4 +- .../api-docs/slack_sdk/scim/v1/types.html | 4 +- .../api-docs/slack_sdk/scim/v1/user.html | 4 +- .../api-docs/slack_sdk/signature/index.html | 4 +- .../slack_sdk/socket_mode/aiohttp/index.html | 4 +- .../slack_sdk/socket_mode/async_client.html | 4 +- .../socket_mode/async_listeners.html | 4 +- .../slack_sdk/socket_mode/builtin/client.html | 4 +- .../socket_mode/builtin/connection.html | 4 +- .../socket_mode/builtin/frame_header.html | 4 +- .../slack_sdk/socket_mode/builtin/index.html | 4 +- .../socket_mode/builtin/internals.html | 4 +- .../slack_sdk/socket_mode/client.html | 4 +- .../api-docs/slack_sdk/socket_mode/index.html | 4 +- .../socket_mode/interval_runner.html | 4 +- .../slack_sdk/socket_mode/listeners.html | 4 +- .../slack_sdk/socket_mode/logger/index.html | 4 +- .../socket_mode/logger/messages.html | 4 +- .../slack_sdk/socket_mode/request.html | 4 +- .../slack_sdk/socket_mode/response.html | 4 +- .../socket_mode/websocket_client/index.html | 4 +- .../socket_mode/websockets/index.html | 4 +- docs/static/api-docs/slack_sdk/version.html | 4 +- .../slack_sdk/web/async_base_client.html | 4 +- .../api-docs/slack_sdk/web/async_client.html | 148 +++++++++++++++++- .../slack_sdk/web/async_internal_utils.html | 4 +- .../slack_sdk/web/async_slack_response.html | 4 +- .../api-docs/slack_sdk/web/base_client.html | 4 +- .../static/api-docs/slack_sdk/web/client.html | 148 +++++++++++++++++- .../api-docs/slack_sdk/web/deprecation.html | 4 +- .../slack_sdk/web/file_upload_v2_result.html | 4 +- docs/static/api-docs/slack_sdk/web/index.html | 148 +++++++++++++++++- .../slack_sdk/web/internal_utils.html | 4 +- .../slack_sdk/web/legacy_base_client.html | 4 +- .../api-docs/slack_sdk/web/legacy_client.html | 148 +++++++++++++++++- .../slack_sdk/web/legacy_slack_response.html | 4 +- .../slack_sdk/web/slack_response.html | 4 +- .../slack_sdk/webhook/async_client.html | 4 +- .../api-docs/slack_sdk/webhook/client.html | 4 +- .../api-docs/slack_sdk/webhook/index.html | 4 +- .../slack_sdk/webhook/internal_utils.html | 4 +- .../slack_sdk/webhook/webhook_response.html | 4 +- slack_sdk/version.py | 2 +- 117 files changed, 957 insertions(+), 237 deletions(-) diff --git a/docs/static/api-docs/slack_sdk/aiohttp_version_checker.html b/docs/static/api-docs/slack_sdk/aiohttp_version_checker.html index 383f7fac9..9430e24fa 100644 --- a/docs/static/api-docs/slack_sdk/aiohttp_version_checker.html +++ b/docs/static/api-docs/slack_sdk/aiohttp_version_checker.html @@ -3,7 +3,7 @@ - + slack_sdk.aiohttp_version_checker API documentation @@ -94,7 +94,7 @@

Functions

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/async_client.html b/docs/static/api-docs/slack_sdk/audit_logs/async_client.html index 35d9de6a1..7f8d7ff0d 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/async_client.html +++ b/docs/static/api-docs/slack_sdk/audit_logs/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.async_client API documentation @@ -730,7 +730,7 @@

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/index.html b/docs/static/api-docs/slack_sdk/audit_logs/index.html index c7340ff08..55812fc19 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/index.html +++ b/docs/static/api-docs/slack_sdk/audit_logs/index.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs API documentation @@ -822,7 +822,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/async_client.html b/docs/static/api-docs/slack_sdk/audit_logs/v1/async_client.html index cc9952883..866b6309b 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/v1/async_client.html +++ b/docs/static/api-docs/slack_sdk/audit_logs/v1/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.v1.async_client API documentation @@ -732,7 +732,7 @@

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/client.html b/docs/static/api-docs/slack_sdk/audit_logs/v1/client.html index 1f01b14c1..fd84b75bb 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/v1/client.html +++ b/docs/static/api-docs/slack_sdk/audit_logs/v1/client.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.v1.client API documentation @@ -715,7 +715,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/index.html b/docs/static/api-docs/slack_sdk/audit_logs/v1/index.html index e2be84431..2f809b98e 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/v1/index.html +++ b/docs/static/api-docs/slack_sdk/audit_logs/v1/index.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.v1 API documentation @@ -94,7 +94,7 @@

Sub-modules

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/internal_utils.html b/docs/static/api-docs/slack_sdk/audit_logs/v1/internal_utils.html index bc858525f..38dd60513 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/v1/internal_utils.html +++ b/docs/static/api-docs/slack_sdk/audit_logs/v1/internal_utils.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.v1.internal_utils API documentation @@ -60,7 +60,7 @@

Module slack_sdk.audit_logs.v1.internal_utils

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/logs.html b/docs/static/api-docs/slack_sdk/audit_logs/v1/logs.html index 85daab8ab..a36d22e5a 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/v1/logs.html +++ b/docs/static/api-docs/slack_sdk/audit_logs/v1/logs.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.v1.logs API documentation @@ -3382,7 +3382,7 @@

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/response.html b/docs/static/api-docs/slack_sdk/audit_logs/v1/response.html index 9dd403a98..7d5c72853 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/v1/response.html +++ b/docs/static/api-docs/slack_sdk/audit_logs/v1/response.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.v1.response API documentation @@ -157,7 +157,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/errors/index.html b/docs/static/api-docs/slack_sdk/errors/index.html index b358608d1..569a2608e 100644 --- a/docs/static/api-docs/slack_sdk/errors/index.html +++ b/docs/static/api-docs/slack_sdk/errors/index.html @@ -3,7 +3,7 @@ - + slack_sdk.errors API documentation @@ -309,7 +309,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/async_handler.html b/docs/static/api-docs/slack_sdk/http_retry/async_handler.html index 233966d9d..169110894 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/async_handler.html +++ b/docs/static/api-docs/slack_sdk/http_retry/async_handler.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.async_handler API documentation @@ -425,7 +425,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/builtin_async_handlers.html b/docs/static/api-docs/slack_sdk/http_retry/builtin_async_handlers.html index 50e1c9c1d..206b27f53 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/builtin_async_handlers.html +++ b/docs/static/api-docs/slack_sdk/http_retry/builtin_async_handlers.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.builtin_async_handlers API documentation @@ -300,7 +300,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/builtin_handlers.html b/docs/static/api-docs/slack_sdk/http_retry/builtin_handlers.html index 5bbf259bf..0f36601ed 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/builtin_handlers.html +++ b/docs/static/api-docs/slack_sdk/http_retry/builtin_handlers.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.builtin_handlers API documentation @@ -310,7 +310,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/builtin_interval_calculators.html b/docs/static/api-docs/slack_sdk/http_retry/builtin_interval_calculators.html index 090c1b5f1..cfa90cc7c 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/builtin_interval_calculators.html +++ b/docs/static/api-docs/slack_sdk/http_retry/builtin_interval_calculators.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.builtin_interval_calculators API documentation @@ -198,7 +198,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/handler.html b/docs/static/api-docs/slack_sdk/http_retry/handler.html index 6309f39de..8f4cb0f08 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/handler.html +++ b/docs/static/api-docs/slack_sdk/http_retry/handler.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.handler API documentation @@ -231,7 +231,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/index.html b/docs/static/api-docs/slack_sdk/http_retry/index.html index c9c2201ea..7e2294404 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/index.html +++ b/docs/static/api-docs/slack_sdk/http_retry/index.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry API documentation @@ -994,7 +994,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/interval_calculator.html b/docs/static/api-docs/slack_sdk/http_retry/interval_calculator.html index 49a76ff15..938799629 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/interval_calculator.html +++ b/docs/static/api-docs/slack_sdk/http_retry/interval_calculator.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.interval_calculator API documentation @@ -131,7 +131,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/jitter.html b/docs/static/api-docs/slack_sdk/http_retry/jitter.html index 555f21521..0268d2cce 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/jitter.html +++ b/docs/static/api-docs/slack_sdk/http_retry/jitter.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.jitter API documentation @@ -166,7 +166,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/request.html b/docs/static/api-docs/slack_sdk/http_retry/request.html index e8c2fa659..e088c7443 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/request.html +++ b/docs/static/api-docs/slack_sdk/http_retry/request.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.request API documentation @@ -154,7 +154,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/response.html b/docs/static/api-docs/slack_sdk/http_retry/response.html index 5b2a4aa07..d9c82b4d8 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/response.html +++ b/docs/static/api-docs/slack_sdk/http_retry/response.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.response API documentation @@ -127,7 +127,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/state.html b/docs/static/api-docs/slack_sdk/http_retry/state.html index 31647ffb8..3096592cc 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/state.html +++ b/docs/static/api-docs/slack_sdk/http_retry/state.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.state API documentation @@ -138,7 +138,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/index.html b/docs/static/api-docs/slack_sdk/index.html index 09b7f29a1..8b9b9e3f5 100644 --- a/docs/static/api-docs/slack_sdk/index.html +++ b/docs/static/api-docs/slack_sdk/index.html @@ -3,7 +3,7 @@ - + slack_sdk API documentation @@ -564,6 +564,60 @@

Classes

kwargs.update({"entity_type": entity_type}) return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Create a Salesforce channel for the corresponding object provided. + https://api.slack.com/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return self.api_call("admin.conversations.createForObjects", params=kwargs) + + def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> SlackResponse: + """Link a Salesforce record to a channel. + https://api.slack.com/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return self.api_call("admin.conversations.linkObjects", params=kwargs) + + def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> SlackResponse: + """Unlink a Salesforce record from a channel. + https://api.slack.com/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs) + def admin_barriers_create( self, *, @@ -6417,6 +6471,33 @@

Methods

Create a public or private channel-based conversation. https://api.slack.com/methods/admin.conversations.create

+
+def admin_conversations_createForObjects(self,
*,
object_id: str,
salesforce_org_id: str,
invite_object_team: bool | None = None,
**kwargs) ‑> SlackResponse
+
+
+
+ +Expand source code + +
def admin_conversations_createForObjects(
+    self,
+    *,
+    object_id: str,
+    salesforce_org_id: str,
+    invite_object_team: Optional[bool] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Create a Salesforce channel for the corresponding object provided.
+    https://api.slack.com/methods/admin.conversations.createForObjects
+    """
+    kwargs.update(
+        {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team}
+    )
+    return self.api_call("admin.conversations.createForObjects", params=kwargs)
+
+

Create a Salesforce channel for the corresponding object provided. +https://api.slack.com/methods/admin.conversations.createForObjects

+
def admin_conversations_delete(self, *, channel_id: str, **kwargs) ‑> SlackResponse
@@ -6617,6 +6698,37 @@

Methods

Invite a user to a public or private channel. https://api.slack.com/methods/admin.conversations.invite

+
+def admin_conversations_linkObjects(self, *, channel: str, record_id: str, salesforce_org_id: str, **kwargs) ‑> SlackResponse +
+
+
+ +Expand source code + +
def admin_conversations_linkObjects(
+    self,
+    *,
+    channel: str,
+    record_id: str,
+    salesforce_org_id: str,
+    **kwargs,
+) -> SlackResponse:
+    """Link a Salesforce record to a channel.
+    https://api.slack.com/methods/admin.conversations.linkObjects
+    """
+    kwargs.update(
+        {
+            "channel": channel,
+            "record_id": record_id,
+            "salesforce_org_id": salesforce_org_id,
+        }
+    )
+    return self.api_call("admin.conversations.linkObjects", params=kwargs)
+
+ +
def admin_conversations_lookup(self,
*,
last_message_activity_before: int,
team_ids: str | Sequence[str],
cursor: str | None = None,
limit: int | None = None,
max_member_count: int | None = None,
**kwargs) ‑> SlackResponse
@@ -6964,6 +7076,35 @@

Methods

Unarchive a public or private channel. https://api.slack.com/methods/admin.conversations.archive

+
+def admin_conversations_unlinkObjects(self, *, channel: str, new_name: str, **kwargs) ‑> SlackResponse +
+
+
+ +Expand source code + +
def admin_conversations_unlinkObjects(
+    self,
+    *,
+    channel: str,
+    new_name: str,
+    **kwargs,
+) -> SlackResponse:
+    """Unlink a Salesforce record from a channel.
+    https://api.slack.com/methods/admin.conversations.unlinkObjects
+    """
+    kwargs.update(
+        {
+            "channel": channel,
+            "new_name": new_name,
+        }
+    )
+    return self.api_call("admin.conversations.unlinkObjects", params=kwargs)
+
+

Unlink a Salesforce record from a channel. +https://api.slack.com/methods/admin.conversations.unlinkObjects

+
def admin_emoji_add(self, *, name: str, url: str, **kwargs) ‑> SlackResponse
@@ -14667,6 +14808,7 @@

WebClientadmin_conversations_convertToPrivate
  • admin_conversations_convertToPublic
  • admin_conversations_create
  • +
  • admin_conversations_createForObjects
  • admin_conversations_delete
  • admin_conversations_disconnectShared
  • admin_conversations_ekm_listOriginalConnectedChannelInfo
  • @@ -14674,6 +14816,7 @@

    WebClientadmin_conversations_getCustomRetention
  • admin_conversations_getTeams
  • admin_conversations_invite
  • +
  • admin_conversations_linkObjects
  • admin_conversations_lookup
  • admin_conversations_removeCustomRetention
  • admin_conversations_rename
  • @@ -14685,6 +14828,7 @@

    WebClientadmin_conversations_setCustomRetention
  • admin_conversations_setTeams
  • admin_conversations_unarchive
  • +
  • admin_conversations_unlinkObjects
  • admin_emoji_add
  • admin_emoji_addAlias
  • admin_emoji_list
  • @@ -14958,7 +15102,7 @@

    Web diff --git a/docs/static/api-docs/slack_sdk/models/attachments/index.html b/docs/static/api-docs/slack_sdk/models/attachments/index.html index 3bd9d3179..c5b7067d5 100644 --- a/docs/static/api-docs/slack_sdk/models/attachments/index.html +++ b/docs/static/api-docs/slack_sdk/models/attachments/index.html @@ -3,7 +3,7 @@ - + slack_sdk.models.attachments API documentation @@ -1731,7 +1731,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/models/basic_objects.html b/docs/static/api-docs/slack_sdk/models/basic_objects.html index e3a3a5678..b49694566 100644 --- a/docs/static/api-docs/slack_sdk/models/basic_objects.html +++ b/docs/static/api-docs/slack_sdk/models/basic_objects.html @@ -3,7 +3,7 @@ - + slack_sdk.models.basic_objects API documentation @@ -413,7 +413,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/models/blocks/basic_components.html b/docs/static/api-docs/slack_sdk/models/blocks/basic_components.html index 221bf1229..ac7ce17ac 100644 --- a/docs/static/api-docs/slack_sdk/models/blocks/basic_components.html +++ b/docs/static/api-docs/slack_sdk/models/blocks/basic_components.html @@ -3,7 +3,7 @@ - + slack_sdk.models.blocks.basic_components API documentation @@ -1501,7 +1501,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/models/blocks/block_elements.html b/docs/static/api-docs/slack_sdk/models/blocks/block_elements.html index 9423149fc..1bdb0fb82 100644 --- a/docs/static/api-docs/slack_sdk/models/blocks/block_elements.html +++ b/docs/static/api-docs/slack_sdk/models/blocks/block_elements.html @@ -3,7 +3,7 @@ - + slack_sdk.models.blocks.block_elements API documentation @@ -5129,7 +5129,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/models/blocks/blocks.html b/docs/static/api-docs/slack_sdk/models/blocks/blocks.html index c0ac61df0..a995554f4 100644 --- a/docs/static/api-docs/slack_sdk/models/blocks/blocks.html +++ b/docs/static/api-docs/slack_sdk/models/blocks/blocks.html @@ -3,7 +3,7 @@ - + slack_sdk.models.blocks.blocks API documentation @@ -1682,7 +1682,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/models/blocks/index.html b/docs/static/api-docs/slack_sdk/models/blocks/index.html index 38da11a35..d3327ac93 100644 --- a/docs/static/api-docs/slack_sdk/models/blocks/index.html +++ b/docs/static/api-docs/slack_sdk/models/blocks/index.html @@ -3,7 +3,7 @@ - + slack_sdk.models.blocks API documentation @@ -7684,7 +7684,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/models/dialoags.html b/docs/static/api-docs/slack_sdk/models/dialoags.html index 59d997edb..2657bdbe8 100644 --- a/docs/static/api-docs/slack_sdk/models/dialoags.html +++ b/docs/static/api-docs/slack_sdk/models/dialoags.html @@ -3,7 +3,7 @@ - + slack_sdk.models.dialoags API documentation @@ -2647,7 +2647,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/models/dialogs/index.html b/docs/static/api-docs/slack_sdk/models/dialogs/index.html index 3f014bf2f..d077673e1 100644 --- a/docs/static/api-docs/slack_sdk/models/dialogs/index.html +++ b/docs/static/api-docs/slack_sdk/models/dialogs/index.html @@ -3,7 +3,7 @@ - + slack_sdk.models.dialogs API documentation @@ -2647,7 +2647,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/models/index.html b/docs/static/api-docs/slack_sdk/models/index.html index 55c61db60..418bd9fa8 100644 --- a/docs/static/api-docs/slack_sdk/models/index.html +++ b/docs/static/api-docs/slack_sdk/models/index.html @@ -3,7 +3,7 @@ - + slack_sdk.models API documentation @@ -535,7 +535,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/models/messages/index.html b/docs/static/api-docs/slack_sdk/models/messages/index.html index ae53391a3..b741a9eb7 100644 --- a/docs/static/api-docs/slack_sdk/models/messages/index.html +++ b/docs/static/api-docs/slack_sdk/models/messages/index.html @@ -3,7 +3,7 @@ - + slack_sdk.models.messages API documentation @@ -294,7 +294,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/models/messages/message.html b/docs/static/api-docs/slack_sdk/models/messages/message.html index 23f11b11e..d32a7d02d 100644 --- a/docs/static/api-docs/slack_sdk/models/messages/message.html +++ b/docs/static/api-docs/slack_sdk/models/messages/message.html @@ -3,7 +3,7 @@ - + slack_sdk.models.messages.message API documentation @@ -204,7 +204,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/models/metadata/index.html b/docs/static/api-docs/slack_sdk/models/metadata/index.html index 6db012be7..3d09686bb 100644 --- a/docs/static/api-docs/slack_sdk/models/metadata/index.html +++ b/docs/static/api-docs/slack_sdk/models/metadata/index.html @@ -3,7 +3,7 @@ - + slack_sdk.models.metadata API documentation @@ -134,7 +134,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/models/views/index.html b/docs/static/api-docs/slack_sdk/models/views/index.html index 80dd55f85..e384f561f 100644 --- a/docs/static/api-docs/slack_sdk/models/views/index.html +++ b/docs/static/api-docs/slack_sdk/models/views/index.html @@ -3,7 +3,7 @@ - + slack_sdk.models.views API documentation @@ -448,7 +448,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/authorize_url_generator/index.html b/docs/static/api-docs/slack_sdk/oauth/authorize_url_generator/index.html index 06c784b4c..97e893156 100644 --- a/docs/static/api-docs/slack_sdk/oauth/authorize_url_generator/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/authorize_url_generator/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.authorize_url_generator API documentation @@ -223,7 +223,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/index.html b/docs/static/api-docs/slack_sdk/oauth/index.html index a41f8f254..be3e64d78 100644 --- a/docs/static/api-docs/slack_sdk/oauth/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth API documentation @@ -930,7 +930,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/amazon_s3/index.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/amazon_s3/index.html index 75b0738e9..0b3afe30a 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/amazon_s3/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/amazon_s3/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.amazon_s3 API documentation @@ -521,7 +521,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/async_cacheable_installation_store.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/async_cacheable_installation_store.html index e72021ac5..100c62c4a 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/async_cacheable_installation_store.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/async_cacheable_installation_store.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.async_cacheable_installation_store API documentation @@ -287,7 +287,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/async_installation_store.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/async_installation_store.html index 2117c2f15..e6e6583e4 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/async_installation_store.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/async_installation_store.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.async_installation_store API documentation @@ -351,7 +351,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/cacheable_installation_store.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/cacheable_installation_store.html index b33e183d2..5e2802f11 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/cacheable_installation_store.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/cacheable_installation_store.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.cacheable_installation_store API documentation @@ -289,7 +289,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/file/index.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/file/index.html index f7d3b5238..7658ddd96 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/file/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/file/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.file API documentation @@ -48,7 +48,7 @@

    Classes

    class FileInstallationStore -(*,
    base_dir: str = '/Users/wbergamin/.bolt-app-installation',
    historical_data_enabled: bool = True,
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
    +(*,
    base_dir: str = '/Users/eden.zimbelman/.bolt-app-installation',
    historical_data_enabled: bool = True,
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
    @@ -422,7 +422,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/index.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/index.html index c0cbf6faa..5865522cf 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store API documentation @@ -327,7 +327,7 @@

    Methods

    class FileInstallationStore -(*,
    base_dir: str = '/Users/wbergamin/.bolt-app-installation',
    historical_data_enabled: bool = True,
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
    +(*,
    base_dir: str = '/Users/eden.zimbelman/.bolt-app-installation',
    historical_data_enabled: bool = True,
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
    @@ -1449,7 +1449,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/installation_store.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/installation_store.html index a736b9818..0ecdef730 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/installation_store.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/installation_store.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.installation_store API documentation @@ -353,7 +353,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/internals.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/internals.html index 8f20944dd..4bf376755 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/internals.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/internals.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.internals API documentation @@ -60,7 +60,7 @@

    Module slack_sdk.oauth.installation_store.internals diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/bot.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/models/bot.html index 28bd025c1..bb6182df2 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/bot.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/models/bot.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.models.bot API documentation @@ -326,7 +326,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/index.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/models/index.html index b4acceb9a..b96d16179 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/models/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.models API documentation @@ -770,7 +770,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/installation.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/models/installation.html index d18c282b4..c0de92807 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/installation.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/models/installation.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.models.installation API documentation @@ -494,7 +494,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlalchemy/index.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlalchemy/index.html index dc0b60adc..8861dd476 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlalchemy/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlalchemy/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.sqlalchemy API documentation @@ -936,7 +936,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlite3/index.html b/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlite3/index.html index bd7e03e36..8fc6c563e 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlite3/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlite3/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.sqlite3 API documentation @@ -901,7 +901,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/redirect_uri_page_renderer/index.html b/docs/static/api-docs/slack_sdk/oauth/redirect_uri_page_renderer/index.html index 601448ece..627904d44 100644 --- a/docs/static/api-docs/slack_sdk/oauth/redirect_uri_page_renderer/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/redirect_uri_page_renderer/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.redirect_uri_page_renderer API documentation @@ -232,7 +232,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/amazon_s3/index.html b/docs/static/api-docs/slack_sdk/oauth/state_store/amazon_s3/index.html index dfce0bc5a..40c6d5c4e 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/amazon_s3/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/state_store/amazon_s3/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store.amazon_s3 API documentation @@ -251,7 +251,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/async_state_store.html b/docs/static/api-docs/slack_sdk/oauth/state_store/async_state_store.html index bf9fb5fb6..3f1fa969b 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/async_state_store.html +++ b/docs/static/api-docs/slack_sdk/oauth/state_store/async_state_store.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store.async_state_store API documentation @@ -147,7 +147,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/file/index.html b/docs/static/api-docs/slack_sdk/oauth/state_store/file/index.html index dbd9a07a6..33ac16d82 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/file/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/state_store/file/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store.file API documentation @@ -48,7 +48,7 @@

    Classes

    class FileOAuthStateStore -(*,
    expiration_seconds: int,
    base_dir: str = '/Users/wbergamin/.bolt-app-oauth-state',
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.state_store.file (WARNING)>)
    +(*,
    expiration_seconds: int,
    base_dir: str = '/Users/eden.zimbelman/.bolt-app-oauth-state',
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.state_store.file (WARNING)>)
    @@ -244,7 +244,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/index.html b/docs/static/api-docs/slack_sdk/oauth/state_store/index.html index 070b9691a..efb7d1cfe 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/state_store/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store API documentation @@ -77,7 +77,7 @@

    Classes

    class FileOAuthStateStore -(*,
    expiration_seconds: int,
    base_dir: str = '/Users/wbergamin/.bolt-app-oauth-state',
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.state_store.file (WARNING)>)
    +(*,
    expiration_seconds: int,
    base_dir: str = '/Users/eden.zimbelman/.bolt-app-oauth-state',
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.state_store.file (WARNING)>)
    @@ -363,7 +363,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/sqlalchemy/index.html b/docs/static/api-docs/slack_sdk/oauth/state_store/sqlalchemy/index.html index 5b12f945c..29fe36884 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/sqlalchemy/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/state_store/sqlalchemy/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store.sqlalchemy API documentation @@ -485,7 +485,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/sqlite3/index.html b/docs/static/api-docs/slack_sdk/oauth/state_store/sqlite3/index.html index 90edb235f..cd0b75b8b 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/sqlite3/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/state_store/sqlite3/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store.sqlite3 API documentation @@ -339,7 +339,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/state_store.html b/docs/static/api-docs/slack_sdk/oauth/state_store/state_store.html index 9aac29715..9734a2bba 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/state_store.html +++ b/docs/static/api-docs/slack_sdk/oauth/state_store/state_store.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store.state_store API documentation @@ -147,7 +147,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/oauth/state_utils/index.html b/docs/static/api-docs/slack_sdk/oauth/state_utils/index.html index aea2b6cf6..d732babfd 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_utils/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/state_utils/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_utils API documentation @@ -206,7 +206,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/token_rotation/async_rotator.html b/docs/static/api-docs/slack_sdk/oauth/token_rotation/async_rotator.html index 3e37930b8..35d64f362 100644 --- a/docs/static/api-docs/slack_sdk/oauth/token_rotation/async_rotator.html +++ b/docs/static/api-docs/slack_sdk/oauth/token_rotation/async_rotator.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.token_rotation.async_rotator API documentation @@ -418,7 +418,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/token_rotation/index.html b/docs/static/api-docs/slack_sdk/oauth/token_rotation/index.html index fbc5eb8a8..979f9f80c 100644 --- a/docs/static/api-docs/slack_sdk/oauth/token_rotation/index.html +++ b/docs/static/api-docs/slack_sdk/oauth/token_rotation/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.token_rotation API documentation @@ -427,7 +427,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/oauth/token_rotation/rotator.html b/docs/static/api-docs/slack_sdk/oauth/token_rotation/rotator.html index 7bb25ffb3..afcccb48c 100644 --- a/docs/static/api-docs/slack_sdk/oauth/token_rotation/rotator.html +++ b/docs/static/api-docs/slack_sdk/oauth/token_rotation/rotator.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.token_rotation.rotator API documentation @@ -410,7 +410,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/proxy_env_variable_loader.html b/docs/static/api-docs/slack_sdk/proxy_env_variable_loader.html index 18553c3a1..f1eee3af3 100644 --- a/docs/static/api-docs/slack_sdk/proxy_env_variable_loader.html +++ b/docs/static/api-docs/slack_sdk/proxy_env_variable_loader.html @@ -3,7 +3,7 @@ - + slack_sdk.proxy_env_variable_loader API documentation @@ -96,7 +96,7 @@

    Functions

    diff --git a/docs/static/api-docs/slack_sdk/rtm/index.html b/docs/static/api-docs/slack_sdk/rtm/index.html index e770576e1..870fa3797 100644 --- a/docs/static/api-docs/slack_sdk/rtm/index.html +++ b/docs/static/api-docs/slack_sdk/rtm/index.html @@ -3,7 +3,7 @@ - + slack_sdk.rtm API documentation @@ -998,7 +998,7 @@

    RTM diff --git a/docs/static/api-docs/slack_sdk/rtm/v2/index.html b/docs/static/api-docs/slack_sdk/rtm/v2/index.html index 5ad721fc7..d0c0591ec 100644 --- a/docs/static/api-docs/slack_sdk/rtm/v2/index.html +++ b/docs/static/api-docs/slack_sdk/rtm/v2/index.html @@ -3,7 +3,7 @@ - + slack_sdk.rtm.v2 API documentation @@ -984,7 +984,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/rtm_v2/index.html b/docs/static/api-docs/slack_sdk/rtm_v2/index.html index ff8e91aa9..5d65bdc74 100644 --- a/docs/static/api-docs/slack_sdk/rtm_v2/index.html +++ b/docs/static/api-docs/slack_sdk/rtm_v2/index.html @@ -3,7 +3,7 @@ - + slack_sdk.rtm_v2 API documentation @@ -985,7 +985,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/scim/async_client.html b/docs/static/api-docs/slack_sdk/scim/async_client.html index e17087f7f..b4d0f3fd4 100644 --- a/docs/static/api-docs/slack_sdk/scim/async_client.html +++ b/docs/static/api-docs/slack_sdk/scim/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.async_client API documentation @@ -828,7 +828,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/scim/index.html b/docs/static/api-docs/slack_sdk/scim/index.html index 61e2f0741..150a46b70 100644 --- a/docs/static/api-docs/slack_sdk/scim/index.html +++ b/docs/static/api-docs/slack_sdk/scim/index.html @@ -3,7 +3,7 @@ - + slack_sdk.scim API documentation @@ -1566,7 +1566,7 @@

    User diff --git a/docs/static/api-docs/slack_sdk/scim/v1/async_client.html b/docs/static/api-docs/slack_sdk/scim/v1/async_client.html index e6a0a5c12..b8b9b9b5b 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/async_client.html +++ b/docs/static/api-docs/slack_sdk/scim/v1/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.async_client API documentation @@ -828,7 +828,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/scim/v1/client.html b/docs/static/api-docs/slack_sdk/scim/v1/client.html index a36c6361a..2c51a0776 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/client.html +++ b/docs/static/api-docs/slack_sdk/scim/v1/client.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.client API documentation @@ -826,7 +826,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/scim/v1/default_arg.html b/docs/static/api-docs/slack_sdk/scim/v1/default_arg.html index 08134ff76..071fa3ca8 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/default_arg.html +++ b/docs/static/api-docs/slack_sdk/scim/v1/default_arg.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.default_arg API documentation @@ -83,7 +83,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/scim/v1/group.html b/docs/static/api-docs/slack_sdk/scim/v1/group.html index a8555fdc0..615d75d06 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/group.html +++ b/docs/static/api-docs/slack_sdk/scim/v1/group.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.group API documentation @@ -306,7 +306,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/scim/v1/index.html b/docs/static/api-docs/slack_sdk/scim/v1/index.html index ac0d0fa70..5ce46dba3 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/index.html +++ b/docs/static/api-docs/slack_sdk/scim/v1/index.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1 API documentation @@ -113,7 +113,7 @@

    Sub-modules

    diff --git a/docs/static/api-docs/slack_sdk/scim/v1/internal_utils.html b/docs/static/api-docs/slack_sdk/scim/v1/internal_utils.html index e8c369720..c8aecfd94 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/internal_utils.html +++ b/docs/static/api-docs/slack_sdk/scim/v1/internal_utils.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.internal_utils API documentation @@ -60,7 +60,7 @@

    Module slack_sdk.scim.v1.internal_utils

    diff --git a/docs/static/api-docs/slack_sdk/scim/v1/response.html b/docs/static/api-docs/slack_sdk/scim/v1/response.html index a38192090..83b638f69 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/response.html +++ b/docs/static/api-docs/slack_sdk/scim/v1/response.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.response API documentation @@ -961,7 +961,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/scim/v1/types.html b/docs/static/api-docs/slack_sdk/scim/v1/types.html index 16316fb1f..2d8b58aeb 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/types.html +++ b/docs/static/api-docs/slack_sdk/scim/v1/types.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.types API documentation @@ -151,7 +151,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/scim/v1/user.html b/docs/static/api-docs/slack_sdk/scim/v1/user.html index 729c5f07a..49e328355 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/user.html +++ b/docs/static/api-docs/slack_sdk/scim/v1/user.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.user API documentation @@ -768,7 +768,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/signature/index.html b/docs/static/api-docs/slack_sdk/signature/index.html index 00d798948..690f66ae0 100644 --- a/docs/static/api-docs/slack_sdk/signature/index.html +++ b/docs/static/api-docs/slack_sdk/signature/index.html @@ -3,7 +3,7 @@ - + slack_sdk.signature API documentation @@ -268,7 +268,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/aiohttp/index.html b/docs/static/api-docs/slack_sdk/socket_mode/aiohttp/index.html index 47a0a65a6..e2a12fde4 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/aiohttp/index.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/aiohttp/index.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.aiohttp API documentation @@ -1065,7 +1065,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/async_client.html b/docs/static/api-docs/slack_sdk/socket_mode/async_client.html index 8ca396e1b..20d07951a 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/async_client.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.async_client API documentation @@ -569,7 +569,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/async_listeners.html b/docs/static/api-docs/slack_sdk/socket_mode/async_listeners.html index 1dd20bab0..e78b3c29e 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/async_listeners.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/async_listeners.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.async_listeners API documentation @@ -152,7 +152,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/client.html b/docs/static/api-docs/slack_sdk/socket_mode/builtin/client.html index ea56feefa..fbf3f7525 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/builtin/client.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/builtin/client.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.builtin.client API documentation @@ -625,7 +625,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/connection.html b/docs/static/api-docs/slack_sdk/socket_mode/builtin/connection.html index a32ffb9c1..5c85bef91 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/builtin/connection.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/builtin/connection.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.builtin.connection API documentation @@ -1055,7 +1055,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/frame_header.html b/docs/static/api-docs/slack_sdk/socket_mode/builtin/frame_header.html index 4af543f01..b728e0926 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/builtin/frame_header.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/builtin/frame_header.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.builtin.frame_header API documentation @@ -199,7 +199,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/index.html b/docs/static/api-docs/slack_sdk/socket_mode/builtin/index.html index 83d5f641e..9f710eaf6 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/builtin/index.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/builtin/index.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.builtin API documentation @@ -647,7 +647,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/internals.html b/docs/static/api-docs/slack_sdk/socket_mode/builtin/internals.html index 9e47d439d..2977bc6c4 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/builtin/internals.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/builtin/internals.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.builtin.internals API documentation @@ -60,7 +60,7 @@

    Module slack_sdk.socket_mode.builtin.internals diff --git a/docs/static/api-docs/slack_sdk/socket_mode/client.html b/docs/static/api-docs/slack_sdk/socket_mode/client.html index c861f0645..dda047bd6 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/client.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/client.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.client API documentation @@ -531,7 +531,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/index.html b/docs/static/api-docs/slack_sdk/socket_mode/index.html index 8bee1c5e2..a9bffd89e 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/index.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/index.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode API documentation @@ -692,7 +692,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/interval_runner.html b/docs/static/api-docs/slack_sdk/socket_mode/interval_runner.html index d5d9cdddc..54838d22f 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/interval_runner.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/interval_runner.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.interval_runner API documentation @@ -174,7 +174,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/listeners.html b/docs/static/api-docs/slack_sdk/socket_mode/listeners.html index ab0b64d43..daabff8fd 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/listeners.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/listeners.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.listeners API documentation @@ -105,7 +105,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/logger/index.html b/docs/static/api-docs/slack_sdk/socket_mode/logger/index.html index 10477c7ea..0d02b13f3 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/logger/index.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/logger/index.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.logger API documentation @@ -72,7 +72,7 @@

    Sub-modules

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/logger/messages.html b/docs/static/api-docs/slack_sdk/socket_mode/logger/messages.html index 70adfb489..eb2a0dffe 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/logger/messages.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/logger/messages.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.logger.messages API documentation @@ -82,7 +82,7 @@

    Functions

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/request.html b/docs/static/api-docs/slack_sdk/socket_mode/request.html index 0ba83927d..75945aa40 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/request.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/request.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.request API documentation @@ -199,7 +199,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/response.html b/docs/static/api-docs/slack_sdk/socket_mode/response.html index 21cfe4190..0142f7c9e 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/response.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/response.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.response API documentation @@ -140,7 +140,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/websocket_client/index.html b/docs/static/api-docs/slack_sdk/socket_mode/websocket_client/index.html index e5cf3e0c6..20a1f0ac5 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/websocket_client/index.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/websocket_client/index.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.websocket_client API documentation @@ -582,7 +582,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/socket_mode/websockets/index.html b/docs/static/api-docs/slack_sdk/socket_mode/websockets/index.html index 24c75097c..792c28fb5 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/websockets/index.html +++ b/docs/static/api-docs/slack_sdk/socket_mode/websockets/index.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.websockets API documentation @@ -633,7 +633,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/version.html b/docs/static/api-docs/slack_sdk/version.html index feb4b1d6b..9f8e3c5bb 100644 --- a/docs/static/api-docs/slack_sdk/version.html +++ b/docs/static/api-docs/slack_sdk/version.html @@ -3,7 +3,7 @@ - + slack_sdk.version API documentation @@ -61,7 +61,7 @@

    Module slack_sdk.version

    diff --git a/docs/static/api-docs/slack_sdk/web/async_base_client.html b/docs/static/api-docs/slack_sdk/web/async_base_client.html index 608c48433..97615d924 100644 --- a/docs/static/api-docs/slack_sdk/web/async_base_client.html +++ b/docs/static/api-docs/slack_sdk/web/async_base_client.html @@ -3,7 +3,7 @@ - + slack_sdk.web.async_base_client API documentation @@ -529,7 +529,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/web/async_client.html b/docs/static/api-docs/slack_sdk/web/async_client.html index 1f540de1e..86403ce5d 100644 --- a/docs/static/api-docs/slack_sdk/web/async_client.html +++ b/docs/static/api-docs/slack_sdk/web/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.web.async_client API documentation @@ -460,6 +460,60 @@

    Classes

    kwargs.update({"entity_type": entity_type}) return await self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + async def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Create a Salesforce channel for the corresponding object provided. + https://api.slack.com/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return await self.api_call("admin.conversations.createForObjects", params=kwargs) + + async def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> AsyncSlackResponse: + """Link a Salesforce record to a channel. + https://api.slack.com/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return await self.api_call("admin.conversations.linkObjects", params=kwargs) + + async def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> AsyncSlackResponse: + """Unlink a Salesforce record from a channel. + https://api.slack.com/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return await self.api_call("admin.conversations.unlinkObjects", params=kwargs) + async def admin_barriers_create( self, *, @@ -6313,6 +6367,33 @@

    Methods

    Create a public or private channel-based conversation. https://api.slack.com/methods/admin.conversations.create

    +
    +async def admin_conversations_createForObjects(self,
    *,
    object_id: str,
    salesforce_org_id: str,
    invite_object_team: bool | None = None,
    **kwargs) ‑> AsyncSlackResponse
    +
    +
    +
    + +Expand source code + +
    async def admin_conversations_createForObjects(
    +    self,
    +    *,
    +    object_id: str,
    +    salesforce_org_id: str,
    +    invite_object_team: Optional[bool] = None,
    +    **kwargs,
    +) -> AsyncSlackResponse:
    +    """Create a Salesforce channel for the corresponding object provided.
    +    https://api.slack.com/methods/admin.conversations.createForObjects
    +    """
    +    kwargs.update(
    +        {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team}
    +    )
    +    return await self.api_call("admin.conversations.createForObjects", params=kwargs)
    +
    +

    Create a Salesforce channel for the corresponding object provided. +https://api.slack.com/methods/admin.conversations.createForObjects

    +
    async def admin_conversations_delete(self, *, channel_id: str, **kwargs) ‑> AsyncSlackResponse
    @@ -6513,6 +6594,37 @@

    Methods

    Invite a user to a public or private channel. https://api.slack.com/methods/admin.conversations.invite

    +
    +async def admin_conversations_linkObjects(self, *, channel: str, record_id: str, salesforce_org_id: str, **kwargs) ‑> AsyncSlackResponse +
    +
    +
    + +Expand source code + +
    async def admin_conversations_linkObjects(
    +    self,
    +    *,
    +    channel: str,
    +    record_id: str,
    +    salesforce_org_id: str,
    +    **kwargs,
    +) -> AsyncSlackResponse:
    +    """Link a Salesforce record to a channel.
    +    https://api.slack.com/methods/admin.conversations.linkObjects
    +    """
    +    kwargs.update(
    +        {
    +            "channel": channel,
    +            "record_id": record_id,
    +            "salesforce_org_id": salesforce_org_id,
    +        }
    +    )
    +    return await self.api_call("admin.conversations.linkObjects", params=kwargs)
    +
    + +
    async def admin_conversations_lookup(self,
    *,
    last_message_activity_before: int,
    team_ids: str | Sequence[str],
    cursor: str | None = None,
    limit: int | None = None,
    max_member_count: int | None = None,
    **kwargs) ‑> AsyncSlackResponse
    @@ -6860,6 +6972,35 @@

    Methods

    Unarchive a public or private channel. https://api.slack.com/methods/admin.conversations.archive

    +
    +async def admin_conversations_unlinkObjects(self, *, channel: str, new_name: str, **kwargs) ‑> AsyncSlackResponse +
    +
    +
    + +Expand source code + +
    async def admin_conversations_unlinkObjects(
    +    self,
    +    *,
    +    channel: str,
    +    new_name: str,
    +    **kwargs,
    +) -> AsyncSlackResponse:
    +    """Unlink a Salesforce record from a channel.
    +    https://api.slack.com/methods/admin.conversations.unlinkObjects
    +    """
    +    kwargs.update(
    +        {
    +            "channel": channel,
    +            "new_name": new_name,
    +        }
    +    )
    +    return await self.api_call("admin.conversations.unlinkObjects", params=kwargs)
    +
    +

    Unlink a Salesforce record from a channel. +https://api.slack.com/methods/admin.conversations.unlinkObjects

    +
    async def admin_emoji_add(self, *, name: str, url: str, **kwargs) ‑> AsyncSlackResponse
    @@ -14103,6 +14244,7 @@

    admin_conversations_convertToPrivate
  • admin_conversations_convertToPublic
  • admin_conversations_create
  • +
  • admin_conversations_createForObjects
  • admin_conversations_delete
  • admin_conversations_disconnectShared
  • admin_conversations_ekm_listOriginalConnectedChannelInfo
  • @@ -14110,6 +14252,7 @@

    admin_conversations_getCustomRetention
  • admin_conversations_getTeams
  • admin_conversations_invite
  • +
  • admin_conversations_linkObjects
  • admin_conversations_lookup
  • admin_conversations_removeCustomRetention
  • admin_conversations_rename
  • @@ -14121,6 +14264,7 @@

    admin_conversations_setCustomRetention
  • admin_conversations_setTeams
  • admin_conversations_unarchive
  • +
  • admin_conversations_unlinkObjects
  • admin_emoji_add
  • admin_emoji_addAlias
  • admin_emoji_list
  • @@ -14380,7 +14524,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/web/async_internal_utils.html b/docs/static/api-docs/slack_sdk/web/async_internal_utils.html index bfed1696b..12eb2ba7f 100644 --- a/docs/static/api-docs/slack_sdk/web/async_internal_utils.html +++ b/docs/static/api-docs/slack_sdk/web/async_internal_utils.html @@ -3,7 +3,7 @@ - + slack_sdk.web.async_internal_utils API documentation @@ -60,7 +60,7 @@

    Module slack_sdk.web.async_internal_utils

    diff --git a/docs/static/api-docs/slack_sdk/web/async_slack_response.html b/docs/static/api-docs/slack_sdk/web/async_slack_response.html index 5a5af6651..e081b1ab8 100644 --- a/docs/static/api-docs/slack_sdk/web/async_slack_response.html +++ b/docs/static/api-docs/slack_sdk/web/async_slack_response.html @@ -3,7 +3,7 @@ - + slack_sdk.web.async_slack_response API documentation @@ -385,7 +385,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/web/base_client.html b/docs/static/api-docs/slack_sdk/web/base_client.html index 1dd140172..8e952ec75 100644 --- a/docs/static/api-docs/slack_sdk/web/base_client.html +++ b/docs/static/api-docs/slack_sdk/web/base_client.html @@ -3,7 +3,7 @@ - + slack_sdk.web.base_client API documentation @@ -943,7 +943,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/web/client.html b/docs/static/api-docs/slack_sdk/web/client.html index 9eb5625dd..28212dff5 100644 --- a/docs/static/api-docs/slack_sdk/web/client.html +++ b/docs/static/api-docs/slack_sdk/web/client.html @@ -3,7 +3,7 @@ - + slack_sdk.web.client API documentation @@ -460,6 +460,60 @@

    Classes

    kwargs.update({"entity_type": entity_type}) return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Create a Salesforce channel for the corresponding object provided. + https://api.slack.com/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return self.api_call("admin.conversations.createForObjects", params=kwargs) + + def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> SlackResponse: + """Link a Salesforce record to a channel. + https://api.slack.com/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return self.api_call("admin.conversations.linkObjects", params=kwargs) + + def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> SlackResponse: + """Unlink a Salesforce record from a channel. + https://api.slack.com/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs) + def admin_barriers_create( self, *, @@ -6313,6 +6367,33 @@

    Methods

    Create a public or private channel-based conversation. https://api.slack.com/methods/admin.conversations.create

    +
    +def admin_conversations_createForObjects(self,
    *,
    object_id: str,
    salesforce_org_id: str,
    invite_object_team: bool | None = None,
    **kwargs) ‑> SlackResponse
    +
    +
    +
    + +Expand source code + +
    def admin_conversations_createForObjects(
    +    self,
    +    *,
    +    object_id: str,
    +    salesforce_org_id: str,
    +    invite_object_team: Optional[bool] = None,
    +    **kwargs,
    +) -> SlackResponse:
    +    """Create a Salesforce channel for the corresponding object provided.
    +    https://api.slack.com/methods/admin.conversations.createForObjects
    +    """
    +    kwargs.update(
    +        {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team}
    +    )
    +    return self.api_call("admin.conversations.createForObjects", params=kwargs)
    +
    +

    Create a Salesforce channel for the corresponding object provided. +https://api.slack.com/methods/admin.conversations.createForObjects

    +
    def admin_conversations_delete(self, *, channel_id: str, **kwargs) ‑> SlackResponse
    @@ -6513,6 +6594,37 @@

    Methods

    Invite a user to a public or private channel. https://api.slack.com/methods/admin.conversations.invite

    +
    +def admin_conversations_linkObjects(self, *, channel: str, record_id: str, salesforce_org_id: str, **kwargs) ‑> SlackResponse +
    +
    +
    + +Expand source code + +
    def admin_conversations_linkObjects(
    +    self,
    +    *,
    +    channel: str,
    +    record_id: str,
    +    salesforce_org_id: str,
    +    **kwargs,
    +) -> SlackResponse:
    +    """Link a Salesforce record to a channel.
    +    https://api.slack.com/methods/admin.conversations.linkObjects
    +    """
    +    kwargs.update(
    +        {
    +            "channel": channel,
    +            "record_id": record_id,
    +            "salesforce_org_id": salesforce_org_id,
    +        }
    +    )
    +    return self.api_call("admin.conversations.linkObjects", params=kwargs)
    +
    + +
    def admin_conversations_lookup(self,
    *,
    last_message_activity_before: int,
    team_ids: str | Sequence[str],
    cursor: str | None = None,
    limit: int | None = None,
    max_member_count: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -6860,6 +6972,35 @@

    Methods

    Unarchive a public or private channel. https://api.slack.com/methods/admin.conversations.archive

    +
    +def admin_conversations_unlinkObjects(self, *, channel: str, new_name: str, **kwargs) ‑> SlackResponse +
    +
    +
    + +Expand source code + +
    def admin_conversations_unlinkObjects(
    +    self,
    +    *,
    +    channel: str,
    +    new_name: str,
    +    **kwargs,
    +) -> SlackResponse:
    +    """Unlink a Salesforce record from a channel.
    +    https://api.slack.com/methods/admin.conversations.unlinkObjects
    +    """
    +    kwargs.update(
    +        {
    +            "channel": channel,
    +            "new_name": new_name,
    +        }
    +    )
    +    return self.api_call("admin.conversations.unlinkObjects", params=kwargs)
    +
    +

    Unlink a Salesforce record from a channel. +https://api.slack.com/methods/admin.conversations.unlinkObjects

    +
    def admin_emoji_add(self, *, name: str, url: str, **kwargs) ‑> SlackResponse
    @@ -14102,6 +14243,7 @@

    admin_conversations_convertToPrivate
  • admin_conversations_convertToPublic
  • admin_conversations_create
  • +
  • admin_conversations_createForObjects
  • admin_conversations_delete
  • admin_conversations_disconnectShared
  • admin_conversations_ekm_listOriginalConnectedChannelInfo
  • @@ -14109,6 +14251,7 @@

    admin_conversations_getCustomRetention
  • admin_conversations_getTeams
  • admin_conversations_invite
  • +
  • admin_conversations_linkObjects
  • admin_conversations_lookup
  • admin_conversations_removeCustomRetention
  • admin_conversations_rename
  • @@ -14120,6 +14263,7 @@

    admin_conversations_setCustomRetention
  • admin_conversations_setTeams
  • admin_conversations_unarchive
  • +
  • admin_conversations_unlinkObjects
  • admin_emoji_add
  • admin_emoji_addAlias
  • admin_emoji_list
  • @@ -14379,7 +14523,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/web/deprecation.html b/docs/static/api-docs/slack_sdk/web/deprecation.html index 1b52090df..5cab0cf2b 100644 --- a/docs/static/api-docs/slack_sdk/web/deprecation.html +++ b/docs/static/api-docs/slack_sdk/web/deprecation.html @@ -3,7 +3,7 @@ - + slack_sdk.web.deprecation API documentation @@ -115,7 +115,7 @@

    Functions

    diff --git a/docs/static/api-docs/slack_sdk/web/file_upload_v2_result.html b/docs/static/api-docs/slack_sdk/web/file_upload_v2_result.html index 16a7c3a9c..6cd74fcb3 100644 --- a/docs/static/api-docs/slack_sdk/web/file_upload_v2_result.html +++ b/docs/static/api-docs/slack_sdk/web/file_upload_v2_result.html @@ -3,7 +3,7 @@ - + slack_sdk.web.file_upload_v2_result API documentation @@ -104,7 +104,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/web/index.html b/docs/static/api-docs/slack_sdk/web/index.html index 2394e0407..e4ac7ea49 100644 --- a/docs/static/api-docs/slack_sdk/web/index.html +++ b/docs/static/api-docs/slack_sdk/web/index.html @@ -3,7 +3,7 @@ - + slack_sdk.web API documentation @@ -821,6 +821,60 @@

    Raises

    kwargs.update({"entity_type": entity_type}) return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Create a Salesforce channel for the corresponding object provided. + https://api.slack.com/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return self.api_call("admin.conversations.createForObjects", params=kwargs) + + def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> SlackResponse: + """Link a Salesforce record to a channel. + https://api.slack.com/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return self.api_call("admin.conversations.linkObjects", params=kwargs) + + def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> SlackResponse: + """Unlink a Salesforce record from a channel. + https://api.slack.com/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs) + def admin_barriers_create( self, *, @@ -6674,6 +6728,33 @@

    Methods

    Create a public or private channel-based conversation. https://api.slack.com/methods/admin.conversations.create

    +
    +def admin_conversations_createForObjects(self,
    *,
    object_id: str,
    salesforce_org_id: str,
    invite_object_team: bool | None = None,
    **kwargs) ‑> SlackResponse
    +
    +
    +
    + +Expand source code + +
    def admin_conversations_createForObjects(
    +    self,
    +    *,
    +    object_id: str,
    +    salesforce_org_id: str,
    +    invite_object_team: Optional[bool] = None,
    +    **kwargs,
    +) -> SlackResponse:
    +    """Create a Salesforce channel for the corresponding object provided.
    +    https://api.slack.com/methods/admin.conversations.createForObjects
    +    """
    +    kwargs.update(
    +        {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team}
    +    )
    +    return self.api_call("admin.conversations.createForObjects", params=kwargs)
    +
    +

    Create a Salesforce channel for the corresponding object provided. +https://api.slack.com/methods/admin.conversations.createForObjects

    +
    def admin_conversations_delete(self, *, channel_id: str, **kwargs) ‑> SlackResponse
    @@ -6874,6 +6955,37 @@

    Methods

    Invite a user to a public or private channel. https://api.slack.com/methods/admin.conversations.invite

    +
    +def admin_conversations_linkObjects(self, *, channel: str, record_id: str, salesforce_org_id: str, **kwargs) ‑> SlackResponse +
    +
    +
    + +Expand source code + +
    def admin_conversations_linkObjects(
    +    self,
    +    *,
    +    channel: str,
    +    record_id: str,
    +    salesforce_org_id: str,
    +    **kwargs,
    +) -> SlackResponse:
    +    """Link a Salesforce record to a channel.
    +    https://api.slack.com/methods/admin.conversations.linkObjects
    +    """
    +    kwargs.update(
    +        {
    +            "channel": channel,
    +            "record_id": record_id,
    +            "salesforce_org_id": salesforce_org_id,
    +        }
    +    )
    +    return self.api_call("admin.conversations.linkObjects", params=kwargs)
    +
    + +
    def admin_conversations_lookup(self,
    *,
    last_message_activity_before: int,
    team_ids: str | Sequence[str],
    cursor: str | None = None,
    limit: int | None = None,
    max_member_count: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7221,6 +7333,35 @@

    Methods

    Unarchive a public or private channel. https://api.slack.com/methods/admin.conversations.archive

    +
    +def admin_conversations_unlinkObjects(self, *, channel: str, new_name: str, **kwargs) ‑> SlackResponse +
    +
    +
    + +Expand source code + +
    def admin_conversations_unlinkObjects(
    +    self,
    +    *,
    +    channel: str,
    +    new_name: str,
    +    **kwargs,
    +) -> SlackResponse:
    +    """Unlink a Salesforce record from a channel.
    +    https://api.slack.com/methods/admin.conversations.unlinkObjects
    +    """
    +    kwargs.update(
    +        {
    +            "channel": channel,
    +            "new_name": new_name,
    +        }
    +    )
    +    return self.api_call("admin.conversations.unlinkObjects", params=kwargs)
    +
    +

    Unlink a Salesforce record from a channel. +https://api.slack.com/methods/admin.conversations.unlinkObjects

    +
    def admin_emoji_add(self, *, name: str, url: str, **kwargs) ‑> SlackResponse
    @@ -14487,6 +14628,7 @@

    Web
  • admin_conversations_convertToPrivate
  • admin_conversations_convertToPublic
  • admin_conversations_create
  • +
  • admin_conversations_createForObjects
  • admin_conversations_delete
  • admin_conversations_disconnectShared
  • admin_conversations_ekm_listOriginalConnectedChannelInfo
  • @@ -14494,6 +14636,7 @@

    Web
  • admin_conversations_getCustomRetention
  • admin_conversations_getTeams
  • admin_conversations_invite
  • +
  • admin_conversations_linkObjects
  • admin_conversations_lookup
  • admin_conversations_removeCustomRetention
  • admin_conversations_rename
  • @@ -14505,6 +14648,7 @@

    Web
  • admin_conversations_setCustomRetention
  • admin_conversations_setTeams
  • admin_conversations_unarchive
  • +
  • admin_conversations_unlinkObjects
  • admin_emoji_add
  • admin_emoji_addAlias
  • admin_emoji_list
  • @@ -14764,7 +14908,7 @@

    Web diff --git a/docs/static/api-docs/slack_sdk/web/internal_utils.html b/docs/static/api-docs/slack_sdk/web/internal_utils.html index d20bf07c5..9d8084d61 100644 --- a/docs/static/api-docs/slack_sdk/web/internal_utils.html +++ b/docs/static/api-docs/slack_sdk/web/internal_utils.html @@ -3,7 +3,7 @@ - + slack_sdk.web.internal_utils API documentation @@ -137,7 +137,7 @@

    Returns

    diff --git a/docs/static/api-docs/slack_sdk/web/legacy_base_client.html b/docs/static/api-docs/slack_sdk/web/legacy_base_client.html index 6515bde5d..a14a4ec62 100644 --- a/docs/static/api-docs/slack_sdk/web/legacy_base_client.html +++ b/docs/static/api-docs/slack_sdk/web/legacy_base_client.html @@ -3,7 +3,7 @@ - + slack_sdk.web.legacy_base_client API documentation @@ -890,7 +890,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/web/legacy_client.html b/docs/static/api-docs/slack_sdk/web/legacy_client.html index 7d3dd96c8..63cbfc7f9 100644 --- a/docs/static/api-docs/slack_sdk/web/legacy_client.html +++ b/docs/static/api-docs/slack_sdk/web/legacy_client.html @@ -3,7 +3,7 @@ - + slack_sdk.web.legacy_client API documentation @@ -459,6 +459,60 @@

    Classes

    kwargs.update({"entity_type": entity_type}) return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Create a Salesforce channel for the corresponding object provided. + https://api.slack.com/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return self.api_call("admin.conversations.createForObjects", params=kwargs) + + def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Link a Salesforce record to a channel. + https://api.slack.com/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return self.api_call("admin.conversations.linkObjects", params=kwargs) + + def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Unlink a Salesforce record from a channel. + https://api.slack.com/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs) + def admin_barriers_create( self, *, @@ -6312,6 +6366,33 @@

    Methods

    Create a public or private channel-based conversation. https://api.slack.com/methods/admin.conversations.create

    +
    +def admin_conversations_createForObjects(self,
    *,
    object_id: str,
    salesforce_org_id: str,
    invite_object_team: bool | None = None,
    **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    +
    +
    +
    + +Expand source code + +
    def admin_conversations_createForObjects(
    +    self,
    +    *,
    +    object_id: str,
    +    salesforce_org_id: str,
    +    invite_object_team: Optional[bool] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Create a Salesforce channel for the corresponding object provided.
    +    https://api.slack.com/methods/admin.conversations.createForObjects
    +    """
    +    kwargs.update(
    +        {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team}
    +    )
    +    return self.api_call("admin.conversations.createForObjects", params=kwargs)
    +
    +

    Create a Salesforce channel for the corresponding object provided. +https://api.slack.com/methods/admin.conversations.createForObjects

    +
    def admin_conversations_delete(self, *, channel_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    @@ -6512,6 +6593,37 @@

    Methods

    Invite a user to a public or private channel. https://api.slack.com/methods/admin.conversations.invite

    +
    +def admin_conversations_linkObjects(self, *, channel: str, record_id: str, salesforce_org_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse +
    +
    +
    + +Expand source code + +
    def admin_conversations_linkObjects(
    +    self,
    +    *,
    +    channel: str,
    +    record_id: str,
    +    salesforce_org_id: str,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Link a Salesforce record to a channel.
    +    https://api.slack.com/methods/admin.conversations.linkObjects
    +    """
    +    kwargs.update(
    +        {
    +            "channel": channel,
    +            "record_id": record_id,
    +            "salesforce_org_id": salesforce_org_id,
    +        }
    +    )
    +    return self.api_call("admin.conversations.linkObjects", params=kwargs)
    +
    + +
    def admin_conversations_lookup(self,
    *,
    last_message_activity_before: int,
    team_ids: str | Sequence[str],
    cursor: str | None = None,
    limit: int | None = None,
    max_member_count: int | None = None,
    **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    @@ -6859,6 +6971,35 @@

    Methods

    Unarchive a public or private channel. https://api.slack.com/methods/admin.conversations.archive

    +
    +def admin_conversations_unlinkObjects(self, *, channel: str, new_name: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse +
    +
    +
    + +Expand source code + +
    def admin_conversations_unlinkObjects(
    +    self,
    +    *,
    +    channel: str,
    +    new_name: str,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Unlink a Salesforce record from a channel.
    +    https://api.slack.com/methods/admin.conversations.unlinkObjects
    +    """
    +    kwargs.update(
    +        {
    +            "channel": channel,
    +            "new_name": new_name,
    +        }
    +    )
    +    return self.api_call("admin.conversations.unlinkObjects", params=kwargs)
    +
    +

    Unlink a Salesforce record from a channel. +https://api.slack.com/methods/admin.conversations.unlinkObjects

    +
    def admin_emoji_add(self, *, name: str, url: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    @@ -14100,6 +14241,7 @@

    admin_conversations_convertToPrivate
  • admin_conversations_convertToPublic
  • admin_conversations_create
  • +
  • admin_conversations_createForObjects
  • admin_conversations_delete
  • admin_conversations_disconnectShared
  • admin_conversations_ekm_listOriginalConnectedChannelInfo
  • @@ -14107,6 +14249,7 @@

    admin_conversations_getCustomRetention
  • admin_conversations_getTeams
  • admin_conversations_invite
  • +
  • admin_conversations_linkObjects
  • admin_conversations_lookup
  • admin_conversations_removeCustomRetention
  • admin_conversations_rename
  • @@ -14118,6 +14261,7 @@

    admin_conversations_setCustomRetention
  • admin_conversations_setTeams
  • admin_conversations_unarchive
  • +
  • admin_conversations_unlinkObjects
  • admin_emoji_add
  • admin_emoji_addAlias
  • admin_emoji_list
  • @@ -14377,7 +14521,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/web/legacy_slack_response.html b/docs/static/api-docs/slack_sdk/web/legacy_slack_response.html index c3e20da4e..c0531066d 100644 --- a/docs/static/api-docs/slack_sdk/web/legacy_slack_response.html +++ b/docs/static/api-docs/slack_sdk/web/legacy_slack_response.html @@ -3,7 +3,7 @@ - + slack_sdk.web.legacy_slack_response API documentation @@ -408,7 +408,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/web/slack_response.html b/docs/static/api-docs/slack_sdk/web/slack_response.html index be655b57f..6746b3c7d 100644 --- a/docs/static/api-docs/slack_sdk/web/slack_response.html +++ b/docs/static/api-docs/slack_sdk/web/slack_response.html @@ -3,7 +3,7 @@ - + slack_sdk.web.slack_response API documentation @@ -379,7 +379,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/webhook/async_client.html b/docs/static/api-docs/slack_sdk/webhook/async_client.html index 84c9eeb06..9c1a83fd0 100644 --- a/docs/static/api-docs/slack_sdk/webhook/async_client.html +++ b/docs/static/api-docs/slack_sdk/webhook/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.webhook.async_client API documentation @@ -531,7 +531,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/webhook/client.html b/docs/static/api-docs/slack_sdk/webhook/client.html index 4a6cd8625..6400d63d6 100644 --- a/docs/static/api-docs/slack_sdk/webhook/client.html +++ b/docs/static/api-docs/slack_sdk/webhook/client.html @@ -3,7 +3,7 @@ - + slack_sdk.webhook.client API documentation @@ -521,7 +521,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/webhook/index.html b/docs/static/api-docs/slack_sdk/webhook/index.html index 31124748a..31f7a7e40 100644 --- a/docs/static/api-docs/slack_sdk/webhook/index.html +++ b/docs/static/api-docs/slack_sdk/webhook/index.html @@ -3,7 +3,7 @@ - + slack_sdk.webhook API documentation @@ -579,7 +579,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/webhook/internal_utils.html b/docs/static/api-docs/slack_sdk/webhook/internal_utils.html index d31af2920..118a7100f 100644 --- a/docs/static/api-docs/slack_sdk/webhook/internal_utils.html +++ b/docs/static/api-docs/slack_sdk/webhook/internal_utils.html @@ -3,7 +3,7 @@ - + slack_sdk.webhook.internal_utils API documentation @@ -60,7 +60,7 @@

    Module slack_sdk.webhook.internal_utils

    diff --git a/docs/static/api-docs/slack_sdk/webhook/webhook_response.html b/docs/static/api-docs/slack_sdk/webhook/webhook_response.html index 90f3c9db3..f0c372b97 100644 --- a/docs/static/api-docs/slack_sdk/webhook/webhook_response.html +++ b/docs/static/api-docs/slack_sdk/webhook/webhook_response.html @@ -3,7 +3,7 @@ - + slack_sdk.webhook.webhook_response API documentation @@ -95,7 +95,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/slack_sdk/version.py b/slack_sdk/version.py index 733292976..a38bbbbbf 100644 --- a/slack_sdk/version.py +++ b/slack_sdk/version.py @@ -1,3 +1,3 @@ """Check the latest version at https://pypi.org/project/slack-sdk/""" -__version__ = "3.35.0" +__version__ = "3.36.0" From 97f546f73cabcf33ff19a471bf89f4742fab6e56 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Jul 2025 14:31:27 -0700 Subject: [PATCH 12/72] chore(deps): bump on-headers and compression in /docs (#1710) Bumps [on-headers](https://github.com/jshttp/on-headers) and [compression](https://github.com/expressjs/compression). These dependencies needed to be updated together. Updates `on-headers` from 1.0.2 to 1.1.0 - [Release notes](https://github.com/jshttp/on-headers/releases) - [Changelog](https://github.com/jshttp/on-headers/blob/master/HISTORY.md) - [Commits](https://github.com/jshttp/on-headers/compare/v1.0.2...v1.1.0) Updates `compression` from 1.8.0 to 1.8.1 - [Release notes](https://github.com/expressjs/compression/releases) - [Changelog](https://github.com/expressjs/compression/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/compression/compare/1.8.0...v1.8.1) --- updated-dependencies: - dependency-name: on-headers dependency-version: 1.1.0 dependency-type: indirect - dependency-name: compression dependency-version: 1.8.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 51d9cf44b..6a40e7198 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -5827,16 +5827,16 @@ } }, "node_modules/compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", - "on-headers": "~1.0.2", + "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" }, @@ -11871,9 +11871,9 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "license": "MIT", "engines": { "node": ">= 0.8" From b9a82388eb52d1a3c30c535e88ee2c0712a30874 Mon Sep 17 00:00:00 2001 From: Ian Davies Date: Fri, 1 Aug 2025 18:44:44 +0100 Subject: [PATCH 13/72] Fix python package name in installation guide (#1719) --- docs/content/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/installation.md b/docs/content/installation.md index 27ea590e0..f7ac0a9cd 100644 --- a/docs/content/installation.md +++ b/docs/content/installation.md @@ -3,7 +3,7 @@ This package supports Python 3.6 and higher. We recommend using [PyPI](https://pypi.python.org/pypi) for installation. Run the following command: ```bash -pip install slack_sdk +pip install slack-sdk ``` Alternatively, you can always pull the source code directly into your project: From 6324de57c22910147fbc1088c41b82bfd4fb2701 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 18:49:16 +0000 Subject: [PATCH 14/72] chore(deps): bump docutils from 0.21.2 to 0.22 (#1721) --- requirements/documentation.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/documentation.txt b/requirements/documentation.txt index 45461e1e3..3d2fbc81d 100644 --- a/requirements/documentation.txt +++ b/requirements/documentation.txt @@ -1,2 +1,2 @@ -docutils==0.21.2 +docutils==0.22 pdoc3==0.11.6 From d7851ce18a3c2e282aa581a99cdc0ae9cc6e9955 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 19:02:56 +0000 Subject: [PATCH 15/72] chore(deps): update pytest-asyncio requirement from <1 to <2 (#1722) --- requirements/testing.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/testing.txt b/requirements/testing.txt index c1ccbf9cd..984af2f4a 100644 --- a/requirements/testing.txt +++ b/requirements/testing.txt @@ -1,7 +1,7 @@ # pip install -r requirements/testing.txt aiohttp<4 # used for a WebSocket server mock pytest>=7.0.1,<9 -pytest-asyncio<1 # for async +pytest-asyncio<2 # for async pytest-cov>=2,<7 # while flake8 5.x have issues with Python 3.12, flake8 6.x requires Python >= 3.8.1, # so 5.x should be kept in order to stay compatible with Python 3.6/3.7 From 8ffd0c4d3cbeb5a39be3eeffbf4af89dca77d804 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 19:12:19 +0000 Subject: [PATCH 16/72] chore(deps): bump the react group in /docs with 2 updates (#1723) --- docs/package-lock.json | 18 +++++++++--------- docs/package.json | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 6a40e7198..129669128 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -15,8 +15,8 @@ "clsx": "^2.0.0", "docusaurus-theme-github-codeblock": "^2.0.2", "prism-react-renderer": "^2.4.1", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@docusaurus/module-type-aliases": "^3.5.2", @@ -13858,24 +13858,24 @@ } }, "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", + "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", + "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", "license": "MIT", "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { - "react": "^19.1.0" + "react": "^19.1.1" } }, "node_modules/react-fast-compare": { diff --git a/docs/package.json b/docs/package.json index 7ea5b1fca..12012d1cb 100644 --- a/docs/package.json +++ b/docs/package.json @@ -21,8 +21,8 @@ "clsx": "^2.0.0", "docusaurus-theme-github-codeblock": "^2.0.2", "prism-react-renderer": "^2.4.1", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@docusaurus/module-type-aliases": "^3.5.2", From 8922dc880fdedbaf8cd322ac16d00fc3e44a5613 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Fri, 1 Aug 2025 13:33:42 -0700 Subject: [PATCH 17/72] feat(web): add workflows.featured.{add|list|remove|set} methods (#1712) --- slack_sdk/web/async_client.py | 81 +++++++++++++++++-- slack_sdk/web/client.py | 81 +++++++++++++++++-- slack_sdk/web/legacy_client.py | 81 +++++++++++++++++-- .../web/test_web_client_coverage.py | 27 ++++++- 4 files changed, 245 insertions(+), 25 deletions(-) diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index 9334abfd2..f70aea1cc 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -14,23 +14,24 @@ import os import warnings from io import IOBase -from typing import Union, Sequence, Optional, Dict, Any, List +from typing import Any, Dict, List, Optional, Sequence, Union import slack_sdk.errors as e from slack_sdk.models.views import View + +from ..models.attachments import Attachment +from ..models.blocks import Block +from ..models.metadata import Metadata from .async_base_client import AsyncBaseClient, AsyncSlackResponse from .internal_utils import ( _parse_web_class_objects, - _update_call_participants, - _warn_if_text_or_attachment_fallback_is_missing, + _print_files_upload_v2_suggestion, _remove_none_values, _to_v2_file_upload_item, + _update_call_participants, _validate_for_legacy_client, - _print_files_upload_v2_suggestion, + _warn_if_text_or_attachment_fallback_is_missing, ) -from ..models.attachments import Attachment -from ..models.blocks import Block -from ..models.metadata import Metadata class AsyncWebClient(AsyncBaseClient): @@ -5415,6 +5416,72 @@ async def views_publish( # NOTE: Intentionally using json for the "view" parameter return await self.api_call("views.publish", json=kwargs) + async def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Add featured workflows to a channel. + https://api.slack.com/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.add", params=kwargs) + + async def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """List the featured workflows for specified channels. + https://api.slack.com/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return await self.api_call("workflows.featured.list", params=kwargs) + + async def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Remove featured workflows from a channel. + https://api.slack.com/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.remove", params=kwargs) + + async def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Set featured workflows for a channel. + https://api.slack.com/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.set", params=kwargs) + async def workflows_stepCompleted( self, *, diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index 80fbec86b..25cb9f73f 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -4,23 +4,24 @@ import os import warnings from io import IOBase -from typing import Union, Sequence, Optional, Dict, Any, List +from typing import Any, Dict, List, Optional, Sequence, Union import slack_sdk.errors as e from slack_sdk.models.views import View + +from ..models.attachments import Attachment +from ..models.blocks import Block +from ..models.metadata import Metadata from .base_client import BaseClient, SlackResponse from .internal_utils import ( _parse_web_class_objects, - _update_call_participants, - _warn_if_text_or_attachment_fallback_is_missing, + _print_files_upload_v2_suggestion, _remove_none_values, _to_v2_file_upload_item, + _update_call_participants, _validate_for_legacy_client, - _print_files_upload_v2_suggestion, + _warn_if_text_or_attachment_fallback_is_missing, ) -from ..models.attachments import Attachment -from ..models.blocks import Block -from ..models.metadata import Metadata class WebClient(BaseClient): @@ -5405,6 +5406,72 @@ def views_publish( # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Add featured workflows to a channel. + https://api.slack.com/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """List the featured workflows for specified channels. + https://api.slack.com/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Remove featured workflows from a channel. + https://api.slack.com/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Set featured workflows for a channel. + https://api.slack.com/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index 5496226bc..dc988ffd8 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -16,23 +16,24 @@ import os import warnings from io import IOBase -from typing import Union, Sequence, Optional, Dict, Any, List +from typing import Any, Dict, List, Optional, Sequence, Union import slack_sdk.errors as e from slack_sdk.models.views import View + +from ..models.attachments import Attachment +from ..models.blocks import Block +from ..models.metadata import Metadata from .legacy_base_client import LegacyBaseClient, SlackResponse from .internal_utils import ( _parse_web_class_objects, - _update_call_participants, - _warn_if_text_or_attachment_fallback_is_missing, + _print_files_upload_v2_suggestion, _remove_none_values, _to_v2_file_upload_item, + _update_call_participants, _validate_for_legacy_client, - _print_files_upload_v2_suggestion, + _warn_if_text_or_attachment_fallback_is_missing, ) -from ..models.attachments import Attachment -from ..models.blocks import Block -from ..models.metadata import Metadata class LegacyWebClient(LegacyBaseClient): @@ -5417,6 +5418,72 @@ def views_publish( # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Add featured workflows to a channel. + https://api.slack.com/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """List the featured workflows for specified channels. + https://api.slack.com/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Remove featured workflows from a channel. + https://api.slack.com/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Set featured workflows for a channel. + https://api.slack.com/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, diff --git a/tests/slack_sdk_async/web/test_web_client_coverage.py b/tests/slack_sdk_async/web/test_web_client_coverage.py index 531427ba1..f6410315e 100644 --- a/tests/slack_sdk_async/web/test_web_client_coverage.py +++ b/tests/slack_sdk_async/web/test_web_client_coverage.py @@ -7,16 +7,15 @@ from slack_sdk.web import WebClient from slack_sdk.web.async_client import AsyncWebClient from slack_sdk.web.legacy_client import LegacyWebClient +from tests.mock_web_api_server import cleanup_mock_web_api_server_async, setup_mock_web_api_server_async from tests.slack_sdk.web.mock_web_api_handler import MockHandler -from tests.mock_web_api_server import setup_mock_web_api_server_async, cleanup_mock_web_api_server_async - from tests.slack_sdk_async.helpers import async_test class TestWebClientCoverage(unittest.TestCase): - # 288 endpoints as of June 17, 2025 + # 292 endpoints as of July 22, 2025 # Can be fetched by running `var methodNames = [].slice.call(document.getElementsByClassName('apiReferenceFilterableList__listItemLink')).map(e => e.href.replace("https://api.slack.com/methods/", ""));console.log(methodNames.toString());console.log(methodNames.length);` on https://api.slack.com/methods - all_api_methods = "admin.analytics.getFile,admin.apps.activities.list,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.config.lookup,admin.apps.config.set,admin.apps.requests.cancel,admin.apps.requests.list,admin.apps.restricted.list,admin.audit.anomaly.allow.getItem,admin.audit.anomaly.allow.updateItem,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.bulkArchive,admin.conversations.bulkDelete,admin.conversations.bulkMove,admin.conversations.convertToPrivate,admin.conversations.convertToPublic,admin.conversations.create,admin.conversations.createForObjects,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.linkObjects,admin.conversations.lookup,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.unlinkObjects,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.functions.list,admin.functions.permissions.lookup,admin.functions.permissions.set,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.roles.addAssignments,admin.roles.listAssignments,admin.roles.removeAssignments,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.resetBulk,admin.users.session.setSettings,admin.users.unsupportedVersions.export,admin.workflows.collaborators.add,admin.workflows.collaborators.remove,admin.workflows.permissions.lookup,admin.workflows.search,admin.workflows.unpublish,admin.workflows.triggers.types.permissions.lookup,admin.workflows.triggers.types.permissions.set,api.test,apps.activities.list,apps.auth.external.delete,apps.auth.external.get,apps.connections.open,apps.uninstall,apps.datastore.bulkDelete,apps.datastore.bulkGet,apps.datastore.bulkPut,apps.datastore.count,apps.datastore.delete,apps.datastore.get,apps.datastore.put,apps.datastore.query,apps.datastore.update,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,assistant.search.context,assistant.threads.setStatus,assistant.threads.setSuggestedPrompts,assistant.threads.setTitle,auth.revoke,auth.test,auth.teams.list,bookmarks.add,bookmarks.edit,bookmarks.list,bookmarks.remove,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,canvases.access.delete,canvases.access.set,canvases.create,canvases.delete,canvases.edit,canvases.sections.lookup,channels.mark,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.unfurl,chat.update,chat.scheduledMessages.list,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,conversations.canvases.create,conversations.externalInvitePermissions.set,conversations.requestSharedInvite.approve,conversations.requestSharedInvite.deny,conversations.requestSharedInvite.list,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.completeUploadExternal,files.delete,files.getUploadURLExternal,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.comments.delete,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,functions.completeError,functions.completeSuccess,functions.distributions.permissions.add,functions.distributions.permissions.list,functions.distributions.permissions.remove,functions.distributions.permissions.set,functions.workflows.steps.list,functions.workflows.steps.responses.export,groups.mark,migration.exchange,oauth.access,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.billing.info,team.externalTeams.disconnect,team.externalTeams.list,team.preferences.list,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.discoverableContacts.lookup,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,workflows.triggers.permissions.add,workflows.triggers.permissions.list,workflows.triggers.permissions.remove,workflows.triggers.permissions.set,im.list,im.mark,mpim.list,mpim.mark".split( + all_api_methods = "admin.analytics.getFile,admin.apps.activities.list,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.config.lookup,admin.apps.config.set,admin.apps.requests.cancel,admin.apps.requests.list,admin.apps.restricted.list,admin.audit.anomaly.allow.getItem,admin.audit.anomaly.allow.updateItem,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.bulkArchive,admin.conversations.bulkDelete,admin.conversations.bulkMove,admin.conversations.convertToPrivate,admin.conversations.convertToPublic,admin.conversations.create,admin.conversations.createForObjects,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.linkObjects,admin.conversations.lookup,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.unlinkObjects,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.functions.list,admin.functions.permissions.lookup,admin.functions.permissions.set,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.roles.addAssignments,admin.roles.listAssignments,admin.roles.removeAssignments,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.resetBulk,admin.users.session.setSettings,admin.users.unsupportedVersions.export,admin.workflows.collaborators.add,admin.workflows.collaborators.remove,admin.workflows.permissions.lookup,admin.workflows.search,admin.workflows.unpublish,admin.workflows.triggers.types.permissions.lookup,admin.workflows.triggers.types.permissions.set,api.test,apps.activities.list,apps.auth.external.delete,apps.auth.external.get,apps.connections.open,apps.uninstall,apps.datastore.bulkDelete,apps.datastore.bulkGet,apps.datastore.bulkPut,apps.datastore.count,apps.datastore.delete,apps.datastore.get,apps.datastore.put,apps.datastore.query,apps.datastore.update,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,assistant.search.context,assistant.threads.setStatus,assistant.threads.setSuggestedPrompts,assistant.threads.setTitle,auth.revoke,auth.test,auth.teams.list,bookmarks.add,bookmarks.edit,bookmarks.list,bookmarks.remove,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,canvases.access.delete,canvases.access.set,canvases.create,canvases.delete,canvases.edit,canvases.sections.lookup,channels.mark,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.unfurl,chat.update,chat.scheduledMessages.list,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,conversations.canvases.create,conversations.externalInvitePermissions.set,conversations.requestSharedInvite.approve,conversations.requestSharedInvite.deny,conversations.requestSharedInvite.list,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.completeUploadExternal,files.delete,files.getUploadURLExternal,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.comments.delete,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,functions.completeError,functions.completeSuccess,functions.distributions.permissions.add,functions.distributions.permissions.list,functions.distributions.permissions.remove,functions.distributions.permissions.set,functions.workflows.steps.list,functions.workflows.steps.responses.export,groups.mark,migration.exchange,oauth.access,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.billing.info,team.externalTeams.disconnect,team.externalTeams.list,team.preferences.list,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.discoverableContacts.lookup,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.featured.add,workflows.featured.list,workflows.featured.remove,workflows.featured.set,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,workflows.triggers.permissions.add,workflows.triggers.permissions.list,workflows.triggers.permissions.remove,workflows.triggers.permissions.set,im.list,im.mark,mpim.list,mpim.mark".split( "," ) @@ -834,6 +833,26 @@ async def run_method(self, method_name, method, async_method): elif method_name == "views_update": self.api_methods_to_call.remove(method(view_id="V123", view={})["method"]) await async_method(view_id="V123", view={}) + elif method_name == "workflows_featured_add": + self.api_methods_to_call.remove(method(channel_id="C123", trigger_ids=["Ft123", "Ft234"])["method"]) + method(channel_id="C123", trigger_ids="Ft123,Ft234") + await async_method(channel_id="C123", trigger_ids=["Ft123", "Ft234"]) + await async_method(channel_id="C123", trigger_ids="Ft123,Ft234") + elif method_name == "workflows_featured_list": + self.api_methods_to_call.remove(method(channel_ids=["C123", "C234"])["method"]) + method(channel_ids="C123,C234") + await async_method(channel_ids=["C123", "C234"]) + await async_method(channel_ids="C123,C234") + elif method_name == "workflows_featured_remove": + self.api_methods_to_call.remove(method(channel_id="C123", trigger_ids=["Ft123", "Ft234"])["method"]) + method(channel_id="C123", trigger_ids="Ft123,Ft234") + await async_method(channel_id="C123", trigger_ids=["Ft123", "Ft234"]) + await async_method(channel_id="C123", trigger_ids="Ft123,Ft234") + elif method_name == "workflows_featured_set": + self.api_methods_to_call.remove(method(channel_id="C123", trigger_ids=["Ft123", "Ft234"])["method"]) + method(channel_id="C123", trigger_ids="Ft123,Ft234") + await async_method(channel_id="C123", trigger_ids=["Ft123", "Ft234"]) + await async_method(channel_id="C123", trigger_ids="Ft123,Ft234") elif method_name == "workflows_stepCompleted": self.api_methods_to_call.remove(method(workflow_step_execute_id="S123", outputs={})["method"]) await async_method(workflow_step_execute_id="S123", outputs={}) From b401e588eb4d6ed1d5a962545121cc2f0a99013b Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Tue, 5 Aug 2025 09:47:40 -0400 Subject: [PATCH 18/72] feat: support markdown_text parameter (#1718) * feat: support markdown_text parameter * fix format issues * rename test file and improve tests coverage * clean things up based on feedback * fix imports --- slack_sdk/web/async_client.py | 20 ++++++--- slack_sdk/web/client.py | 20 ++++++--- slack_sdk/web/internal_utils.py | 7 ++- slack_sdk/web/legacy_client.py | 20 ++++++--- ...t_web_client_msg_text_content_warnings.py} | 39 ++++++++++++++++- ...t_web_client_msg_text_content_warnings.py} | 43 ++++++++++++++++++- ...t_web_client_msg_text_content_warnings.py} | 40 ++++++++++++++++- 7 files changed, 167 insertions(+), 22 deletions(-) rename tests/slack_sdk/web/{test_web_client_issue_891.py => test_web_client_msg_text_content_warnings.py} (63%) rename tests/slack_sdk_async/web/{test_web_client_issue_891.py => test_web_client_msg_text_content_warnings.py} (64%) rename tests/web/{test_web_client_issue_891.py => test_web_client_msg_text_content_warnings.py} (63%) diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index f70aea1cc..44aa87830 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -30,7 +30,7 @@ _to_v2_file_upload_item, _update_call_participants, _validate_for_legacy_client, - _warn_if_text_or_attachment_fallback_is_missing, + _warn_if_message_text_content_is_missing, ) @@ -2695,6 +2695,7 @@ async def chat_postEphemeral( link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends an ephemeral message to a user in a channel. @@ -2714,11 +2715,12 @@ async def chat_postEphemeral( "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postEphemeral", json=kwargs) @@ -2742,6 +2744,7 @@ async def chat_postMessage( username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends a message to a channel. @@ -2766,11 +2769,12 @@ async def chat_postMessage( "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postMessage", json=kwargs) @@ -2779,7 +2783,7 @@ async def chat_scheduleMessage( *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2790,6 +2794,7 @@ async def chat_scheduleMessage( unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Schedules a message. @@ -2810,11 +2815,12 @@ async def chat_scheduleMessage( "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.scheduleMessage", json=kwargs) @@ -2867,6 +2873,7 @@ async def chat_update( parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Updates a message in a channel. @@ -2884,6 +2891,7 @@ async def chat_update( "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2892,7 +2900,7 @@ async def chat_update( kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return await self.api_call("chat.update", json=kwargs) diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index 25cb9f73f..b03621364 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -20,7 +20,7 @@ _to_v2_file_upload_item, _update_call_participants, _validate_for_legacy_client, - _warn_if_text_or_attachment_fallback_is_missing, + _warn_if_message_text_content_is_missing, ) @@ -2685,6 +2685,7 @@ def chat_postEphemeral( link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. @@ -2704,11 +2705,12 @@ def chat_postEphemeral( "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2732,6 +2734,7 @@ def chat_postMessage( username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. @@ -2756,11 +2759,12 @@ def chat_postMessage( "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2769,7 +2773,7 @@ def chat_scheduleMessage( *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2780,6 +2784,7 @@ def chat_scheduleMessage( unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. @@ -2800,11 +2805,12 @@ def chat_scheduleMessage( "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) @@ -2857,6 +2863,7 @@ def chat_update( parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. @@ -2874,6 +2881,7 @@ def chat_update( "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2882,7 +2890,7 @@ def chat_update( kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) diff --git a/slack_sdk/web/internal_utils.py b/slack_sdk/web/internal_utils.py index ca76e3555..41a870c5c 100644 --- a/slack_sdk/web/internal_utils.py +++ b/slack_sdk/web/internal_utils.py @@ -247,12 +247,17 @@ def _to_0_or_1_if_bool(v: Any) -> Union[Any, str]: return v -def _warn_if_text_or_attachment_fallback_is_missing(endpoint: str, kwargs: Dict[str, Any]) -> None: +def _warn_if_message_text_content_is_missing(endpoint: str, kwargs: Dict[str, Any]) -> None: text = kwargs.get("text") if text and len(text.strip()) > 0: # If a top-level text arg is provided, we are good. This is the recommended accessibility field to always provide. return + markdown_text = kwargs.get("markdown_text") + if markdown_text and len(markdown_text.strip()) > 0: + # If a top-level markdown_text arg is provided, we are good. It should not be used in conjunction with text. + return + # for unit tests etc. skip_deprecation = os.environ.get("SKIP_SLACK_SDK_WARNING") if skip_deprecation: diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index dc988ffd8..6bb8a8154 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -32,7 +32,7 @@ _to_v2_file_upload_item, _update_call_participants, _validate_for_legacy_client, - _warn_if_text_or_attachment_fallback_is_missing, + _warn_if_message_text_content_is_missing, ) @@ -2697,6 +2697,7 @@ def chat_postEphemeral( link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends an ephemeral message to a user in a channel. @@ -2716,11 +2717,12 @@ def chat_postEphemeral( "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2744,6 +2746,7 @@ def chat_postMessage( username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends a message to a channel. @@ -2768,11 +2771,12 @@ def chat_postMessage( "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2781,7 +2785,7 @@ def chat_scheduleMessage( *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2792,6 +2796,7 @@ def chat_scheduleMessage( unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Schedules a message. @@ -2812,11 +2817,12 @@ def chat_scheduleMessage( "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) @@ -2869,6 +2875,7 @@ def chat_update( parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Updates a message in a channel. @@ -2886,6 +2893,7 @@ def chat_update( "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2894,7 +2902,7 @@ def chat_update( kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) diff --git a/tests/slack_sdk/web/test_web_client_issue_891.py b/tests/slack_sdk/web/test_web_client_msg_text_content_warnings.py similarity index 63% rename from tests/slack_sdk/web/test_web_client_issue_891.py rename to tests/slack_sdk/web/test_web_client_msg_text_content_warnings.py index ed47b0e4d..e94adba07 100644 --- a/tests/slack_sdk/web/test_web_client_issue_891.py +++ b/tests/slack_sdk/web/test_web_client_msg_text_content_warnings.py @@ -1,11 +1,12 @@ import unittest +import warnings from slack_sdk import WebClient from tests.web.mock_web_api_handler import MockHandler from tests.mock_web_api_server import setup_mock_web_api_server, cleanup_mock_web_api_server -class TestWebClient_Issue_891(unittest.TestCase): +class TestWebClientMessageTextContentWarnings(unittest.TestCase): def setUp(self): setup_mock_web_api_server(self, MockHandler) @@ -65,3 +66,39 @@ def test_missing_fallback_warning_chat_update(self): with self.assertWarnsRegex(UserWarning, "`fallback` argument is missing"): resp = client.chat_update(channel="C111", ts="111.222", blocks=[], attachments=[{"text": "hi"}]) self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_postMessage(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_postMessage(channel="C111", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_postEphemeral(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_postEphemeral(channel="C111", user="U111", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_scheduleMessage(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_scheduleMessage(channel="C111", post_at="299876400", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_update(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_update(channel="C111", ts="111.222", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) diff --git a/tests/slack_sdk_async/web/test_web_client_issue_891.py b/tests/slack_sdk_async/web/test_web_client_msg_text_content_warnings.py similarity index 64% rename from tests/slack_sdk_async/web/test_web_client_issue_891.py rename to tests/slack_sdk_async/web/test_web_client_msg_text_content_warnings.py index 1e81f775d..085b103d9 100644 --- a/tests/slack_sdk_async/web/test_web_client_issue_891.py +++ b/tests/slack_sdk_async/web/test_web_client_msg_text_content_warnings.py @@ -1,4 +1,5 @@ import unittest +import warnings from slack_sdk.web.async_client import AsyncWebClient from tests.helpers import async_test @@ -6,7 +7,7 @@ from tests.mock_web_api_server import setup_mock_web_api_server_async, cleanup_mock_web_api_server_async -class TestWebClient_Issue_829(unittest.TestCase): +class TestWebClientMessageTextContentWarnings(unittest.TestCase): def setUp(self): setup_mock_web_api_server_async(self, MockHandler) @@ -74,3 +75,43 @@ async def test_missing_fallback_warning_chat_update(self): with self.assertWarnsRegex(UserWarning, "`text` argument is missing"): resp = await client.chat_update(channel="C111", ts="111.222", blocks=[], attachments=[{"text": "hi"}]) self.assertIsNone(resp["error"]) + + @async_test + async def test_no_warning_when_markdown_text_is_provided_chat_postMessage(self): + client = AsyncWebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = await client.chat_postMessage(channel="C111", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + @async_test + async def test_no_warning_when_markdown_text_is_provided_chat_postEphemeral(self): + client = AsyncWebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = await client.chat_postEphemeral(channel="C111", user="U111", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + @async_test + async def test_no_warning_when_markdown_text_is_provided_chat_scheduleMessage(self): + client = AsyncWebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = await client.chat_scheduleMessage(channel="C111", post_at="299876400", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + @async_test + async def test_no_warning_when_markdown_text_is_provided_chat_update(self): + client = AsyncWebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = await client.chat_update(channel="C111", ts="111.222", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) diff --git a/tests/web/test_web_client_issue_891.py b/tests/web/test_web_client_msg_text_content_warnings.py similarity index 63% rename from tests/web/test_web_client_issue_891.py rename to tests/web/test_web_client_msg_text_content_warnings.py index f2d341f49..11ca100ac 100644 --- a/tests/web/test_web_client_issue_891.py +++ b/tests/web/test_web_client_msg_text_content_warnings.py @@ -1,16 +1,18 @@ import unittest +import warnings from slack import WebClient from tests.web.mock_web_api_handler import MockHandler from tests.mock_web_api_server import setup_mock_web_api_server, cleanup_mock_web_api_server -class TestWebClient_Issue_891(unittest.TestCase): +class TestWebClientMessageTextContentWarnings(unittest.TestCase): def setUp(self): setup_mock_web_api_server(self, MockHandler) def tearDown(self): cleanup_mock_web_api_server(self) + warnings.resetwarnings() def test_missing_text_warning_chat_postMessage(self): client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") @@ -65,3 +67,39 @@ def test_missing_fallback_warning_chat_update(self): with self.assertWarnsRegex(UserWarning, "`fallback` argument is missing"): resp = client.chat_update(channel="C111", ts="111.222", blocks=[], attachments=[{"text": "hi"}]) self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_postMessage(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_postMessage(channel="C111", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_postEphemeral(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_postEphemeral(channel="C111", user="U111", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_scheduleMessage(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_scheduleMessage(channel="C111", post_at="299876400", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_update(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_update(channel="C111", ts="111.222", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) From d238bd620e6b81fa896d05a444658cebb0585a4a Mon Sep 17 00:00:00 2001 From: Ashley <12901850+hello-ashleyintech@users.noreply.github.com> Date: Wed, 6 Aug 2025 13:46:01 -0400 Subject: [PATCH 19/72] Make team_id optional for admin_users_list (#1725) * make team_id optional for admin_users_list * lint --- slack_sdk/web/async_client.py | 2 +- slack_sdk/web/client.py | 2 +- slack_sdk/web/legacy_client.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index 44aa87830..f9a31428a 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -1730,7 +1730,7 @@ async def admin_users_invite( async def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index b03621364..1747e0d45 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -1720,7 +1720,7 @@ def admin_users_invite( def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index 6bb8a8154..ed2177644 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -1732,7 +1732,7 @@ def admin_users_invite( def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, From 7e3ab80cdfc4c257c2b46b630546d38920502064 Mon Sep 17 00:00:00 2001 From: Luke Russell <31357343+lukegalbraithrussell@users.noreply.github.com> Date: Thu, 7 Aug 2025 11:59:01 -0700 Subject: [PATCH 20/72] Build: remove docusaurus configuration files (#1716) * removes docusaurus build * new image links * moves index * matching admonition style of main site * matching sidbear * moving stuff * renaming reference folder * moved sidbear to english * sidebar formatting * wrong links in sidebar * matching sidebar format * oops js * sidebar tweaking * links * more links * removes deploy docs workflow * proper reference * reference link for real * links * tools * saving * reference link * title change * links * saving --- .github/workflows/docs-deploy.yml | 65 - README.md | 12 +- docs/.gitignore | 3 - docs/README.md | 107 - docs/babel.config.js | 3 - docs/content/index.md | 36 - docs/docusaurus.config.js | 84 - docs/english/_sidebar.json | 66 + docs/{content => english}/audit-logs.md | 6 +- docs/english/index.md | 36 + docs/{content => english}/installation.md | 19 +- docs/{content => english}/legacy/auth.md | 16 +- .../legacy/basic_usage.md | 52 +- docs/{content => english}/legacy/changelog.md | 2 +- .../legacy/conversations.md | 18 +- docs/{content => english}/legacy/faq.md | 4 +- docs/{content => english}/legacy/index.md | 8 +- .../legacy/real_time_messaging.md | 18 +- docs/{content => english}/oauth.md | 8 +- docs/{content => english}/rtm.md | 12 +- docs/{content => english}/scim.md | 6 +- docs/{content => english}/socket-mode.md | 2 +- .../tutorial}/understanding-oauth-approve.png | Bin .../tutorial}/understanding-oauth-flow.png | Bin .../tutorial/understanding-oauth-scopes.md | 10 +- .../tutorial}/upload-files-allow.png | Bin .../tutorial}/upload-files-bot-token.png | Bin .../tutorial}/upload-files-delete.png | Bin .../tutorial}/upload-files-first-upload.png | Bin .../tutorial}/upload-files-install.png | Bin .../tutorial}/upload-files-invite-bot.gif | Bin .../tutorial}/upload-files-local-file.png | Bin .../tutorial}/upload-files-with-channel.png | Bin .../tutorial/uploading-files.md | 24 +- docs/{content => english}/v3-migration.md | 10 +- docs/{content => english}/web.md | 62 +- docs/{content => english}/webhook.md | 8 +- docs/footerConfig.js | 21 - docs/navbarConfig.js | 93 - docs/package-lock.json | 16738 ---------------- docs/package.json | 46 - .../aiohttp_version_checker.html | 0 .../audit_logs/async_client.html | 0 .../audit_logs/index.html | 0 .../audit_logs/v1/async_client.html | 0 .../audit_logs/v1/client.html | 0 .../audit_logs/v1/index.html | 0 .../audit_logs/v1/internal_utils.html | 0 .../audit_logs/v1/logs.html | 0 .../audit_logs/v1/response.html | 0 .../slack_sdk => reference}/errors/index.html | 0 .../http_retry/async_handler.html | 0 .../http_retry/builtin_async_handlers.html | 0 .../http_retry/builtin_handlers.html | 0 .../builtin_interval_calculators.html | 0 .../http_retry/handler.html | 0 .../http_retry/index.html | 0 .../http_retry/interval_calculator.html | 0 .../http_retry/jitter.html | 0 .../http_retry/request.html | 0 .../http_retry/response.html | 0 .../http_retry/state.html | 0 .../slack_sdk => reference}/index.html | 0 .../models/attachments/index.html | 0 .../models/basic_objects.html | 0 .../models/blocks/basic_components.html | 0 .../models/blocks/block_elements.html | 0 .../models/blocks/blocks.html | 0 .../models/blocks/index.html | 0 .../models/dialoags.html | 0 .../models/dialogs/index.html | 0 .../slack_sdk => reference}/models/index.html | 0 .../models/messages/index.html | 0 .../models/messages/message.html | 0 .../models/metadata/index.html | 0 .../models/views/index.html | 0 .../oauth/authorize_url_generator/index.html | 0 .../slack_sdk => reference}/oauth/index.html | 0 .../installation_store/amazon_s3/index.html | 0 .../async_cacheable_installation_store.html | 0 .../async_installation_store.html | 0 .../cacheable_installation_store.html | 0 .../oauth/installation_store/file/index.html | 0 .../oauth/installation_store/index.html | 0 .../installation_store.html | 0 .../oauth/installation_store/internals.html | 0 .../oauth/installation_store/models/bot.html | 0 .../installation_store/models/index.html | 0 .../models/installation.html | 0 .../installation_store/sqlalchemy/index.html | 0 .../installation_store/sqlite3/index.html | 0 .../redirect_uri_page_renderer/index.html | 0 .../oauth/state_store/amazon_s3/index.html | 0 .../oauth/state_store/async_state_store.html | 0 .../oauth/state_store/file/index.html | 0 .../oauth/state_store/index.html | 0 .../oauth/state_store/sqlalchemy/index.html | 0 .../oauth/state_store/sqlite3/index.html | 0 .../oauth/state_store/state_store.html | 0 .../oauth/state_utils/index.html | 0 .../oauth/token_rotation/async_rotator.html | 0 .../oauth/token_rotation/index.html | 0 .../oauth/token_rotation/rotator.html | 0 .../proxy_env_variable_loader.html | 0 .../slack_sdk => reference}/rtm/index.html | 0 .../slack_sdk => reference}/rtm/v2/index.html | 0 .../slack_sdk => reference}/rtm_v2/index.html | 0 .../scim/async_client.html | 0 .../slack_sdk => reference}/scim/index.html | 0 .../scim/v1/async_client.html | 0 .../scim/v1/client.html | 0 .../scim/v1/default_arg.html | 0 .../scim/v1/group.html | 0 .../scim/v1/index.html | 0 .../scim/v1/internal_utils.html | 0 .../scim/v1/response.html | 0 .../scim/v1/types.html | 0 .../slack_sdk => reference}/scim/v1/user.html | 0 .../signature/index.html | 0 .../socket_mode/aiohttp/index.html | 0 .../socket_mode/async_client.html | 0 .../socket_mode/async_listeners.html | 0 .../socket_mode/builtin/client.html | 0 .../socket_mode/builtin/connection.html | 0 .../socket_mode/builtin/frame_header.html | 0 .../socket_mode/builtin/index.html | 0 .../socket_mode/builtin/internals.html | 0 .../socket_mode/client.html | 0 .../socket_mode/index.html | 0 .../socket_mode/interval_runner.html | 0 .../socket_mode/listeners.html | 0 .../socket_mode/logger/index.html | 0 .../socket_mode/logger/messages.html | 0 .../socket_mode/request.html | 0 .../socket_mode/response.html | 0 .../socket_mode/websocket_client/index.html | 0 .../socket_mode/websockets/index.html | 0 .../slack_sdk => reference}/version.html | 0 .../web/async_base_client.html | 0 .../web/async_client.html | 0 .../web/async_internal_utils.html | 0 .../web/async_slack_response.html | 0 .../web/base_client.html | 0 .../slack_sdk => reference}/web/client.html | 0 .../web/deprecation.html | 0 .../web/file_upload_v2_result.html | 0 .../slack_sdk => reference}/web/index.html | 0 .../web/internal_utils.html | 0 .../web/legacy_base_client.html | 0 .../web/legacy_client.html | 0 .../web/legacy_slack_response.html | 0 .../web/slack_response.html | 0 .../webhook/async_client.html | 0 .../webhook/client.html | 0 .../webhook/index.html | 0 .../webhook/internal_utils.html | 0 .../webhook/webhook_response.html | 0 docs/sidebars.js | 66 - docs/src/css/custom.css | 583 - docs/src/theme/NotFound/Content/index.js | 36 - docs/src/theme/NotFound/index.js | 19 - docs/static/img/bolt-logo.svg | 1 - docs/static/img/bolt-py-logo.svg | 1 - docs/static/img/favicon.ico | Bin 24499 -> 0 bytes docs/static/img/slack-logo-on-white.png | Bin 25811 -> 0 bytes docs/static/img/slack-logo.svg | 6 - tutorial/README.md | 1 - 167 files changed, 249 insertions(+), 18059 deletions(-) delete mode 100644 .github/workflows/docs-deploy.yml delete mode 100644 docs/.gitignore delete mode 100644 docs/README.md delete mode 100644 docs/babel.config.js delete mode 100644 docs/content/index.md delete mode 100644 docs/docusaurus.config.js create mode 100644 docs/english/_sidebar.json rename docs/{content => english}/audit-logs.md (87%) create mode 100644 docs/english/index.md rename docs/{content => english}/installation.md (88%) rename docs/{content => english}/legacy/auth.md (83%) rename docs/{content => english}/legacy/basic_usage.md (79%) rename docs/{content => english}/legacy/changelog.md (98%) rename docs/{content => english}/legacy/conversations.md (77%) rename docs/{content => english}/legacy/faq.md (91%) rename docs/{content => english}/legacy/index.md (75%) rename docs/{content => english}/legacy/real_time_messaging.md (53%) rename docs/{content => english}/oauth.md (94%) rename docs/{content => english}/rtm.md (66%) rename docs/{content => english}/scim.md (93%) rename docs/{content => english}/socket-mode.md (98%) rename docs/{static/img => english/tutorial}/understanding-oauth-approve.png (100%) rename docs/{static/img => english/tutorial}/understanding-oauth-flow.png (100%) rename docs/{content => english}/tutorial/understanding-oauth-scopes.md (94%) rename docs/{static/img => english/tutorial}/upload-files-allow.png (100%) rename docs/{static/img => english/tutorial}/upload-files-bot-token.png (100%) rename docs/{static/img => english/tutorial}/upload-files-delete.png (100%) rename docs/{static/img => english/tutorial}/upload-files-first-upload.png (100%) rename docs/{static/img => english/tutorial}/upload-files-install.png (100%) rename docs/{static/img => english/tutorial}/upload-files-invite-bot.gif (100%) rename docs/{static/img => english/tutorial}/upload-files-local-file.png (100%) rename docs/{static/img => english/tutorial}/upload-files-with-channel.png (100%) rename docs/{content => english}/tutorial/uploading-files.md (95%) rename docs/{content => english}/v3-migration.md (93%) rename docs/{content => english}/web.md (85%) rename docs/{content => english}/webhook.md (87%) delete mode 100644 docs/footerConfig.js delete mode 100644 docs/navbarConfig.js delete mode 100644 docs/package-lock.json delete mode 100644 docs/package.json rename docs/{static/api-docs/slack_sdk => reference}/aiohttp_version_checker.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/audit_logs/async_client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/audit_logs/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/audit_logs/v1/async_client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/audit_logs/v1/client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/audit_logs/v1/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/audit_logs/v1/internal_utils.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/audit_logs/v1/logs.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/audit_logs/v1/response.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/errors/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/http_retry/async_handler.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/http_retry/builtin_async_handlers.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/http_retry/builtin_handlers.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/http_retry/builtin_interval_calculators.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/http_retry/handler.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/http_retry/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/http_retry/interval_calculator.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/http_retry/jitter.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/http_retry/request.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/http_retry/response.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/http_retry/state.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/attachments/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/basic_objects.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/blocks/basic_components.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/blocks/block_elements.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/blocks/blocks.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/blocks/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/dialoags.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/dialogs/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/messages/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/messages/message.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/metadata/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/models/views/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/authorize_url_generator/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/amazon_s3/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/async_cacheable_installation_store.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/async_installation_store.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/cacheable_installation_store.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/file/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/installation_store.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/internals.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/models/bot.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/models/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/models/installation.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/sqlalchemy/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/installation_store/sqlite3/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/redirect_uri_page_renderer/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/state_store/amazon_s3/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/state_store/async_state_store.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/state_store/file/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/state_store/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/state_store/sqlalchemy/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/state_store/sqlite3/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/state_store/state_store.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/state_utils/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/token_rotation/async_rotator.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/token_rotation/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/oauth/token_rotation/rotator.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/proxy_env_variable_loader.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/rtm/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/rtm/v2/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/rtm_v2/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/scim/async_client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/scim/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/scim/v1/async_client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/scim/v1/client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/scim/v1/default_arg.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/scim/v1/group.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/scim/v1/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/scim/v1/internal_utils.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/scim/v1/response.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/scim/v1/types.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/scim/v1/user.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/signature/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/aiohttp/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/async_client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/async_listeners.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/builtin/client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/builtin/connection.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/builtin/frame_header.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/builtin/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/builtin/internals.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/interval_runner.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/listeners.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/logger/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/logger/messages.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/request.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/response.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/websocket_client/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/socket_mode/websockets/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/version.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/async_base_client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/async_client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/async_internal_utils.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/async_slack_response.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/base_client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/deprecation.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/file_upload_v2_result.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/internal_utils.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/legacy_base_client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/legacy_client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/legacy_slack_response.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/web/slack_response.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/webhook/async_client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/webhook/client.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/webhook/index.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/webhook/internal_utils.html (100%) rename docs/{static/api-docs/slack_sdk => reference}/webhook/webhook_response.html (100%) delete mode 100644 docs/sidebars.js delete mode 100644 docs/src/css/custom.css delete mode 100644 docs/src/theme/NotFound/Content/index.js delete mode 100644 docs/src/theme/NotFound/index.js delete mode 100644 docs/static/img/bolt-logo.svg delete mode 100644 docs/static/img/bolt-py-logo.svg delete mode 100644 docs/static/img/favicon.ico delete mode 100644 docs/static/img/slack-logo-on-white.png delete mode 100644 docs/static/img/slack-logo.svg diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml deleted file mode 100644 index ed18c4b1d..000000000 --- a/.github/workflows/docs-deploy.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: Deploy to GitHub Pages - -on: - pull_request: - branches: - - main - paths: - - "docs/**" - push: - branches: - - main - paths: - - "docs/**" - workflow_dispatch: - -jobs: - build: - name: Build Docusaurus - runs-on: ubuntu-latest - permissions: - contents: read - steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - fetch-depth: 0 - persist-credentials: false - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - with: - node-version: 20 - cache: npm - cache-dependency-path: docs/package-lock.json - - - name: Install dependencies - run: npm ci - working-directory: ./docs - - - name: Build website - run: npm run build - working-directory: ./docs - - - name: Upload Build Artifact - uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1 - with: - path: ./docs/build - - deploy: - name: Deploy to GitHub Pages - if: github.event_name != 'pull_request' - needs: build - - # Grant GITHUB_TOKEN the permissions required to make a Pages deployment - permissions: - pages: write # to deploy to Pages - id-token: write # verifies deployment is from an appropriate source - - # Deploy to the github-pages environment - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - - runs-on: ubuntu-latest - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5 diff --git a/README.md b/README.md index dceff689d..c1dabbab9 100644 --- a/README.md +++ b/README.md @@ -12,13 +12,13 @@ PyPI - Version Python Versions - + Documentation

    The Slack platform offers several APIs to build apps. Each Slack API delivers part of the capabilities from the platform, so that you can pick just those that fit for your needs. This SDK offers a corresponding package for each of Slack’s APIs. They are small and powerful when used independently, and work seamlessly when used together, too. -**Comprehensive documentation on using the Slack Python can be found at [https://tools.slack.dev/python-slack-sdk/](https://tools.slack.dev/python-slack-sdk/)** +**Comprehensive documentation on using the Slack Python can be found at [https://docs.slack.dev/tools/python-slack-sdk/](https://docs.slack.dev/tools/python-slack-sdk/)** --- @@ -36,11 +36,11 @@ The **Python Slack SDK** allows interaction with: - `slack_sdk.models`: for constructing [Block Kit](https://api.slack.com/block-kit) UI components using easy-to-use builders - `slack_sdk.rtm`: for utilizing the [RTM API][rtm-docs] -If you want to use our [Events API][events-docs] and Interactivity features, please check the [Bolt for Python][bolt-python] library. Details on the Tokens and Authentication can be found in our [Auth Guide](https://tools.slack.dev/python-slack-sdk/installation/). +If you want to use our [Events API][events-docs] and Interactivity features, please check the [Bolt for Python][bolt-python] library. Details on the Tokens and Authentication can be found in our [Auth Guide](https://docs.slack.dev/tools/python-slack-sdk/installation/). ## slackclient is in maintenance mode -Are you looking for [slackclient](https://pypi.org/project/slackclient/)? The website is live [here](https://tools.slack.dev/python-slackclient/) just like before. However, the slackclient project is in maintenance mode now and this [`slack_sdk`](https://pypi.org/project/slack-sdk/) is the successor. If you have time to make a migration to slack_sdk v3, please follow [our migration guide](https://tools.slack.dev/python-slack-sdk/v3-migration/) to ensure your app continues working after updating. +Are you looking for [slackclient](https://pypi.org/project/slackclient/)? The slackclient project is in maintenance mode now and this [`slack_sdk`](https://pypi.org/project/slack-sdk/) is the successor. If you have time to make a migration to slack_sdk v3, please follow [our migration guide](https://docs.slack.dev/tools/python-slack-sdk/v3-migration/) to ensure your app continues working after updating. ## Table of contents @@ -98,7 +98,7 @@ We've created this [tutorial](https://github.com/slackapi/python-slack-sdk/tree/ --- -Slack provide a Web API that gives you the ability to build applications that interact with Slack in a variety of ways. This Development Kit is a module based wrapper that makes interaction with that API easier. We have a basic example here with some of the more common uses but a full list of the available methods are available [here][api-methods]. More detailed examples can be found in [our guide](https://tools.slack.dev/python-slack-sdk/web/). +Slack provide a Web API that gives you the ability to build applications that interact with Slack in a variety of ways. This Development Kit is a module based wrapper that makes interaction with that API easier. We have a basic example here with some of the more common uses but a full list of the available methods are available [here][api-methods]. More detailed examples can be found in [our guide](https://docs.slack.dev/tools/python-slack-sdk/web/). #### Sending a message to Slack @@ -267,7 +267,7 @@ print(response) If you're migrating from slackclient v2.x of slack_sdk to v3.x, Please follow our migration guide to ensure your app continues working after updating. -**[Check out the Migration Guide here!](https://tools.slack.dev/python-slack-sdk/v3-migration/)** +**[Check out the Migration Guide here!](https://docs.slack.dev/tools/python-slack-sdk/v3-migration/)** ### Migrating from v1 diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 53a1610fd..000000000 --- a/docs/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -.docusaurus -build \ No newline at end of file diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index ddfb095c0..000000000 --- a/docs/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# tools.slack.dev/python-slack-sdk - -This website is built using [Docusaurus](https://docusaurus.io/). 'Tis cool. - -Each Bolt/SDK has its own Docusaurus website, with matching CSS and nav/footer. There is also be a Docusaurus website of just the homepage and community tools. - -``` -docs/ -├── content/ (the good stuff. md/mdx files supported) -│ ├── rtm.md -│ └── oauth.md -├── static/ -│ ├── api_docs/ (generated reference docs) -│ │ └── slack_sdk/ -│ │ │ └── index.html -│ ├── css/ -│ │ └── custom.css (the css for everything!) -│ └── img/ (the pictures for the site) -│ ├── rory.png -│ └── oslo.svg -├── src/ -│ └── theme (only contains the 404 page) -├── docusaurus.config.js (main config file) -├── footerConfig.js (footer. go to main repo to change) -├── navbarConfig.js (navbar. go to main repo to change) -└── sidebar.js (manually set where the content docs are in the sidebar.) -``` - -A cheat-sheet: -* _I want to edit a doc._ `docs/*/*.md` -* _I want to change the docs sidebar._ `sidebar.js` -* _I want to change the css._ Don't use this repo, use the home repo and the changes will propagate here. -* _I want to change anything else._ `docusaurus.config.js` - ----- - -## Adding a doc - -1. Make a markdown file. Add a `# Title` or use [front matter](https://docusaurus.io/docs/next/create-doc) with `title:`. -2. Save it in `docs/folder/title.md` or `docs/title.md`, depending on if it's in a sidebar category. The nuance is just for internal organization. -3. Add the doc's path to the sidebar within `docusaurus.config.js`. Where ever makes most sense for you. -4. Test the changes ↓ - ---- - -## Running locally - -Docusaurus requires at least Node 18. You can update Node however you want. `nvm` is one way. - -Install `nvm` if you don't have it: - -``` -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash -``` - -Then grab the latest version of Node. - -``` -nvm install node -``` - - -If you are running this project locally for the first time, you'll need to install the packages with the following command: - -``` -npm install -``` - -The following command starts a local development server and opens up a browser window. - -``` -npm run start -``` - -Edits to pages are reflected live — no restarting the server or reloading the page. (I'd say... 95% of the time, and 100% time if you're just editing a markdown file). FYI: The generated reference docs only load on build! - -Remember — you're only viewing the Python Slack SDK docs right now. ---- - -## Deploying - -The following command generates static content into the `build` directory. - -``` -$ npm run build -``` - -Then you can test out with the following command: - -``` -npm run serve -``` - -If it looks good, make a PR request! - -### Deployment to GitHub pages - -There is a GitHub action workflow set up in each repo. - -* On PR, it tests a site build. -* On Merge, it builds the site and deploys it. Site should update in a minute or two. - ---- - -## Something's broken - -Luke goofed. Open an issue please! `:bufo-appreciates-the-insight:` \ No newline at end of file diff --git a/docs/babel.config.js b/docs/babel.config.js deleted file mode 100644 index e00595dae..000000000 --- a/docs/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], -}; diff --git a/docs/content/index.md b/docs/content/index.md deleted file mode 100644 index d5c78b7de..000000000 --- a/docs/content/index.md +++ /dev/null @@ -1,36 +0,0 @@ -# Python Slack SDK - -The Slack Python SDK has corresponding packages for Slack APIs. They are small and powerful when used independently, and work seamlessly when used together, too. - -The Slack platform offers several APIs to build apps. Each Slack API delivers part of the capabilities from the platform, so that you can pick just those that fit your needs. - -## Features {#features} - -| Feature | Use | Package | -|--------------------------------|----------|-------| -| Web API | Send data to or query data from Slack using any of over 200 methods. | ``slack_sdk.web``, ``slack_sdk.web.async_client`` | -| Webhooks / `response_url` | Send a message using Incoming Webhooks or `response_url` | ``slack_sdk.webhook``, ``slack_sdk.webhook.async_client`` | -| Socket Mode | Receive and send messages over Socket Mode connections. | ``slack_sdk.socket_mode`` | -| OAuth | Setup the authentication flow using V2 OAuth, OpenID Connect for Slack apps. | ``slack_sdk.oauth`` | -| Audit Logs API | Receive audit logs API data. | ``slack_sdk.audit_logs`` | -| SCIM API | Utilize the SCIM APIs for provisioning and managing user accounts and groups. | ``slack_sdk.scim`` | -| RTM API | Listen for incoming messages and a limited set of events happening in Slack, using WebSocket. | ``slack_sdk.rtm_v2`` | -| Request Signature Verification | Verify incoming requests from the Slack API servers. | ``slack_sdk.signature`` | -| UI Builders | Construct UI components using easy-to-use builders. | ``slack_sdk.models`` | - -You can also view the [Python module documents](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/)! - -## Getting help {#getting-help} - -These docs have lots of information on the Python Slack SDK. There's also an in-depth Reference section. Please explore! - -If you get stuck, we're here to help. The following are the best ways to get assistance working through your issue: - -* [Issue Tracker](http://github.com/slackapi/python-slack-sdk/issues) for questions, bug reports, feature requests, and general discussion related to the Python Slack SDK. Try searching for an existing issue before creating a new one. -* [Email](mailto:support@slack.com) our developer support team: `support@slack.com`. - -## Contributing {#contributing} - -These docs live within the [Python Slack SDK](https://github.com/slackapi/python-slack-sdk) repository and are open source. - -We welcome contributions from everyone! Please check out our [Contributor's Guide](https://github.com/slackapi/python-slack-sdk/blob/main/.github/contributing.md) for how to contribute in a helpful and collaborative way. diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js deleted file mode 100644 index 3664238bd..000000000 --- a/docs/docusaurus.config.js +++ /dev/null @@ -1,84 +0,0 @@ -import { themes as prismThemes } from "prism-react-renderer"; -const footer = require("./footerConfig"); -const navbar = require("./navbarConfig"); - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: "Python Slack SDK", - tagline: "Official frameworks, libraries, and SDKs for Slack developers", - favicon: "img/favicon.ico", - url: "https://tools.slack.dev", - baseUrl: "/python-slack-sdk/", - organizationName: "slackapi", - projectName: "python-slack-sdk", - - onBrokenLinks: "warn", - onBrokenAnchors: "warn", - onBrokenMarkdownLinks: "warn", - - i18n: { - defaultLocale: "en", - locales: ["en"], - }, - - presets: [ - [ - "classic", - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - path: "content", - breadcrumbs: false, - routeBasePath: "/", // Serve the docs at the site's root - sidebarPath: "./sidebars.js", - editUrl: - "https://github.com/slackapi/python-slack-sdk/tree/main/docs", - }, - blog: false, - theme: { - customCss: "./src/css/custom.css", - }, - }), - ], - ], - - plugins: [ - "docusaurus-theme-github-codeblock", - [ - "@docusaurus/plugin-client-redirects", - { - redirects: [], - }, - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - colorMode: { - respectPrefersColorScheme: true, - }, - docs: { - sidebar: { - autoCollapseCategories: true, - }, - }, - navbar, - footer, - prism: { - // switch to alucard when available in prism? - theme: prismThemes.github, - darkTheme: prismThemes.dracula, - }, - codeblock: { - showGithubLink: true, - githubLinkLabel: "View on GitHub", - }, - // announcementBar: { - // id: `announcementBar`, - // content: `🎉️ Version 2.26.0 of developer tools for the Slack automations platform is here! 🎉️ `, - // }, - }), -}; - -export default config; diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json new file mode 100644 index 000000000..6e5aa7358 --- /dev/null +++ b/docs/english/_sidebar.json @@ -0,0 +1,66 @@ +[ + { + "type": "doc", + "id": "tools/python-slack-sdk/index", + "label": "Python Slack SDK", + "className": "sidebar-title" + }, + { + "type": "html", + "value": "
    " + }, + "tools/python-slack-sdk/installation", + "tools/python-slack-sdk/web", + "tools/python-slack-sdk/webhook", + "tools/python-slack-sdk/socket-mode", + "tools/python-slack-sdk/oauth", + "tools/python-slack-sdk/audit-logs", + "tools/python-slack-sdk/rtm", + "tools/python-slack-sdk/scim", + { "type": "html", "value": "
    " }, + { + "type": "category", + "label": "Legacy slackclient v2", + "items": [ + "tools/python-slack-sdk/legacy/index", + "tools/python-slack-sdk/legacy/auth", + "tools/python-slack-sdk/legacy/basic_usage", + "tools/python-slack-sdk/legacy/conversations", + "tools/python-slack-sdk/legacy/real_time_messaging", + "tools/python-slack-sdk/legacy/faq", + "tools/python-slack-sdk/legacy/changelog" + ] + }, + "tools/python-slack-sdk/v3-migration", + { "type": "html", "value": "
    " }, + { + "type": "category", + "label": "Tutorials", + "items": [ + "tools/python-slack-sdk/tutorial/uploading-files", + "tools/python-slack-sdk/tutorial/understanding-oauth-scopes" + ] + }, + { "type": "html", "value": "
    " }, + { + "type": "link", + "label": "Reference", + "href": "https://docs.slack.dev/tools/python-slack-sdk/reference/index.html" + }, + { "type": "html", "value": "
    " }, + { + "type": "link", + "label": "Release notes", + "href": "https://github.com/slackapi/python-slack-sdk/releases" + }, + { + "type": "link", + "label": "Code on GitHub", + "href": "https://github.com/SlackAPI/python-slack-sdk" + }, + { + "type": "link", + "label": "Contributors Guide", + "href": "https://github.com/SlackAPI/python-slack-sdk/blob/main/.github/contributing.md" + } +] diff --git a/docs/content/audit-logs.md b/docs/english/audit-logs.md similarity index 87% rename from docs/content/audit-logs.md rename to docs/english/audit-logs.md index fe4317d09..6f10849cb 100644 --- a/docs/content/audit-logs.md +++ b/docs/english/audit-logs.md @@ -1,6 +1,6 @@ # Audit Logs API client -The [Audit Logs API](https://docs.slack.dev/admins/audit-logs-api) is a set of APIs that you can use to monitor what's happening in your [Enterprise Grid](https://docs.slack.dev/enterprise-grid) organization. +The [Audit Logs API](/admins/audit-logs-api) is a set of APIs that you can use to monitor what's happening in your [Enterprise Grid](/enterprise-grid) organization. The Audit Logs API can be used by Security Information and Event Management (SIEM) tools to provide an analysis of how your Slack organization is being accessed. You can also use this API to write your own apps to see how members of your organization are using Slack. @@ -10,11 +10,11 @@ You'll need a valid token in order to use the Audit Logs API. In addition, the S ## AuditLogsClient {#auditlogsclient} -An OAuth token with [the admin scope](https://docs.slack.dev/reference/scopes/admin) is required to access this API. +An OAuth token with [the admin scope](/reference/scopes/admin) is required to access this API. You'll likely use the `/logs` endpoint as it's the essential part of this API. -To learn about the available parameters for this endpoint, check out [using the Audit Logs API](https://docs.slack.dev/admins/audit-logs-api). You can also learn more about the data structure of `api_response.typed_body` from [the class source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/audit_logs/v1/logs.py). +To learn about the available parameters for this endpoint, check out [using the Audit Logs API](/admins/audit-logs-api). You can also learn more about the data structure of `api_response.typed_body` from [the class source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/audit_logs/v1/logs.py). ``` python import os diff --git a/docs/english/index.md b/docs/english/index.md new file mode 100644 index 000000000..7e5a47fb7 --- /dev/null +++ b/docs/english/index.md @@ -0,0 +1,36 @@ +# Python Slack SDK + +The Slack Python SDK has corresponding packages for Slack APIs. They are small and powerful when used independently, and work seamlessly when used together, too. + +The Slack platform offers several APIs to build apps. Each Slack API delivers part of the capabilities from the platform, so that you can pick just those that fit your needs. + +## Features {#features} + +| Feature | Use | Package | +|---|---|---| +| [Web API](/tools/python-slack-sdk/web) | Send data to or query data from Slack using any of over 200 methods. | `slack_sdk.web`, `slack_sdk.web.async_client` | +| [Webhooks](/tools/python-slack-sdk/webhook) / `response_url` | Send a message using Incoming Webhooks or `response_url` | `slack_sdk.webhook`, `slack_sdk.webhook.async_client` | +| [Socket Mode](/tools/python-slack-sdk/socket-mode) | Receive and send messages over Socket Mode connections. | `slack_sdk.socket_mode` | +| [OAuth](/tools/python-slack-sdk/oauth) | Setup the authentication flow using V2 OAuth, OpenID Connect for Slack apps. | `slack_sdk.oauth` | +| [Audit Logs API](/tools/python-slack-sdk/audit-logs) | Receive audit logs API data. | `slack_sdk.audit_logs` | +| [SCIM API](/tools/python-slack-sdk/scim) | Utilize the SCIM APIs for provisioning and managing user accounts and groups. | `slack_sdk.scim` | +| [RTM API](/tools/python-slack-sdk/rtm) | Listen for incoming messages and a limited set of events happening in Slack, using WebSocket. | `slack_sdk.rtm_v2` | +| Request Signature Verification | Verify incoming requests from the Slack API servers. | `slack_sdk.signature` | +| UI Builders | Construct UI components using easy-to-use builders. | `slack_sdk.models` | + +You can also view the [Python module documents](https://docs.slack.dev/python-slack-sdk/reference)! + +## Getting help {#getting-help} + +These docs have lots of information on the Python Slack SDK. There's also an in-depth Reference section. Please explore! + +If you get stuck, we're here to help. The following are the best ways to get assistance working through your issue: + +* [Issue Tracker](http://github.com/slackapi/python-slack-sdk/issues) for questions, bug reports, feature requests, and general discussion related to the Python Slack SDK. Try searching for an existing issue before creating a new one. +* [Email](mailto:support@slack.com) our developer support team: `support@slack.com`. + +## Contributing {#contributing} + +These docs live within the [Python Slack SDK](https://github.com/slackapi/python-slack-sdk) repository and are open source. + +We welcome contributions from everyone! Please check out our [Contributor's Guide](https://github.com/slackapi/python-slack-sdk/blob/main/.github/contributing.md) for how to contribute in a helpful and collaborative way. diff --git a/docs/content/installation.md b/docs/english/installation.md similarity index 88% rename from docs/content/installation.md rename to docs/english/installation.md index f7ac0a9cd..9c8bfec23 100644 --- a/docs/content/installation.md +++ b/docs/english/installation.md @@ -41,17 +41,16 @@ It's also good to try on the Python REPL. ## Access tokens {#handling-tokens} -Making calls to the Slack API often requires a [token](https://docs.slack.dev/authentication/tokens) with associated scopes that grant access to resources. Collecting a token can be done from app settings or with an OAuth installation depending on your app's requirements. +Making calls to the Slack API often requires a [token](/authentication/tokens) with associated scopes that grant access to resources. Collecting a token can be done from app settings or with an OAuth installation depending on your app's requirements. **Always keep your access tokens safe.** The OAuth token you use to call the Slack Web API has access to the data on the workspace where it is installed. Depending on the scopes granted to the token, it potentially has the ability to read and write data. Treat these tokens just as you would a password — don't publish them, don't check them into source code, and don't share them with others. -:::danger - -Never do the following: +:::danger[Never do the following] ```python +# don't do this! token = 'xoxb-111-222-xxxxx' ``` @@ -70,21 +69,21 @@ import os SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"] ``` -Refer to our [best practices for security](https://docs.slack.dev/authentication/best-practices-for-security) page for more information. +Refer to our [best practices for security](/authentication/best-practices-for-security) page for more information. ## Installing on a single workspace {#single-workspace} If you're building an application for a single Slack workspace, there's no need to build out the entire OAuth flow. Once you've set up your features, click the **Install App to Team** button on the **Install App** page. If you add new permission scopes or Slack app features after an app has been installed, you must reinstall the app to your workspace for the changes to take effect. -Refer to the [quickstart](https://docs.slack.dev/quickstart) guide for more details. +Refer to the [Slack quickstart](/quickstart) guide for more details. ## Installing on multiple workspaces {#multi-workspace} -If you intend for an app to be installed on multiple Slack workspaces, you will need to handle this installation via the industry-standard OAuth protocol. Read more about [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth). +If you intend for an app to be installed on multiple Slack workspaces, you will need to handle this installation via the industry-standard OAuth protocol. Read more about [installing with OAuth](/authentication/installing-with-oauth). The OAuth exchange is facilitated via HTTP and requires a webserver; in this example, we'll use [Flask](https://flask.palletsprojects.com/). -To configure your app for OAuth, you'll need a client ID, a client secret, and a set of one or more scopes that will be applied to the token once it is granted. The client ID and client secret are available from the [app page](https://api.slack.com/apps). The scopes are determined by the functionality of the app — every method you wish to access has a corresponding scope, and your app will need to request that scope in order to be able to access the method. Review the full list of [OAuth scopes](https://docs.slack.dev/reference/scopes). +To configure your app for OAuth, you'll need a client ID, a client secret, and a set of one or more scopes that will be applied to the token once it is granted. The client ID and client secret are available from the [app page](https://api.slack.com/apps). The scopes are determined by the functionality of the app — every method you wish to access has a corresponding scope, and your app will need to request that scope in order to be able to access the method. Review the full list of [OAuth scopes](/reference/scopes). ```python import os @@ -116,7 +115,7 @@ def pre_install(): ### The OAuth completion page {#oauth-completion} -Once the user has agreed to the permissions you've requested, Slack will redirect the user to your auth completion page, which includes a `code` query string parameter. You'll use the `code` parameter to call the [`oauth.v2.access`](https://docs.slack.dev/reference/methods/oauth.v2.access) API method that will grant you the token. +Once the user has agreed to the permissions you've requested, Slack will redirect the user to your auth completion page, which includes a `code` query string parameter. You'll use the `code` parameter to call the [`oauth.v2.access`](/reference/methods/oauth.v2.access) API method that will grant you the token. ```python @app.route("/slack/oauth_redirect", methods=["GET"]) @@ -171,7 +170,7 @@ if __name__ == "__main__": Once your user has completed the OAuth flow, you'll be able to use the provided tokens to call any of the Slack Web API methods that require an access token. -Refer to the [basic usage](https://tools.slack.dev/python-slack-sdk/legacy/basic_usage) page for more examples. +Refer to the [basic usage](/tools/python-slack-sdk/legacy/basic_usage) page for more examples. ## Installation troubleshooting {#troubleshooting} diff --git a/docs/content/legacy/auth.md b/docs/english/legacy/auth.md similarity index 83% rename from docs/content/legacy/auth.md rename to docs/english/legacy/auth.md index 85bdd55d0..82671d042 100644 --- a/docs/content/legacy/auth.md +++ b/docs/english/legacy/auth.md @@ -1,8 +1,8 @@ # Tokens & installation -:::danger +:::danger[The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor.] -The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor. The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better asyncio support, retry handlers, and more. +The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better asyncio support, retry handlers, and more. ::: @@ -31,21 +31,21 @@ import os SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"] ``` -Refer to our [best practices for security](https://docs.slack.dev/authentication/best-practices-for-security) page for more information. +Refer to our [best practices for security](/authentication/best-practices-for-security) page for more information. ## Installing on a single workspace {#single-workspace} If you're building an application for a single Slack workspace, there's no need to build out the entire OAuth flow. Once you've set up your features, click the **Install App to Team** button on the **Install App** page. If you add new permission scopes or Slack app features after an app has been installed, you must reinstall the app to your workspace for the changes to take effect. -Refer to the [quickstart](https://docs.slack.dev/quickstart) guide for more details. +Refer to the [quickstart](/quickstart) guide for more details. ## Installing on multiple workspaces {#multi-workspace} -If you intend for an app to be installed on multiple Slack workspaces, you will need to handle this installation via the industry-standard OAuth protocol. Read more about [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth). +If you intend for an app to be installed on multiple Slack workspaces, you will need to handle this installation via the industry-standard OAuth protocol. Read more about [installing with OAuth](/authentication/installing-with-oauth). The OAuth exchange is facilitated via HTTP and requires a webserver; in this example, we'll use [Flask](https://flask.palletsprojects.com/). -To configure your app for OAuth, you'll need a client ID, a client secret, and a set of one or more scopes that will be applied to the token once it is granted. The client ID and client secret are available from the [app page](https://api.slack.com/apps). The scopes are determined by the functionality of the app — every method you wish to access has a corresponding scope, and your app will need to request that scope in order to be able to access the method. Review the full list of [OAuth scopes](https://docs.slack.dev/reference/scopes). +To configure your app for OAuth, you'll need a client ID, a client secret, and a set of one or more scopes that will be applied to the token once it is granted. The client ID and client secret are available from the [app page](https://api.slack.com/apps). The scopes are determined by the functionality of the app — every method you wish to access has a corresponding scope, and your app will need to request that scope in order to be able to access the method. Review the full list of [OAuth scopes](/reference/scopes). ``` python import os @@ -77,7 +77,7 @@ def pre_install(): ### The OAuth completion page {#oauth-completion} -Once the user has agreed to the permissions you've requested, Slack will redirect the user to your auth completion page, which includes a `code` query string parameter. You'll use the `code` parameter to call the [`oauth.v2.access`](https://docs.slack.dev/reference/methods/oauth.v2.access) API method that will grant you the token. +Once the user has agreed to the permissions you've requested, Slack will redirect the user to your auth completion page, which includes a `code` query string parameter. You'll use the `code` parameter to call the [`oauth.v2.access`](/reference/methods/oauth.v2.access) API method that will grant you the token. ``` python @app.route("/slack/oauth_redirect", methods=["GET"]) @@ -132,4 +132,4 @@ if __name__ == "__main__": Once your user has completed the OAuth flow, you'll be able to use the provided tokens to call any of the Slack Web API methods that require an access token. -Refer to the [basic usage](https://tools.slack.dev/python-slack-sdk/legacy/basic_usage) page for more examples. +Refer to the [basic usage](/tools/python-slack-sdk/legacy/basic_usage) page for more examples. diff --git a/docs/content/legacy/basic_usage.md b/docs/english/legacy/basic_usage.md similarity index 79% rename from docs/content/legacy/basic_usage.md rename to docs/english/legacy/basic_usage.md index c83fbc866..75094dd9f 100644 --- a/docs/content/legacy/basic_usage.md +++ b/docs/english/legacy/basic_usage.md @@ -1,16 +1,16 @@ # Basic usage -:::danger +:::danger[The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor.] -The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor. The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. +The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. ::: The Slack Web API allows you to build applications that interact with Slack in more complex ways than the integrations we provide out of the box. -Accessing Slack API methods requires an OAuth token — read more about [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth). +Accessing Slack API methods requires an OAuth token — read more about [installing with OAuth](/authentication/installing-with-oauth). -Each of these [API methods](https://docs.slack.dev/reference/methods) is fully documented on our developer site at [docs.slack.dev](https://docs.slack.dev/). +Each of these [API methods](/reference/methods) is fully documented on our developer site at [docs.slack.dev](/). ## Sending a message {#sending-messages} @@ -53,13 +53,13 @@ response = client.chat_postEphemeral( ) ``` -See the [`chat.postEphemeral`](https://docs.slack.dev/reference/methods/chat.postephemeral) API method for more details. +See the [`chat.postEphemeral`](/reference/methods/chat.postEphemeral) API method for more details. ## Formatting messages with Block Kit {#block-kit} -Messages posted from apps can contain more than just text; they can also include full user interfaces composed of blocks using [Block Kit](https://docs.slack.dev/block-kit). +Messages posted from apps can contain more than just text; they can also include full user interfaces composed of blocks using [Block Kit](/block-kit). -The [`chat.postMessage method`](https://docs.slack.dev/reference/methods/chat.postmessage) takes an optional blocks argument that allows you to customize the layout of a message. Blocks are specified in a single object literal, so just add additional keys for any optional argument. +The [`chat.postMessage method`](/reference/methods/chat.postMessage) takes an optional blocks argument that allows you to customize the layout of a message. Blocks are specified in a single object literal, so just add additional keys for any optional argument. To send a message to a channel, use the channel's ID. For DMs, use the user's ID. @@ -100,9 +100,7 @@ client.chat_postMessage( ) ``` -:::tip - -You can use [Block Kit Builder](https://app.slack.com/block-kit-builder/) to prototype your message's look and feel. +:::tip[You can use [Block Kit Builder](https://app.slack.com/block-kit-builder/) to prototype your message's look and feel.] ::: @@ -131,13 +129,13 @@ response = client.chat_postMessage( ) ``` -:::info +:::info[While threaded messages may contain attachments and message buttons, when your reply is broadcast to the channel, it'll actually be a reference to your reply and not the reply itself.] -While threaded messages may contain attachments and message buttons, when your reply is broadcast to the channel, it'll actually be a reference to your reply and not the reply itself. When appearing in the channel, it won't contain any attachments or message buttons. Updates and deletion of threaded replies works the same as regular messages. +When appearing in the channel, it won't contain any attachments or message buttons. Updates and deletion of threaded replies works the same as regular messages. ::: -Refer to the [threading messages](https://docs.slack.dev/messaging#threading) page for more information. +Refer to the [threading messages](/messaging#threading) page for more information. ## Updating a message {#updating-messages} @@ -151,7 +149,7 @@ response = client.chat_update( ) ``` -See the [`chat.update`](https://docs.slack.dev/reference/methods/chat.update) API method for formatting options and some special considerations when calling this with a bot user. +See the [`chat.update`](/reference/methods/chat.update) API method for formatting options and some special considerations when calling this with a bot user. ## Deleting a message {#deleting-messages} @@ -164,7 +162,7 @@ response = client.chat_delete( ) ``` -See the [`chat.delete`](https://docs.slack.dev/reference/methods/chat.delete) API method for more +See the [`chat.delete`](/reference/methods/chat.delete) API method for more details. ## Opening a modal {#opening-modals} @@ -246,7 +244,7 @@ if __name__ == "__main__": app.run("localhost", 3000) ``` -See the [`views.open`](https://docs.slack.dev/reference/methods/views.open) API method more details and additional parameters. +See the [`views.open`](/reference/methods/views.open) API method more details and additional parameters. To run the above example, the following [app configurations](https://api.slack.com/apps) are required: @@ -296,9 +294,9 @@ response = client.views_update( ) ``` -See the [`views.update`](https://docs.slack.dev/reference/methods/views.update) API method for more details. +See the [`views.update`](/reference/methods/views.update) API method for more details. -If you want to push a new view onto the modal instead of updating an existing view, see the [`views.push`](https://docs.slack.dev/reference/methods/views.push) API method. +If you want to push a new view onto the modal instead of updating an existing view, see the [`views.push`](/reference/methods/views.push) API method. ## Emoji reactions {#emoji} @@ -324,7 +322,7 @@ response = client.reactions_remove( ) ``` -See the [`reactions.add`](https://docs.slack.dev/reference/methods/reactions.add) and [`reactions.remove`](https://docs.slack.dev/reference/methods/reactions.remove) API methods for more details. +See the [`reactions.add`](/reference/methods/reactions.add) and [`reactions.remove`](/reference/methods/reactions.remove) API methods for more details. ## Listing public channels {#listing-public-channels} @@ -340,7 +338,7 @@ Archived channels are included by default. You can exclude them by passing `excl response = client.conversations_list(exclude_archived=1) ``` -See the [`conversations.list`](https://docs.slack.dev/reference/methods/conversations.list) API method for more details. +See the [`conversations.list`](/reference/methods/conversations.list) API method for more details. ## Getting a channel's info {#get-channel-info} @@ -350,7 +348,7 @@ Once you have the ID for a specific channel, you can fetch information about tha response = client.conversations_info(channel="C0XXXXXXX") ``` -See the [`conversations.info`](https://docs.slack.dev/reference/methods/conversations.info) API method for more details. +See the [`conversations.info`](/reference/methods/conversations.info) API method for more details. ## Joining a channel {#join-channel} @@ -362,7 +360,7 @@ response = client.conversations_join(channel="C0XXXXXXY") If you are already in the channel, the response is slightly different. The `already_in_channel` attribute will be true, and a limited `channel` object will be returned. Bot users cannot join a channel on their own, they need to be invited by another user. -See the [`conversations.join`](https://docs.slack.dev/reference/methods/conversations.join) API method for more details. +See the [`conversations.join`](/reference/methods/conversations.join) API method for more details. ------------------------------------------------------------------------ @@ -374,7 +372,7 @@ Maybe you've finished up all the business you had in a channel, or maybe you joi response = client.conversations_leave(channel="C0XXXXXXX") ``` -See the [`conversations.leave`](https://docs.slack.dev/reference/methods/conversations.leave) API method for more details. +See the [`conversations.leave`](/reference/methods/conversations.leave) API method for more details. ## Listing team members {#list-team-members} @@ -384,7 +382,7 @@ users = response["members"] user_ids = list(map(lambda u: u["id"], users)) ``` -See the [`users.list`](https://docs.slack.dev/reference/methods/users.list) API method for more details. +See the [`users.list`](/reference/methods/users.list) API method for more details. ## Uploading files {#uploading-files} @@ -396,7 +394,7 @@ response = client.files_upload_v2( ) ``` -See the [`files.upload`](https://docs.slack.dev/reference/methods/files.upload) API method for more details. +See the [`files.upload`](/reference/methods/files.upload) API method for more details. ## Calling API methods {#calling-API-methods} @@ -416,7 +414,7 @@ assert response["message"]["text"] == "Hello world!" ## Rate limits {#rate-limits} -When posting messages to a channel, Slack allows apps to send no more than one message per channel per second. We allow bursts over that limit for short periods; however, if your app continues to exceed the limit over a longer period of time, it will be rate limited. Different API methods have other limits — be sure to check the [rate limits](https://docs.slack.dev/apis/web-api/rate-limits) and test that your app has a graceful fallback if it should hit those limits. +When posting messages to a channel, Slack allows apps to send no more than one message per channel per second. We allow bursts over that limit for short periods; however, if your app continues to exceed the limit over a longer period of time, it will be rate limited. Different API methods have other limits — be sure to check the [rate limits](/apis/web-api/rate-limits) and test that your app has a graceful fallback if it should hit those limits. If you go over these limits, Slack will begin returning *HTTP 429 Too Many Requests* errors, a JSON object containing the number of calls you have been making, and a *Retry-After* header containing the number of seconds until you can retry. @@ -456,4 +454,4 @@ while True: raise e ``` -Refer to the [rate limits](https://docs.slack.dev/apis/web-api/rate-limits) page for more information. +Refer to the [rate limits](/apis/web-api/rate-limits) page for more information. diff --git a/docs/content/legacy/changelog.md b/docs/english/legacy/changelog.md similarity index 98% rename from docs/content/legacy/changelog.md rename to docs/english/legacy/changelog.md index 750028419..d58f0bf42 100644 --- a/docs/content/legacy/changelog.md +++ b/docs/english/legacy/changelog.md @@ -7,7 +7,7 @@ This is the first stable version of [slack_sdk](https://pypi.org/project/slack-s - Better async/sync separation for `WebClient` and `WebhookClient` - Renamed packages (from `slack` to `slack_sdk`) with deprecation warnings -Refer to [v3.0.0 milestone](https://github.com/slackapi/python-slack-sdk/milestone/10?closed=1) and [the website](https://tools.slack.dev/python-slack-sdk/) for details. If you're a `slackclient` user, the migration guide for `slackclient` v2.x users is available at http://localhost:3000/python-slack-sdk/v3-migration. +Refer to [v3.0.0 milestone](https://github.com/slackapi/python-slack-sdk/milestone/10?closed=1) and [the docs website](/tools/python-slack-sdk/) for details. If you're a `slackclient` user, the migration guide for `slackclient` v2.x users is available at http://localhost:3000/python-slack-sdk/v3-migration. ## v2.9.3 (2020-10-20) diff --git a/docs/content/legacy/conversations.md b/docs/english/legacy/conversations.md similarity index 77% rename from docs/content/legacy/conversations.md rename to docs/english/legacy/conversations.md index 6d53e620d..e617273ae 100644 --- a/docs/content/legacy/conversations.md +++ b/docs/english/legacy/conversations.md @@ -1,14 +1,14 @@ # Conversations API -:::danger +:::danger[The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor.] -The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor. The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. +The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. ::: The Slack Conversations API provides your app with a unified interface to work with all the channel-like things encountered in Slack: public channels, private channels, direct messages, group direct messages, and shared channels. -Refer to [using the Conversations API](https://docs.slack.dev/apis/web-api/using-the-conversations-api) for more information. +Refer to [using the Conversations API](/apis/web-api/using-the-conversations-api) for more information. ## Direct messages {#direct-messages} @@ -26,7 +26,7 @@ client = WebClient(token=os.environ["SLACK_API_TOKEN"]) response = client.conversations_open(users=["W123456789", "U987654321"]) ``` -See the [`conversations.open`](https://docs.slack.dev/reference/methods/conversations.open) API method for additional details. +See the [`conversations.open`](/reference/methods/conversations.open) API method for additional details. ## Creating channels {#creating-channels} @@ -47,7 +47,7 @@ channel_id = response["channel"]["id"] response = client.conversations_archive(channel=channel_id) ``` -See the [`conversations.create`](https://docs.slack.dev/reference/methods/conversations.create) API method for additional details. +See the [`conversations.create`](/reference/methods/conversations.create) API method for additional details. ## Getting conversation information {#more-information} @@ -64,7 +64,7 @@ response = client.conversations_info( ) ``` -See the [`conversations.info`](https://docs.slack.dev/reference/methods/conversations.info) API method for more details. +See the [`conversations.info`](/reference/methods/conversations.info) API method for more details. ## Listing conversations {#listing-conversations} @@ -91,7 +91,7 @@ response = client.conversations_list( ) ``` -See the [`conversations.list`](https://docs.slack.dev/reference/methods/conversations.list) API method for more details. +See the [`conversations.list`](/reference/methods/conversations.list) API method for more details. ## Getting members of a conversation {#get-members} @@ -106,7 +106,7 @@ response = client.conversations_members(channel="C16180339") user_ids = response["members"] ``` -See the [`conversations.members`](https://docs.slack.dev/reference/methods/conversations.members) API method for more details. +See the [`conversations.members`](/reference/methods/conversations.members) API method for more details. ## Leaving a conversation {#leave-conversations} @@ -120,4 +120,4 @@ client = WebClient(token=os.environ["SLACK_API_TOKEN"]) response = client.conversations_leave(channel="C27182818") ``` -See the [`conversations.leave`](https://docs.slack.dev/reference/methods/conversations.leave) API method for more details. +See the [`conversations.leave`](/reference/methods/conversations.leave) API method for more details. diff --git a/docs/content/legacy/faq.md b/docs/english/legacy/faq.md similarity index 91% rename from docs/content/legacy/faq.md rename to docs/english/legacy/faq.md index cae9326db..bc2d70fa0 100644 --- a/docs/content/legacy/faq.md +++ b/docs/english/legacy/faq.md @@ -1,8 +1,8 @@ # FAQs -:::danger +:::danger[The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor.] -The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor. The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. +The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. ::: diff --git a/docs/content/legacy/index.md b/docs/english/legacy/index.md similarity index 75% rename from docs/content/legacy/index.md rename to docs/english/legacy/index.md index 984cf6aca..eec165816 100644 --- a/docs/content/legacy/index.md +++ b/docs/english/legacy/index.md @@ -1,12 +1,12 @@ # Overview -:::danger +:::danger[The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor.] -The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor. The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. +The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. ::: -Refer to the [migration guide](https://tools.slack.dev/python-slack-sdk/v3-migration) to learn how to smoothly migrate your existing code. +Refer to the [migration guide](/tools/python-slack-sdk/v3-migration) to learn how to smoothly migrate your existing code. Slack APIs allow anyone to build full featured integrations that extend and expand the capabilities of your Slack workspace. These APIs allow you to build applications that interact with Slack just like the people on your team. They can post messages, respond to events that happen, and build complex UIs for getting work done. @@ -14,7 +14,7 @@ To make it easier for Python programmers to build Slack applications, we've prov ## Slack platform basics {#platform-basics} -If you're new to the Slack platform, we have a general purpose [quickstart guide](https://docs.slack.dev/quickstart) that isn't specific to any language or framework. Its a great place to learn all about the concepts that go into building a great Slack app. +If you're new to the Slack platform, we have a general purpose [quickstart guide](/quickstart) that isn't specific to any language or framework. Its a great place to learn all about the concepts that go into building a great Slack app. Before you get started building on the Slack platform, you need to set up [your app's configuration](https://api.slack.com/apps/new). This is where you define things like your apps permissions and the endpoints that Slack should use for interacting with the backend you'll build using Python. diff --git a/docs/content/legacy/real_time_messaging.md b/docs/english/legacy/real_time_messaging.md similarity index 53% rename from docs/content/legacy/real_time_messaging.md rename to docs/english/legacy/real_time_messaging.md index 1dd905284..3b16e3ecd 100644 --- a/docs/content/legacy/real_time_messaging.md +++ b/docs/english/legacy/real_time_messaging.md @@ -1,20 +1,20 @@ # Real Time Messaging (RTM) -:::danger +:::danger[The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor.] -The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor. The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. +The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. ::: -The [Legacy Real Time Messaging (RTM) API](https://docs.slack.dev/legacy/legacy-rtm-api) is a WebSocket-based API that allows you to receive events from Slack in real time and to send messages as users. +The [Legacy Real Time Messaging (RTM) API](/legacy/legacy-rtm-api) is a WebSocket-based API that allows you to receive events from Slack in real time and to send messages as users. -If you prefer events to be pushed to your app, we recommend using the HTTP-based [Events API](https://docs.slack.dev/apis/events-api) instead. The Events API contains some events that aren't supported in the Legacy RTM API (such as the [app_home_opened event](https://docs.slack.dev/reference/events/app_home_opened)), and it supports most of the event types in the Legacy RTM API. If you'd like to use the Events API, you can use the [Python Slack Events Adaptor](https://github.com/slackapi/python-slack-events-api). +If you prefer events to be pushed to your app, we recommend using the HTTP-based [Events API](/apis/events-api) instead. The Events API contains some events that aren't supported in the Legacy RTM API (such as the [app_home_opened event](/reference/events/app_home_opened)), and it supports most of the event types in the Legacy RTM API. If you'd like to use the Events API, you can use the [Python Slack Events Adaptor](https://github.com/slackapi/python-slack-events-api). The RTMClient allows apps to communicate with the Legacy RTM API. The event-driven architecture of this client allows you to simply link callbacks to their corresponding events. When an event occurs, this client executes your callback while passing along any information it receives. We also give you the ability to call our web client from inside your callbacks. -In our example below, we watch for a [message event](https://docs.slack.dev/reference/events/message) that contains \"Hello\" and if it's received, we call the `say_hello()` function. We then issue a call to the web client to post back to the channel saying \"Hi\" to the user. +In our example below, we watch for a [message event](/reference/events/message) that contains \"Hello\" and if it's received, we call the `say_hello()` function. We then issue a call to the web client to post back to the channel saying \"Hi\" to the user. ## Configuring the RTM API {#configuration} @@ -51,9 +51,9 @@ rtm_client.start() ## The `rtm.start` vs. `rtm.connect` API methods {#rtm-methods} -By default, the RTM client uses the [`rtm.connect`](https://docs.slack.dev/reference/methods/rtm.connect) API method to establish a WebSocket connection with Slack. The response contains basic information about the team and WebSocket URL. +By default, the RTM client uses the [`rtm.connect`](/reference/methods/rtm.connect) API method to establish a WebSocket connection with Slack. The response contains basic information about the team and WebSocket URL. -If you'd rather use the [`rtm.start`](https://docs.slack.dev/reference/methods/rtm.start) API method to establish the connection, which provides more information about the conversations and users on the team, you can set the `connect_method` option to `rtm.start` when instantiating the RTM Client. Note that on larger teams, use of `rtm.start` can be slow and unreliable. +If you'd rather use the [`rtm.start`](/reference/methods/rtm.start) API method to establish the connection, which provides more information about the conversations and users on the team, you can set the `connect_method` option to `rtm.start` when instantiating the RTM Client. Note that on larger teams, use of `rtm.start` can be slow and unreliable. ``` python import os @@ -82,7 +82,7 @@ rtm_client = RTMClient( rtm_client.start() ``` -See the [`rtm.connect`](https://docs.slack.dev/reference/methods/rtm.connect) and [`rtm.start`](https://docs.slack.dev/reference/methods/rtm.start) API methods for more details. +See the [`rtm.connect`](/reference/methods/rtm.connect) and [`rtm.start`](/reference/methods/rtm.start) API methods for more details. ## RTM events {#rtm-events} @@ -95,4 +95,4 @@ See the [`rtm.connect`](https://docs.slack.dev/reference/methods/rtm.connect) an } ``` -Refer to the [Legacy RTM API](https://docs.slack.dev/legacy/legacy-rtm-api) page for more information. +Refer to the [Legacy RTM API](/legacy/legacy-rtm-api) page for more information. diff --git a/docs/content/oauth.md b/docs/english/oauth.md similarity index 94% rename from docs/content/oauth.md rename to docs/english/oauth.md index bcc0a946d..61b9af98f 100644 --- a/docs/content/oauth.md +++ b/docs/english/oauth.md @@ -2,11 +2,11 @@ This page explains how to handle the Slack OAuth flow. If you're looking for a much easier way to do this, check out [Bolt for Python](https://github.com/slackapi/bolt-python), a full-stack Slack app framework. With Bolt, you won't need to implement most of the following code on your own. -Refer to the [Python document for this module](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/) for more details. +Refer to the [Python document for this module](https://docs.slack.dev/tools/python-slack-sdk/reference) for more details. ## App installation flow {#app-installation} -OAuth allows a user in any Slack workspace to install your app. At the end of the OAuth flow, your app gains an access token. Refer to the [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth) guide for details. +OAuth allows a user in any Slack workspace to install your app. At the end of the OAuth flow, your app gains an access token. Refer to the [installing with OAuth](/authentication/installing-with-oauth) guide for details. The Python Slack SDK provides the necessary modules for building the OAuth flow. @@ -60,7 +60,7 @@ When accessing `https://(your domain)/slack/install`, you will see an \"Add to S If all is well, a user goes through the Slack app installation UI and accepts all the scopes your app requests. After that happens, Slack redirects the user back to your specified Redirect URL. -The redirection gives you a `code` parameter. You can exchange the value for an access token by calling the [oauth.v2.access](https://docs.slack.dev/reference/methods/oauth.v2.access) API method. +The redirection gives you a `code` parameter. You can exchange the value for an access token by calling the [oauth.v2.access](/reference/methods/oauth.v2.access) API method. ``` python from slack_sdk.web import WebClient @@ -222,7 +222,7 @@ def slack_app(): ## Sign in with Slack {#siws} -[Sign in with Slack](https://docs.slack.dev/authentication/sign-in-with-slack) helps users log into your service using their Slack profile. The platform feature was upgraded to be compatible with the standard [OpenID Connect](https://openid.net/connect/) specification. With slack-sdk v3.9+, implementing the OAuth flow is much easier. +[Sign in with Slack](/authentication/sign-in-with-slack) helps users log into your service using their Slack profile. The platform feature was upgraded to be compatible with the standard [OpenID Connect](https://openid.net/connect/) specification. With slack-sdk v3.9+, implementing the OAuth flow is much easier. When you create a new Slack app, set the following user scopes: diff --git a/docs/content/rtm.md b/docs/english/rtm.md similarity index 66% rename from docs/content/rtm.md rename to docs/english/rtm.md index c9612614b..d609aab04 100644 --- a/docs/content/rtm.md +++ b/docs/english/rtm.md @@ -1,14 +1,14 @@ # RTM API client -The [Legacy Real Time Messaging (RTM) API](https://docs.slack.dev/legacy/legacy-rtm-api) is a WebSocket-based API that allows you to receive events from Slack in real time and to send messages as users. +The [Legacy Real Time Messaging (RTM) API](/legacy/legacy-rtm-api) is a WebSocket-based API that allows you to receive events from Slack in real time and to send messages as users. -If you prefer events to be pushed to your app, we recommend using the HTTP-based [Events API](https://docs.slack.dev/apis/events-api) instead. The Events API contains some events that aren't supported in the Legacy RTM API (such as the [app_home_opened event](https://docs.slack.dev/reference/events/app_home_opened)), and it supports most of the event types in the Legacy RTM API. If you'd like to use the Events API, you can use the [Python Slack Events Adaptor](https://github.com/slackapi/python-slack-events-api). +If you prefer events to be pushed to your app, we recommend using the HTTP-based [Events API](/apis/events-api) instead. The Events API contains some events that aren't supported in the Legacy RTM API (such as the [app_home_opened event](/reference/events/app_home_opened)), and it supports most of the event types in the Legacy RTM API. If you'd like to use the Events API, you can use the [Python Slack Events Adaptor](https://github.com/slackapi/python-slack-events-api). The RTMClient allows apps to communicate with the Legacy RTM API. The event-driven architecture of this client allows you to simply link callbacks to their corresponding events. When an event occurs, this client executes your callback while passing along any information it receives. We also give you the ability to call our web client from inside your callbacks. -In our example below, we watch for a [message event](https://docs.slack.dev/reference/events/message) that contains \"Hello\" and if it's received, we call the `say_hello()` function. We then issue a call to the web client to post back to the channel saying \"Hi\" to the user. +In our example below, we watch for a [message event](/reference/events/message) that contains \"Hello\" and if it's received, we call the `say_hello()` function. We then issue a call to the web client to post back to the channel saying \"Hi\" to the user. ## Configuring the RTM API {#configuration} @@ -73,9 +73,9 @@ rtm_client.start() ## The `rtm.start` vs. `rtm.connect` API methods (v1 client) {#rtm-methods} -By default, the RTM client uses the [`rtm.connect`](https://docs.slack.dev/reference/methods/rtm.connect) API method to establish a WebSocket connection with Slack. The response contains basic information about the team and WebSocket URL. +By default, the RTM client uses the [`rtm.connect`](/reference/methods/rtm.connect) API method to establish a WebSocket connection with Slack. The response contains basic information about the team and WebSocket URL. -See the [`rtm.connect`](https://docs.slack.dev/reference/methods/rtm.connect) and [`rtm.start`](https://docs.slack.dev/reference/methods/rtm.start) API methods for more details. Note that `slack.rtm_v2.RTMClient` does not support `rtm.start`. +See the [`rtm.connect`](/reference/methods/rtm.connect) and [`rtm.start`](/reference/methods/rtm.start) API methods for more details. Note that `slack.rtm_v2.RTMClient` does not support `rtm.start`. ## RTM events {#rtm-events} @@ -88,4 +88,4 @@ See the [`rtm.connect`](https://docs.slack.dev/reference/methods/rtm.connect) an } ``` -Refer to the [Legacy RTM events](https://docs.slack.dev/legacy/legacy-rtm-api#events) section for a complete list of events. +Refer to the [Legacy RTM events](/legacy/legacy-rtm-api#events) section for a complete list of events. diff --git a/docs/content/scim.md b/docs/english/scim.md similarity index 93% rename from docs/content/scim.md rename to docs/english/scim.md index 1877afbb0..78f696056 100644 --- a/docs/content/scim.md +++ b/docs/english/scim.md @@ -2,13 +2,13 @@ [SCIM](http://www.simplecloud.info/) is supported by a myriad of services. The SCIM API is a set of APIs for provisioning and managing user accounts and groups. SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack. -Refer to [using the Slack SCIM API](https://docs.slack.dev/admins/scim-api) for more details. +Refer to [using the Slack SCIM API](/admins/scim-api) for more details. -View the [Python document for this module](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/). +View the [Python document for this module](https://docs.slack.dev/tools/python-slack-sdk/reference). ## SCIMClient {#scimclient} -An OAuth token with [the admin scope](https://docs.slack.dev/reference/scopes/admin) is required to access the SCIM API. To fetch provisioned user data, you can use the `search_users` method in the client. +An OAuth token with [the admin scope](/reference/scopes/admin) is required to access the SCIM API. To fetch provisioned user data, you can use the `search_users` method in the client. ``` python import os diff --git a/docs/content/socket-mode.md b/docs/english/socket-mode.md similarity index 98% rename from docs/content/socket-mode.md rename to docs/english/socket-mode.md index ddb89b5e0..a1bf9984e 100644 --- a/docs/content/socket-mode.md +++ b/docs/english/socket-mode.md @@ -1,6 +1,6 @@ # Socket Mode client -Socket Mode is a method of connecting your app to the Slack APIs using WebSockets instead of HTTP. You can use `slack_sdk.socket_mode.SocketModeClient` for managing [Socket Mode](https://docs.slack.dev/apis/events-api/using-socket-mode) connections and performing interactions with Slack. +Socket Mode is a method of connecting your app to the Slack APIs using WebSockets instead of HTTP. You can use `slack_sdk.socket_mode.SocketModeClient` for managing [Socket Mode](/apis/events-api/using-socket-mode) connections and performing interactions with Slack. ## Using Socket Mode {#socket-mode} diff --git a/docs/static/img/understanding-oauth-approve.png b/docs/english/tutorial/understanding-oauth-approve.png similarity index 100% rename from docs/static/img/understanding-oauth-approve.png rename to docs/english/tutorial/understanding-oauth-approve.png diff --git a/docs/static/img/understanding-oauth-flow.png b/docs/english/tutorial/understanding-oauth-flow.png similarity index 100% rename from docs/static/img/understanding-oauth-flow.png rename to docs/english/tutorial/understanding-oauth-flow.png diff --git a/docs/content/tutorial/understanding-oauth-scopes.md b/docs/english/tutorial/understanding-oauth-scopes.md similarity index 94% rename from docs/content/tutorial/understanding-oauth-scopes.md rename to docs/english/tutorial/understanding-oauth-scopes.md index ed51b334c..fc1c96f9f 100644 --- a/docs/content/tutorial/understanding-oauth-scopes.md +++ b/docs/english/tutorial/understanding-oauth-scopes.md @@ -73,11 +73,11 @@ Our final list of scopes required are: ## Setting up OAuth and requesting scopes {#setup} -If you want users to be able to install your app on additional workspaces or from the [Slack Marketplace](https://docs.slack.dev/slack-marketplace/slack-marketplace-review-guide), you'll need to implement an OAuth flow. +If you want users to be able to install your app on additional workspaces or from the [Slack Marketplace](/slack-marketplace/slack-marketplace-review-guide), you'll need to implement an OAuth flow. -We'll be following the general flow of OAuth with Slack, which is covered in the [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth) guide and nicely illustrated in the image below: +We'll be following the general flow of OAuth with Slack, which is covered in the [installing with OAuth](/authentication/installing-with-oauth) guide and nicely illustrated in the image below: -![OAuth flow](/img/understanding-oauth-flow.png) +![OAuth flow](understanding-oauth-flow.png) 1. **Requesting Scopes** @@ -112,7 +112,7 @@ We'll be following the general flow of OAuth with Slack, which is covered in the The user will see the app installation UI (shown below) and will have the option to accept the permissions and allow the app to install to the workspace: - ![Approve installation](/img/understanding-oauth-approve.png) + ![Approve installation](understanding-oauth-approve.png) 3. **Exchanging a temporary authorization code for an access token** @@ -160,4 +160,4 @@ We'll be following the general flow of OAuth with Slack, which is covered in the At this point, you should feel more comfortable learning what scopes your app needs and using OAuth to request those scopes. A few resources you can check out next include: * [Slack-Python-OAuth-Example](https://github.com/stevengill/slack-python-oauth-example): we used code snippets from this app in this tutorial. The README contains more detailed information about running the app locally using ngrok, setting up a Redirect URL for OAuth, and setting up a request URL for events. -* Learn more about [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth). +* Learn more about [installing with OAuth](/authentication/installing-with-oauth). diff --git a/docs/static/img/upload-files-allow.png b/docs/english/tutorial/upload-files-allow.png similarity index 100% rename from docs/static/img/upload-files-allow.png rename to docs/english/tutorial/upload-files-allow.png diff --git a/docs/static/img/upload-files-bot-token.png b/docs/english/tutorial/upload-files-bot-token.png similarity index 100% rename from docs/static/img/upload-files-bot-token.png rename to docs/english/tutorial/upload-files-bot-token.png diff --git a/docs/static/img/upload-files-delete.png b/docs/english/tutorial/upload-files-delete.png similarity index 100% rename from docs/static/img/upload-files-delete.png rename to docs/english/tutorial/upload-files-delete.png diff --git a/docs/static/img/upload-files-first-upload.png b/docs/english/tutorial/upload-files-first-upload.png similarity index 100% rename from docs/static/img/upload-files-first-upload.png rename to docs/english/tutorial/upload-files-first-upload.png diff --git a/docs/static/img/upload-files-install.png b/docs/english/tutorial/upload-files-install.png similarity index 100% rename from docs/static/img/upload-files-install.png rename to docs/english/tutorial/upload-files-install.png diff --git a/docs/static/img/upload-files-invite-bot.gif b/docs/english/tutorial/upload-files-invite-bot.gif similarity index 100% rename from docs/static/img/upload-files-invite-bot.gif rename to docs/english/tutorial/upload-files-invite-bot.gif diff --git a/docs/static/img/upload-files-local-file.png b/docs/english/tutorial/upload-files-local-file.png similarity index 100% rename from docs/static/img/upload-files-local-file.png rename to docs/english/tutorial/upload-files-local-file.png diff --git a/docs/static/img/upload-files-with-channel.png b/docs/english/tutorial/upload-files-with-channel.png similarity index 100% rename from docs/static/img/upload-files-with-channel.png rename to docs/english/tutorial/upload-files-with-channel.png diff --git a/docs/content/tutorial/uploading-files.md b/docs/english/tutorial/uploading-files.md similarity index 95% rename from docs/content/tutorial/uploading-files.md rename to docs/english/tutorial/uploading-files.md index 6399ffd99..70cc6e1c1 100644 --- a/docs/content/tutorial/uploading-files.md +++ b/docs/english/tutorial/uploading-files.md @@ -8,7 +8,7 @@ First, create a [Slack app](https://api.slack.com/apps/new). ## Configuring your app's settings with an app manifest {#configuration} -Creating your app using this method will include all the required settings for this tutorial, and you won't be bogged down with too many details - all you'll need to do is decide where this app will live. If you're curious about the inner workings of how this button works, refer to [App Manifests](https://docs.slack.dev/app-manifests) for more information. +Creating your app using this method will include all the required settings for this tutorial, and you won't be bogged down with too many details - all you'll need to do is decide where this app will live. If you're curious about the inner workings of how this button works, refer to [App Manifests](/app-manifests) for more information. ```yaml _metadata: @@ -34,15 +34,15 @@ oauth_config: Once you've created your app, you'll see an **Install to Workspace** button. Click it to install your app in your workspace. -![Install to workspace](/img/upload-files-install.png) +![Install to workspace](upload-files-install.png) Next, click **Allow** to authorize the app in your workspace. -![Authorize app](/img/upload-files-allow.png) +![Authorize app](upload-files-allow.png) Navigate to the **Install App** section under **Settings**. Here, you'll find your `Bot User OAuth Token`. -![Get token](/img/upload-files-bot-token.png) +![Get token](upload-files-bot-token.png) Set this token value as an environment variable called `SLACK_BOT_TOKEN` by using the following command: @@ -164,7 +164,7 @@ In this example, we've used the channel name `C123456789`, but you'll need to fi Just like in the image below, mention the File Writer Bot and invite it to the `#random` channel. -![Invite to channel](/img/upload-files-invite-bot.gif) +![Invite to channel](upload-files-invite-bot.gif) Next, use the following code to retrieve the file's permalink and post it within a channel. @@ -178,7 +178,7 @@ new_message = client.chat_postMessage( By doing this, you'll be able to see the file within Slack. -![Upload file](/img/upload-files-first-upload.png) +![Upload file](upload-files-first-upload.png) ### Specifying a channel when uploading a file {#specifying-channel} @@ -196,7 +196,7 @@ upload_and_then_share_file = client.files_upload_v2( By running the above code, you'll share the same file without having to send a message with the file URL. -![Share file with message](/img/upload-files-with-channel.png) +![Share file with message](upload-files-with-channel.png) ### Uploading local files {#upload-local-files} @@ -219,7 +219,7 @@ upload_text_file = client.files_upload_v2( Again, we'll see that the file has been uploaded to Slack and shared within the `#random` channel. -![File uploaded](/img/upload-files-local-file.png) +![File uploaded](upload-files-local-file.png) ## Deleting a file {#deleting} @@ -252,12 +252,12 @@ for page in client.files_list(user=bot_user_id): Once we run this, the `files` array should be empty. The count for files found within the `paging` object may take a moment to reflect the actual number of files. You'll also notice within Slack that there are several `This file was deleted.` messages being shown. -![Delete a file](/img/upload-files-delete.png) +![Delete a file](upload-files-delete.png) ## Next steps {#next} This tutorial summarized how to use the Slack API to upload files and share them within a channel, using the Python SDK. The same principles apply to other languages as well, so if Python isn't your fancy, feel free to try out our other SDKs: -* [Java SDK](https://tools.slack.dev/java-slack-sdk/) -* [Node Slack SDK](https://tools.slack.dev/node-slack-sdk/) -* [Deno Slack SDK](https://tools.slack.dev/deno-slack-sdk/) +* [Java Slack SDK](/tools/java-slack-sdk/) +* [Node Slack SDK](/tools/node-slack-sdk/) +* [Deno Slack SDK](/tools/deno-slack-sdk/) diff --git a/docs/content/v3-migration.md b/docs/english/v3-migration.md similarity index 93% rename from docs/content/v3-migration.md rename to docs/english/v3-migration.md index 3a1618c73..67199c2be 100644 --- a/docs/content/v3-migration.md +++ b/docs/english/v3-migration.md @@ -4,7 +4,7 @@ sidebar_label: Migrating from slackclient # Migrating from v2.x to v3.x {#migrating} -You may still view the legacy `slackclient` v2 [documentation](/legacy/). However, the **slackclient** project is in maintenance mode and this **slack_sdk** project is the successor. +You may still view the legacy `slackclient` v2 [documentation](/tools/python-slack-sdk/legacy/). However, the **slackclient** project is in maintenance mode and this **slack_sdk** project is the successor. ## From `slackclient` 2.x {#fromv2} @@ -61,8 +61,10 @@ If you're using `run_async=True` option, we highly recommend switching to `Async If you're migrating from v1.x of `slackclient` to v2.x, here's what you need to change to ensure your app continues working after updating. -:::info -We have completely rewritten this library and you should only upgrade once you have fully tested it in your development environment. If you don't wish to upgrade yet, be sure to pin your module for the Python `slackclient` to `1.3.1`. +:::info[We have completely rewritten this library and you should only upgrade once you have fully tested it in your development environment.] + +If you don't wish to upgrade yet, be sure to pin your module for the Python `slackclient` to `1.3.1`. + ::: ### Minimum Python versions {#minimum-versions} @@ -166,7 +168,7 @@ def get_team_data(**payload): RTM usage has been completely redesigned. -For new projects, we recommend using [Events API](https://docs.slack.dev/apis/events-api). This package `slackclient` v2 doesn't have any supports for Events API but you can try https://github.com/slackapi/python-slack-events-api that works as an enhancement of Flask web framework. +For new projects, we recommend using [Events API](/apis/events-api). This package `slackclient` v2 doesn't have any supports for Events API but you can try https://github.com/slackapi/python-slack-events-api that works as an enhancement of Flask web framework. In the near future, we'll be providing better supports for Events API in the official SDK. diff --git a/docs/content/web.md b/docs/english/web.md similarity index 85% rename from docs/content/web.md rename to docs/english/web.md index 9d0d311ba..5069e5461 100644 --- a/docs/content/web.md +++ b/docs/english/web.md @@ -2,15 +2,15 @@ The Slack Web API allows you to build applications that interact with Slack in more complex ways than the integrations we provide out of the box. -Accessing Slack API methods requires an OAuth token — read more about [installing with OAuth](https://docs.slack.dev/authentication/installing-with-oauth). +Accessing Slack API methods requires an OAuth token — read more about [installing with OAuth](/authentication/installing-with-oauth). -Each of these [API methods](https://docs.slack.dev/reference/methods) is fully documented on our developer site at [docs.slack.dev](https://docs.slack.dev/). +Each of these [API methods](/reference/methods) is fully documented on our developer site at [docs.slack.dev](/). ## Sending a message {#sending-messages} One of the primary uses of Slack is posting messages to a channel using the channel ID, or as a DM to another person using their user ID. This method will handle either a channel ID or a user ID passed to the `channel` parameter. -Your app's bot user needs to be in the channel (otherwise, you will get either `not_in_channel` or `channel_not_found` error code). If your app has the [chat:write.public](https://docs.slack.dev/reference/scopes/chat.write.public) scope, your app can post messages without joining a channel as long as the channel is public. See the [chat.postMessage](https://docs.slack.dev/reference/methods/chat.postmessage) API method for more info. +Your app's bot user needs to be in the channel (otherwise, you will get either `not_in_channel` or `channel_not_found` error code). If your app has the [chat:write.public](/reference/scopes/chat.write.public) scope, your app can post messages without joining a channel as long as the channel is public. See the [chat.postMessage](/reference/methods/chat.postMessage) API method for more info. ``` python import logging @@ -49,14 +49,14 @@ response = client.chat_postEphemeral( ) ``` -See the [`chat.postEphemeral`](https://docs.slack.dev/reference/methods/chat.postephemeral) API method for more details. +See the [`chat.postEphemeral`](/reference/methods/chat.postEphemeral) API method for more details. ## Formatting messages with Block Kit {#block-kit} -Messages posted from apps can contain more than just text; they can also include full user interfaces composed of blocks using [Block Kit](https://docs.slack.dev/block-kit). +Messages posted from apps can contain more than just text; they can also include full user interfaces composed of blocks using [Block Kit](/block-kit). -The [`chat.postMessage method`](https://docs.slack.dev/reference/methods/chat.postmessage) takes an optional blocks argument that allows you to customize the layout of a message. Blocks can be specified -in a single array of either dict values or [slack_sdk.models.blocks.Block](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/models/blocks/index.html) objects. +The [`chat.postMessage method`](/reference/methods/chat.postMessage) takes an optional blocks argument that allows you to customize the layout of a message. Blocks can be specified +in a single array of either dict values or [slack_sdk.models.blocks.Block](https://docs.slack.dev/tools/python-slack-sdk/reference/models/blocks/index.html) objects. To send a message to a channel, use the channel's ID. For DMs, use the user's ID. @@ -97,9 +97,7 @@ client.chat_postMessage( ) ``` -:::tip - -You can use [Block Kit Builder](https://app.slack.com/block-kit-builder/) to prototype your message's look and feel. +:::tip[You can use [Block Kit Builder](https://app.slack.com/block-kit-builder/) to prototype your message's look and feel.] ::: @@ -127,13 +125,13 @@ response = client.chat_postMessage( reply_broadcast=True ) ``` -:::info +:::info[While threaded messages may contain attachments and message buttons, when your reply is broadcast to the channel, it'll actually be a reference to your reply and not the reply itself.] -While threaded messages may contain attachments and message buttons, when your reply is broadcast to the channel, it'll actually be a reference to your reply and not the reply itself. When appearing in the channel, it won't contain any attachments or message buttons. Updates and deletion of threaded replies works the same as regular messages. +When appearing in the channel, it won't contain any attachments or message buttons. Updates and deletion of threaded replies works the same as regular messages. ::: -Refer to the [threading messages](https://docs.slack.dev/messaging#threading) page for more information. +Refer to the [threading messages](/messaging#threading) page for more information. ## Updating a message {#updating-messages} @@ -147,7 +145,7 @@ response = client.chat_update( ) ``` -See the [`chat.update`](https://docs.slack.dev/reference/methods/chat.update) API method for formatting options and some special considerations when calling this with a bot user. +See the [`chat.update`](/reference/methods/chat.update) API method for formatting options and some special considerations when calling this with a bot user. ## Deleting a message {#deleting-messages} @@ -160,14 +158,14 @@ response = client.chat_delete( ) ``` -See the [`chat.delete`](https://docs.slack.dev/reference/methods/chat.delete) API method for more +See the [`chat.delete`](/reference/methods/chat.delete) API method for more details. ## Conversations {#conversations} The Slack Conversations API provides your app with a unified interface to work with all the channel-like things encountered in Slack: public channels, private channels, direct messages, group direct messages, and shared channels. -Refer to [using the Conversations API](https://docs.slack.dev/apis/web-api/using-the-conversations-api) for more information. +Refer to [using the Conversations API](/apis/web-api/using-the-conversations-api) for more information. ### Direct messages {#direct-messages} @@ -185,7 +183,7 @@ client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) response = client.conversations_open(users=["W123456789", "U987654321"]) ``` -See the [`conversations.open`](https://docs.slack.dev/reference/methods/conversations.open) API method for additional details. +See the [`conversations.open`](/reference/methods/conversations.open) API method for additional details. ### Creating channels {#creating-channels} @@ -206,7 +204,7 @@ channel_id = response["channel"]["id"] response = client.conversations_archive(channel=channel_id) ``` -See the [`conversations.create`](https://docs.slack.dev/reference/methods/conversations.create) API method for additional details. +See the [`conversations.create`](/reference/methods/conversations.create) API method for additional details. ### Getting conversation information {#getting-conversation-info} @@ -223,7 +221,7 @@ response = client.conversations_info( ) ``` -See the [`conversations.info`](https://docs.slack.dev/reference/methods/conversations.info) API method for more details. +See the [`conversations.info`](/reference/methods/conversations.info) API method for more details. ### Listing conversations {#listing-conversations} @@ -256,7 +254,7 @@ Archived channels are included by default. You can exclude them by passing `excl response = client.conversations_list(exclude_archived=True) ``` -See the [`conversations.list`](https://docs.slack.dev/reference/methods/conversations.list) API method for more details. +See the [`conversations.list`](/reference/methods/conversations.list) API method for more details. ### Getting members of a conversation {#getting-conversation-members} @@ -271,7 +269,7 @@ response = client.conversations_members(channel="C16180339") user_ids = response["members"] ``` -See the [`conversations.members`](https://docs.slack.dev/reference/methods/conversations.members) API method for more details. +See the [`conversations.members`](/reference/methods/conversations.members) API method for more details. ### Joining a conversation {#joining-conversations} @@ -283,7 +281,7 @@ response = client.conversations_join(channel="C0XXXXXXY") If you are already in the channel, the response is slightly different. The `already_in_channel` attribute will be true, and a limited `channel` object will be returned. Bot users cannot join a channel on their own, they need to be invited by another user. -See the [`conversations.join`](https://docs.slack.dev/reference/methods/conversations.join) API method for more details. +See the [`conversations.join`](/reference/methods/conversations.join) API method for more details. ### Leaving a conversation {#leaving-conversations} @@ -297,7 +295,7 @@ client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) response = client.conversations_leave(channel="C27182818") ``` -See the [`conversations.leave`](https://docs.slack.dev/reference/methods/conversations.leave) API method for more details. +See the [`conversations.leave`](/reference/methods/conversations.leave) API method for more details. ## Opening a modal {#opening-modals} @@ -375,7 +373,7 @@ if __name__ == "__main__": app.run("localhost", 3000) ``` -See the [`views.open`](https://docs.slack.dev/reference/methods/views.open) API method more details and additional parameters. +See the [`views.open`](/reference/methods/views.open) API method more details and additional parameters. Also, to run the above example, the following [Slack app configurations](https://api.slack.com/apps) are required. @@ -387,7 +385,7 @@ To run the above example, the following [app configurations](https://api.slack.c ## Updating and pushing modals {#updating-pushing-modals} -In response to `view_submission` requests, you can tell Slack to update the current modal view by having `"response_action": update` and an updated view. There are also other `response_action` types, such as `errors` and `push`. Refer to the [modals](https://docs.slack.dev/surfaces/modals) page for more details. +In response to `view_submission` requests, you can tell Slack to update the current modal view by having `"response_action": update` and an updated view. There are also other `response_action` types, such as `errors` and `push`. Refer to the [modals](/surfaces/modals) page for more details. ``` python if ( @@ -464,9 +462,9 @@ response = client.views_update( ) ``` -See the [`views.update`](https://docs.slack.dev/reference/methods/views.update) API method for more details. +See the [`views.update`](/reference/methods/views.update) API method for more details. -If you want to push a new view onto the modal instead of updating an existing view, see the [`views.push`](https://docs.slack.dev/reference/methods/views.push) API method. +If you want to push a new view onto the modal instead of updating an existing view, see the [`views.push`](/reference/methods/views.push) API method. ## Emoji reactions {#emoji} @@ -492,7 +490,7 @@ response = client.reactions_remove( ) ``` -See the [`reactions.add`](https://docs.slack.dev/reference/methods/reactions.add) and [`reactions.remove`](https://docs.slack.dev/reference/methods/reactions.remove) API methods for more details. +See the [`reactions.add`](/reference/methods/reactions.add) and [`reactions.remove`](/reference/methods/reactions.remove) API methods for more details. ## Uploading files {#upload-files} @@ -519,7 +517,7 @@ response = client.files_upload_v2( ) ``` -See the [`files.upload`](https://docs.slack.dev/reference/methods/files.upload) API method for more details. +See the [`files.upload`](/reference/methods/files.upload) API method for more details. ## Adding a remote file {#adding-remote-files} @@ -534,7 +532,7 @@ response = client.files_remote_add( ) ``` -See the [files.remote.add](https://docs.slack.dev/reference/methods/files.remote.add) API method for more details. +See the [files.remote.add](/reference/methods/files.remote.add) API method for more details. ## Calling API methods {#calling-API-methods} @@ -640,7 +638,7 @@ For asyncio apps, `Async` prefixed corresponding modules are available. All the ## Rate limits {#rate-limits} -When posting messages to a channel, Slack allows apps to send no more than one message per channel per second. We allow bursts over that limit for short periods; however, if your app continues to exceed the limit over a longer period of time, it will be rate limited. Different API methods have other limits — be sure to check the [rate limits](https://docs.slack.dev/apis/web-api/rate-limits) and test that your app has a graceful fallback if it should hit those limits. +When posting messages to a channel, Slack allows apps to send no more than one message per channel per second. We allow bursts over that limit for short periods; however, if your app continues to exceed the limit over a longer period of time, it will be rate limited. Different API methods have other limits — be sure to check the [rate limits](/apis/web-api/rate-limits) and test that your app has a graceful fallback if it should hit those limits. If you go over these limits, Slack will begin returning *HTTP 429 Too Many Requests* errors, a JSON object containing the number of calls you have been making, and a *Retry-After* header containing the number of seconds until you can retry. @@ -682,4 +680,4 @@ while True: Since v3.9.0, the built-in `RateLimitErrorRetryHandler` is available as an easier way to do retries for rate limited errors. Refer to the [RetryHandler](#retryhandler) section for more details. -Refer to the [rate limits](https://docs.slack.dev/apis/web-api/rate-limits) page for more information. +Refer to the [rate limits](/apis/web-api/rate-limits) page for more information. diff --git a/docs/content/webhook.md b/docs/english/webhook.md similarity index 87% rename from docs/content/webhook.md rename to docs/english/webhook.md index 572710cc3..feaa4c7a9 100644 --- a/docs/content/webhook.md +++ b/docs/english/webhook.md @@ -2,9 +2,9 @@ ## Incoming webhooks {#incoming-webhooks} -You can use `slack_sdk.webhook.WebhookClient` for [incoming webhooks](https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks) and message responses using [`response_url`](https://docs.slack.dev/interactivity/handling-user-interaction#message_responses) in payloads. +You can use `slack_sdk.webhook.WebhookClient` for [incoming webhooks](/messaging/sending-messages-using-incoming-webhooks) and message responses using [`response_url`](/interactivity/handling-user-interaction#message_responses) in payloads. -To use [incoming webhooks](https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks), calling the `WebhookClient(url)#send(payload)` method works for you. The call posts a message in a channel associated with the webhook URL. +To use [incoming webhooks](/messaging/sending-messages-using-incoming-webhooks), calling the `WebhookClient(url)#send(payload)` method works for you. The call posts a message in a channel associated with the webhook URL. ``` python from slack_sdk.webhook import WebhookClient @@ -16,7 +16,7 @@ assert response.status_code == 200 assert response.body == "ok" ``` -It's also possible to use `blocks` using [Block Kit](https://docs.slack.dev/block-kit). +It's also possible to use `blocks` using [Block Kit](/block-kit). ``` python from slack_sdk.webhook import WebhookClient @@ -38,7 +38,7 @@ response = webhook.send( ## The `response_url` -User actions in channels generates a [`response_url`](https://docs.slack.dev/interactivity/handling-user-interaction#message_responses) and includes the URL in its payload. You can use `WebhookClient` to send a message via the `response_url`. +User actions in channels generates a [`response_url`](/interactivity/handling-user-interaction#message_responses) and includes the URL in its payload. You can use `WebhookClient` to send a message via the `response_url`. ``` python import os diff --git a/docs/footerConfig.js b/docs/footerConfig.js deleted file mode 100644 index 6433c049d..000000000 --- a/docs/footerConfig.js +++ /dev/null @@ -1,21 +0,0 @@ -const footer = { - links: [ - { - items: [ - { - html: ` - -
    - ©2025 Slack Technologies, LLC, a Salesforce company. All rights reserved. Various trademarks held by their respective owners. -
    - `, - }, - ], - }, - ], -}; - -module.exports = footer; diff --git a/docs/navbarConfig.js b/docs/navbarConfig.js deleted file mode 100644 index 5c3aaaba2..000000000 --- a/docs/navbarConfig.js +++ /dev/null @@ -1,93 +0,0 @@ -const navbar = { - style: 'dark', - title: 'Slack Developer Tools', - logo: { - src: 'img/slack-logo-on-white.png', - href: 'https://tools.slack.dev', - }, - items: [ - { - type: 'dropdown', - label: 'Bolt', - position: 'left', - items: [ - { - label: 'Java', - to: 'https://tools.slack.dev/java-slack-sdk/guides/bolt-basics', - target: '_self', - }, - { - label: 'JavaScript', - to: 'https://tools.slack.dev/bolt-js', - target: '_self', - }, - { - label: 'Python', - to: 'https://tools.slack.dev/bolt-python', - target: '_self', - }, - ], - }, - { - type: 'dropdown', - label: 'SDKs', - position: 'left', - items: [ - { - label: 'Java Slack SDK', - to: 'https://tools.slack.dev/java-slack-sdk/', - target: '_self', - }, - { - label: 'Node Slack SDK', - to: 'https://tools.slack.dev/node-slack-sdk/', - target: '_self', - }, - { - label: 'Python Slack SDK', - to: 'https://tools.slack.dev/python-slack-sdk/', - target: '_self', - }, - { - label: 'Deno Slack SDK', - to: 'https://tools.slack.dev/deno-slack-sdk/', - target: '_self', - }, - ], - }, - { - to: 'https://tools.slack.dev/slack-cli', - label: 'Slack CLI', - target: '_self', - }, - { - to: 'https://api.slack.com', - label: 'API Docs', - position: 'right', - target: '_self', - }, - { - label: 'Developer Program', - position: 'right', - to: 'https://api.slack.com/developer-program', - target: '_blank', - rel: "noopener noreferrer" - }, - { - label: 'Your apps', - to: 'https://api.slack.com/apps', - position: 'right', - target: '_blank', - rel: "noopener noreferrer" - }, - { - 'aria-label': 'GitHub Repository', - className: 'navbar-github-link', - href: 'https://github.com/slackapi', - position: 'right', - target: '_self', - }, - ], -}; - -module.exports = navbar; diff --git a/docs/package-lock.json b/docs/package-lock.json deleted file mode 100644 index 129669128..000000000 --- a/docs/package-lock.json +++ /dev/null @@ -1,16738 +0,0 @@ -{ - "name": "website", - "version": "2024.08.01", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "website", - "version": "2024.08.01", - "dependencies": { - "@docusaurus/core": "^3.8.1", - "@docusaurus/plugin-client-redirects": "^3.8.1", - "@docusaurus/preset-classic": "^3.8.1", - "@mdx-js/react": "^3.1.0", - "clsx": "^2.0.0", - "docusaurus-theme-github-codeblock": "^2.0.2", - "prism-react-renderer": "^2.4.1", - "react": "^19.1.1", - "react-dom": "^19.1.1" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.5.2", - "@docusaurus/types": "^3.5.2" - }, - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz", - "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", - "@algolia/autocomplete-shared": "1.17.9" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz", - "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz", - "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz", - "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/client-abtesting": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.30.0.tgz", - "integrity": "sha512-Q3OQXYlTNqVUN/V1qXX8VIzQbLjP3yrRBO9m6NRe1CBALmoGHh9JrYosEGvfior28+DjqqU3Q+nzCSuf/bX0Gw==", - "dependencies": { - "@algolia/client-common": "5.30.0", - "@algolia/requester-browser-xhr": "5.30.0", - "@algolia/requester-fetch": "5.30.0", - "@algolia/requester-node-http": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.30.0.tgz", - "integrity": "sha512-/b+SAfHjYjx/ZVeVReCKTTnFAiZWOyvYLrkYpeNMraMT6akYRR8eC1AvFcvR60GLG/jytxcJAp42G8nN5SdcLg==", - "dependencies": { - "@algolia/client-common": "5.30.0", - "@algolia/requester-browser-xhr": "5.30.0", - "@algolia/requester-fetch": "5.30.0", - "@algolia/requester-node-http": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.30.0.tgz", - "integrity": "sha512-tbUgvkp2d20mHPbM0+NPbLg6SzkUh0lADUUjzNCF+HiPkjFRaIW3NGMlESKw5ia4Oz6ZvFzyREquUX6rdkdJcQ==", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.30.0.tgz", - "integrity": "sha512-caXuZqJK761m32KoEAEkjkE2WF/zYg1McuGesWXiLSgfxwZZIAf+DljpiSToBUXhoPesvjcLtINyYUzbkwE0iw==", - "dependencies": { - "@algolia/client-common": "5.30.0", - "@algolia/requester-browser-xhr": "5.30.0", - "@algolia/requester-fetch": "5.30.0", - "@algolia/requester-node-http": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.30.0.tgz", - "integrity": "sha512-7K6P7TRBHLX1zTmwKDrIeBSgUidmbj6u3UW/AfroLRDGf9oZFytPKU49wg28lz/yulPuHY0nZqiwbyAxq9V17w==", - "dependencies": { - "@algolia/client-common": "5.30.0", - "@algolia/requester-browser-xhr": "5.30.0", - "@algolia/requester-fetch": "5.30.0", - "@algolia/requester-node-http": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-query-suggestions": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.30.0.tgz", - "integrity": "sha512-WMjWuBjYxJheRt7Ec5BFr33k3cV0mq2WzmH9aBf5W4TT8kUp34x91VRsYVaWOBRlxIXI8o/WbhleqSngiuqjLA==", - "dependencies": { - "@algolia/client-common": "5.30.0", - "@algolia/requester-browser-xhr": "5.30.0", - "@algolia/requester-fetch": "5.30.0", - "@algolia/requester-node-http": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.30.0.tgz", - "integrity": "sha512-puc1/LREfSqzgmrOFMY5L/aWmhYOlJ0TTpa245C0ZNMKEkdOkcimFbXTXQ8lZhzh+rlyFgR7cQGNtXJ5H0XgZg==", - "dependencies": { - "@algolia/client-common": "5.30.0", - "@algolia/requester-browser-xhr": "5.30.0", - "@algolia/requester-fetch": "5.30.0", - "@algolia/requester-node-http": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "node_modules/@algolia/ingestion": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.30.0.tgz", - "integrity": "sha512-NfqiIKVgGKTLr6T9F81oqB39pPiEtILTy0z8ujxPKg2rCvI/qQeDqDWFBmQPElCfUTU6kk67QAgMkQ7T6fE+gg==", - "dependencies": { - "@algolia/client-common": "5.30.0", - "@algolia/requester-browser-xhr": "5.30.0", - "@algolia/requester-fetch": "5.30.0", - "@algolia/requester-node-http": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/monitoring": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.30.0.tgz", - "integrity": "sha512-/eeM3aqLKro5KBZw0W30iIA6afkGa+bcpvEM0NDa92m5t3vil4LOmJI9FkgzfmSkF4368z/SZMOTPShYcaVXjA==", - "dependencies": { - "@algolia/client-common": "5.30.0", - "@algolia/requester-browser-xhr": "5.30.0", - "@algolia/requester-fetch": "5.30.0", - "@algolia/requester-node-http": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.30.0.tgz", - "integrity": "sha512-iWeAUWqw+xT+2IyUyTqnHCK+cyCKYV5+B6PXKdagc9GJJn6IaPs8vovwoC0Za5vKCje/aXQ24a2Z1pKpc/tdHg==", - "dependencies": { - "@algolia/client-common": "5.30.0", - "@algolia/requester-browser-xhr": "5.30.0", - "@algolia/requester-fetch": "5.30.0", - "@algolia/requester-node-http": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.30.0.tgz", - "integrity": "sha512-alo3ly0tdNLjfMSPz9dmNwYUFHx7guaz5dTGlIzVGnOiwLgIoM6NgA+MJLMcH6e1S7OpmE2AxOy78svlhst2tQ==", - "dependencies": { - "@algolia/client-common": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-fetch": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.30.0.tgz", - "integrity": "sha512-WOnTYUIY2InllHBy6HHMpGIOo7Or4xhYUx/jkoSK/kPIa1BRoFEHqa8v4pbKHtoG7oLvM2UAsylSnjVpIhGZXg==", - "dependencies": { - "@algolia/client-common": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-node-http": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.30.0.tgz", - "integrity": "sha512-uSTUh9fxeHde1c7KhvZKUrivk90sdiDftC+rSKNFKKEU9TiIKAGA7B2oKC+AoMCqMymot1vW9SGbeESQPTZd0w==", - "dependencies": { - "@algolia/client-common": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz", - "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.27.3", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", - "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", - "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", - "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.4.tgz", - "integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", - "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz", - "integrity": "sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", - "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", - "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.9.tgz", - "integrity": "sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.6.tgz", - "integrity": "sha512-vDVrlmRAY8z9Ul/HxT+8ceAru95LQgkSKiXkSYZvqtbkPSfhZJgpRp45Cldbh1GJ1kxzQkI70AqyrTI58KpaWQ==", - "dependencies": { - "core-js-pure": "^3.30.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz", - "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@csstools/cascade-layer-name-parser": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", - "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/color-helpers": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", - "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", - "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "@csstools/css-calc": "^2.1.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/media-query-list-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", - "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz", - "integrity": "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz", - "integrity": "sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz", - "integrity": "sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz", - "integrity": "sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-content-alt-text": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz", - "integrity": "sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-exponential-functions": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", - "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", - "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-gamut-mapping": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz", - "integrity": "sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz", - "integrity": "sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz", - "integrity": "sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz", - "integrity": "sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-initial": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", - "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", - "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz", - "integrity": "sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-float-and-clear": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", - "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-overflow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", - "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-overscroll-behavior": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", - "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-resize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", - "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", - "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-minmax": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", - "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", - "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", - "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", - "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz", - "integrity": "sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz", - "integrity": "sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-random-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", - "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz", - "integrity": "sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", - "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-sign-functions": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", - "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", - "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz", - "integrity": "sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", - "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", - "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/utilities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", - "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz", - "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==" - }, - "node_modules/@docsearch/react": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz", - "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==", - "dependencies": { - "@algolia/autocomplete-core": "1.17.9", - "@algolia/autocomplete-preset-algolia": "1.17.9", - "@docsearch/css": "3.9.0", - "algoliasearch": "^5.14.2" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 20.0.0", - "react": ">= 16.8.0 < 20.0.0", - "react-dom": ">= 16.8.0 < 20.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@docusaurus/babel": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.1.tgz", - "integrity": "sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw==", - "dependencies": { - "@babel/core": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.25.9", - "@babel/preset-env": "^7.25.9", - "@babel/preset-react": "^7.25.9", - "@babel/preset-typescript": "^7.25.9", - "@babel/runtime": "^7.25.9", - "@babel/runtime-corejs3": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.8.1", - "@docusaurus/utils": "3.8.1", - "babel-plugin-dynamic-import-node": "^2.3.3", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/bundler": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.1.tgz", - "integrity": "sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA==", - "dependencies": { - "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.8.1", - "@docusaurus/cssnano-preset": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "babel-loader": "^9.2.1", - "clean-css": "^5.3.3", - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.11.0", - "css-minimizer-webpack-plugin": "^5.0.1", - "cssnano": "^6.1.2", - "file-loader": "^6.2.0", - "html-minifier-terser": "^7.2.0", - "mini-css-extract-plugin": "^2.9.2", - "null-loader": "^4.0.1", - "postcss": "^8.5.4", - "postcss-loader": "^7.3.4", - "postcss-preset-env": "^10.2.1", - "terser-webpack-plugin": "^5.3.9", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "webpack": "^5.95.0", - "webpackbar": "^6.0.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/faster": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/faster": { - "optional": true - } - } - }, - "node_modules/@docusaurus/core": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.1.tgz", - "integrity": "sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA==", - "dependencies": { - "@docusaurus/babel": "3.8.1", - "@docusaurus/bundler": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cli-table3": "^0.6.3", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "core-js": "^3.31.1", - "detect-port": "^1.5.1", - "escape-html": "^1.0.3", - "eta": "^2.2.0", - "eval": "^0.1.8", - "execa": "5.1.1", - "fs-extra": "^11.1.1", - "html-tags": "^3.3.1", - "html-webpack-plugin": "^5.6.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "open": "^8.4.0", - "p-map": "^4.0.0", - "prompts": "^2.4.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.4", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.4", - "semver": "^7.5.4", - "serve-handler": "^6.1.6", - "tinypool": "^1.0.2", - "tslib": "^2.6.0", - "update-notifier": "^6.0.2", - "webpack": "^5.95.0", - "webpack-bundle-analyzer": "^4.10.2", - "webpack-dev-server": "^4.15.2", - "webpack-merge": "^6.0.1" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@mdx-js/react": "^3.0.0", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz", - "integrity": "sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug==", - "dependencies": { - "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.5.4", - "postcss-sort-media-queries": "^5.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/logger": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.1.tgz", - "integrity": "sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww==", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz", - "integrity": "sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w==", - "dependencies": { - "@docusaurus/logger": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "@mdx-js/mdx": "^3.0.0", - "@slorber/remark-comment": "^1.0.0", - "escape-html": "^1.0.3", - "estree-util-value-to-estree": "^3.0.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "image-size": "^2.0.2", - "mdast-util-mdx": "^3.0.0", - "mdast-util-to-string": "^4.0.0", - "rehype-raw": "^7.0.0", - "remark-directive": "^3.0.0", - "remark-emoji": "^4.0.0", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.0", - "stringify-object": "^3.3.0", - "tslib": "^2.6.0", - "unified": "^11.0.3", - "unist-util-visit": "^5.0.0", - "url-loader": "^4.1.1", - "vfile": "^6.0.1", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz", - "integrity": "sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg==", - "dependencies": { - "@docusaurus/types": "3.8.1", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-client-redirects": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.8.1.tgz", - "integrity": "sha512-F+86R7PBn6VNgy/Ux8w3ZRypJGJEzksbejQKlbTC8u6uhBUhfdXWkDp6qdOisIoW0buY5nLqucvZt1zNJzhJhA==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.1.tgz", - "integrity": "sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "cheerio": "1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "schema-dts": "^1.1.2", - "srcset": "^4.0.0", - "tslib": "^2.6.0", - "unist-util-visit": "^5.0.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.1.tgz", - "integrity": "sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/module-type-aliases": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "@types/react-router-config": "^5.0.7", - "combine-promises": "^1.1.0", - "fs-extra": "^11.1.1", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "schema-dts": "^1.1.2", - "tslib": "^2.6.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.1.tgz", - "integrity": "sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-css-cascade-layers": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.1.tgz", - "integrity": "sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.1.tgz", - "integrity": "sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "fs-extra": "^11.1.1", - "react-json-view-lite": "^2.3.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.1.tgz", - "integrity": "sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.1.tgz", - "integrity": "sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "@types/gtag.js": "^0.0.12", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.1.tgz", - "integrity": "sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.1.tgz", - "integrity": "sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "fs-extra": "^11.1.1", - "sitemap": "^7.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-svgr": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.1.tgz", - "integrity": "sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "@svgr/core": "8.1.0", - "@svgr/webpack": "^8.1.0", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.1.tgz", - "integrity": "sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/plugin-content-blog": "3.8.1", - "@docusaurus/plugin-content-docs": "3.8.1", - "@docusaurus/plugin-content-pages": "3.8.1", - "@docusaurus/plugin-css-cascade-layers": "3.8.1", - "@docusaurus/plugin-debug": "3.8.1", - "@docusaurus/plugin-google-analytics": "3.8.1", - "@docusaurus/plugin-google-gtag": "3.8.1", - "@docusaurus/plugin-google-tag-manager": "3.8.1", - "@docusaurus/plugin-sitemap": "3.8.1", - "@docusaurus/plugin-svgr": "3.8.1", - "@docusaurus/theme-classic": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/theme-search-algolia": "3.8.1", - "@docusaurus/types": "3.8.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.1.tgz", - "integrity": "sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw==", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/module-type-aliases": "3.8.1", - "@docusaurus/plugin-content-blog": "3.8.1", - "@docusaurus/plugin-content-docs": "3.8.1", - "@docusaurus/plugin-content-pages": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/theme-translations": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "copy-text-to-clipboard": "^3.2.0", - "infima": "0.2.0-alpha.45", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.5.4", - "prism-react-renderer": "^2.3.0", - "prismjs": "^1.29.0", - "react-router-dom": "^5.3.4", - "rtlcss": "^4.1.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.1.tgz", - "integrity": "sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw==", - "dependencies": { - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/module-type-aliases": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^2.0.0", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^2.3.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz", - "integrity": "sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ==", - "dependencies": { - "@docsearch/react": "^3.9.0", - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/plugin-content-docs": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/theme-translations": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "algoliasearch": "^5.17.1", - "algoliasearch-helper": "^3.22.6", - "clsx": "^2.0.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.1.tgz", - "integrity": "sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g==", - "dependencies": { - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/types": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", - "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.95.0", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/types/node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.1.tgz", - "integrity": "sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ==", - "dependencies": { - "@docusaurus/logger": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "escape-string-regexp": "^4.0.0", - "execa": "5.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "github-slugger": "^1.5.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "jiti": "^1.20.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "p-queue": "^6.6.2", - "prompts": "^2.4.2", - "resolve-pathname": "^3.0.0", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.1.tgz", - "integrity": "sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg==", - "dependencies": { - "@docusaurus/types": "3.8.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz", - "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==", - "dependencies": { - "@docusaurus/logger": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "fs-extra": "^11.2.0", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", - "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-to-js": "^2.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-estree": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "periscopic": "^3.0.0", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "source-map": "^0.7.0", - "unified": "^11.0.0", - "unist-util-position-from-estree": "^2.0.0", - "unist-util-stringify-position": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", - "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", - "license": "MIT" - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@slorber/remark-comment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", - "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.1.0", - "micromark-util-symbol": "^1.0.1" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", - "dependencies": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", - "dependencies": { - "@babel/core": "^7.21.3", - "@babel/plugin-transform-react-constant-elements": "^7.21.3", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.21.0", - "@svgr/core": "8.1.0", - "@svgr/plugin-jsx": "8.1.0", - "@svgr/plugin-svgo": "8.1.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/gtag.js": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==" - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "license": "MIT" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" - }, - "node_modules/@types/node": { - "version": "20.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prismjs": { - "version": "1.26.4", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.4.tgz", - "integrity": "sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" - }, - "node_modules/@types/qs": { - "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", - "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "^5.1.0" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" - }, - "node_modules/@types/sax": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/@types/ws": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", - "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/algoliasearch": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.30.0.tgz", - "integrity": "sha512-ILSdPX4je0n5WUKD34TMe57/eqiXUzCIjAsdtLQYhomqOjTtFUg1s6dE7kUegc4Mc43Xr7IXYlMutU9HPiYfdw==", - "dependencies": { - "@algolia/client-abtesting": "5.30.0", - "@algolia/client-analytics": "5.30.0", - "@algolia/client-common": "5.30.0", - "@algolia/client-insights": "5.30.0", - "@algolia/client-personalization": "5.30.0", - "@algolia/client-query-suggestions": "5.30.0", - "@algolia/client-search": "5.30.0", - "@algolia/ingestion": "1.30.0", - "@algolia/monitoring": "1.30.0", - "@algolia/recommend": "5.30.0", - "@algolia/requester-browser-xhr": "5.30.0", - "@algolia/requester-fetch": "5.30.0", - "@algolia/requester-node-http": "5.30.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz", - "integrity": "sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw==", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/astring": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", - "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", - "bin": { - "astring": "bin/astring" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", - "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001718", - "electron-to-chromium": "^1.5.160", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001720", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz", - "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", - "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "license": "MIT" - }, - "node_modules/combine-promises": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", - "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", - "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz", - "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.43.0.tgz", - "integrity": "sha512-i/AgxU2+A+BbJdMxh3v7/vxi2SbFqxiFmg6VsDwYB4jkucrd1BZNA9a9gphC0fYMG5IBSgQcbQnk865VCLe7xA==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-blank-pseudo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", - "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-has-pseudo": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz", - "integrity": "sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "cssnano": "^6.0.1", - "jest-worker": "^29.4.3", - "postcss": "^8.4.24", - "schema-utils": "^4.0.1", - "serialize-javascript": "^6.0.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", - "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssdb": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.1.tgz", - "integrity": "sha512-XnDRQMXucLueX92yDe0LPKupXetWoFOgawr4O4X41l5TltgK2NVbJJVDnnOywDYfW1sTJ28AcXGKOqdRKwCcmQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ] - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", - "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", - "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", - "dependencies": { - "autoprefixer": "^10.4.19", - "browserslist": "^4.23.0", - "cssnano-preset-default": "^6.1.2", - "postcss-discard-unused": "^6.0.5", - "postcss-merge-idents": "^6.0.3", - "postcss-reduce-idents": "^6.0.3", - "postcss-zindex": "^6.0.2" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", - "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" - }, - "node_modules/detect-port": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/docusaurus-theme-github-codeblock": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/docusaurus-theme-github-codeblock/-/docusaurus-theme-github-codeblock-2.0.2.tgz", - "integrity": "sha512-H2WoQPWOLjGZO6KS58Gsd+eUVjTFJemkReiSSu9chqokyLc/3Ih3+zPRYfuEZ/HsDvSMIarf7CNcp+Vt+/G+ig==", - "dependencies": { - "@docusaurus/types": "^3.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.161", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", - "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==", - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/emojilib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", - "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-util-attach-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-walker": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-to-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-value-to-estree": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.3.3.tgz", - "integrity": "sha512-Db+m1WSD4+mUO7UgMeKkAwdbfNWwIxLt48XF2oFU9emPfXkIu+k5/nlOj313v7wqtAPo0f9REhUvznFrPkG8CQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/remcohaszing" - } - }, - "node_modules/estree-util-visit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", - "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "license": "MIT", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/file-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/file-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "license": "MIT", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "license": "ISC" - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", - "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^9.0.0", - "property-information": "^7.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", - "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-estree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", - "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-attach-comments": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", - "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz", - "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==", - "dependencies": { - "inline-style-parser": "0.2.3" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", - "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript/node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "~5.3.2", - "commander": "^10.0.0", - "entities": "^4.4.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.15.1" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "engines": { - "node": ">=14" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/html-webpack-plugin/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", - "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", - "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", - "license": "MIT", - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.45", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", - "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "license": "MIT", - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/launch-editor": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", - "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/markdown-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdast-util-directive": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", - "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", - "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/mdast-util-frontmatter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "escape-string-regexp": "^5.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", - "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", - "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^5.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-directive": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", - "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-frontmatter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", - "license": "MIT", - "dependencies": { - "fault": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", - "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", - "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-mdx-md": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", - "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.0", - "micromark-extension-mdx-md": "^2.0.0", - "micromark-extension-mdxjs-esm": "^3.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", - "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-space/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", - "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", - "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/null-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/null-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/null-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "license": "MIT", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", - "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", - "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz", - "integrity": "sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", - "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", - "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-custom-media": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", - "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-properties": { - "version": "14.0.6", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", - "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", - "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", - "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-unused": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", - "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz", - "integrity": "sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", - "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-focus-within": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", - "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", - "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-image-set-function": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", - "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-lab-function": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz", - "integrity": "sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", - "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", - "dependencies": { - "cosmiconfig": "^8.3.5", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", - "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-merge-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", - "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", - "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", - "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", - "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nesting": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", - "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/selector-resolve-nested": "^3.1.0", - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", - "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", - "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", - "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", - "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-preset-env": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.4.tgz", - "integrity": "sha512-q+lXgqmTMdB0Ty+EQ31SuodhdfZetUlwCA/F0zRcd/XdxjzI+Rl2JhZNz5US2n/7t9ePsvuhCnEN4Bmu86zXlA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/postcss-cascade-layers": "^5.0.2", - "@csstools/postcss-color-function": "^4.0.10", - "@csstools/postcss-color-mix-function": "^3.0.10", - "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.0", - "@csstools/postcss-content-alt-text": "^2.0.6", - "@csstools/postcss-exponential-functions": "^2.0.9", - "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.10", - "@csstools/postcss-gradients-interpolation-method": "^5.0.10", - "@csstools/postcss-hwb-function": "^4.0.10", - "@csstools/postcss-ic-unit": "^4.0.2", - "@csstools/postcss-initial": "^2.0.1", - "@csstools/postcss-is-pseudo-class": "^5.0.3", - "@csstools/postcss-light-dark-function": "^2.0.9", - "@csstools/postcss-logical-float-and-clear": "^3.0.0", - "@csstools/postcss-logical-overflow": "^2.0.0", - "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", - "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.4", - "@csstools/postcss-media-minmax": "^2.0.9", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", - "@csstools/postcss-nested-calc": "^4.0.0", - "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.10", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/postcss-random-function": "^2.0.1", - "@csstools/postcss-relative-color-syntax": "^3.0.10", - "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.4", - "@csstools/postcss-stepped-value-functions": "^4.0.9", - "@csstools/postcss-text-decoration-shorthand": "^4.0.2", - "@csstools/postcss-trigonometric-functions": "^4.0.9", - "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.21", - "browserslist": "^4.25.0", - "css-blank-pseudo": "^7.0.1", - "css-has-pseudo": "^7.0.2", - "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.3.0", - "postcss-attribute-case-insensitive": "^7.0.1", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.10", - "postcss-color-hex-alpha": "^10.0.0", - "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.6", - "postcss-custom-properties": "^14.0.6", - "postcss-custom-selectors": "^8.0.5", - "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.2", - "postcss-focus-visible": "^10.0.1", - "postcss-focus-within": "^9.0.1", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^6.0.0", - "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.10", - "postcss-logical": "^8.1.0", - "postcss-nesting": "^13.0.2", - "postcss-opacity-percentage": "^3.0.0", - "postcss-overflow-shorthand": "^6.0.0", - "postcss-page-break": "^3.0.4", - "postcss-place": "^10.0.0", - "postcss-pseudo-class-any-link": "^10.0.1", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^8.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", - "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", - "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", - "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", - "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", - "dependencies": { - "sort-css-media-queries": "2.2.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.23" - } - }, - "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" - }, - "engines": { - "node": "^14 || ^16 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/postcss-zindex": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", - "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", - "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", - "dependencies": { - "@types/prismjs": "^1.26.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.0.0" - } - }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "license": "ISC" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "license": "MIT", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", - "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", - "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.1" - } - }, - "node_modules/react-fast-compare": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", - "license": "MIT" - }, - "node_modules/react-helmet-async": { - "name": "@slorber/react-helmet-async", - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-json-view-lite": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.4.1.tgz", - "integrity": "sha512-fwFYknRIBxjbFm0kBDrzgBy1xa5tDg2LyXXBepC5f1b+MY3BUClMCsvanMPn089JbV1Eg3nZcrp0VCuH43aXnA==", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", - "dependencies": { - "@types/react": "*" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-directive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz", - "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-directive": "^3.0.0", - "micromark-extension-directive": "^3.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-emoji": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", - "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.2", - "emoticon": "^4.0.1", - "mdast-util-find-and-replace": "^3.0.1", - "node-emoji": "^2.1.0", - "unified": "^11.0.4" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/remark-frontmatter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-frontmatter": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", - "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", - "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", - "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rtlcss": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", - "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0", - "postcss": "^8.4.21", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" - }, - "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT" - }, - "node_modules/schema-dts": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", - "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==" - }, - "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "peer": true - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", - "license": "MIT", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "3.3.0", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", - "license": "MIT" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", - "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "node_modules/skin-tone": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", - "license": "MIT", - "dependencies": { - "unicode-emoji-modifier-base": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", - "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/srcset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "license": "BSD-2-Clause", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.31.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", - "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/tinypool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz", - "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==", - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", - "optional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-emoji-modifier-base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/url-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/url-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", - "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", - "license": "MIT", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpackbar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", - "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", - "dependencies": { - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "consola": "^3.2.3", - "figures": "^3.2.0", - "markdown-table": "^2.0.0", - "pretty-time": "^1.1.0", - "std-env": "^3.7.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=14.21.3" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/webpackbar/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/webpackbar/node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpackbar/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpackbar/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 12012d1cb..000000000 --- a/docs/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "website", - "version": "2024.08.01", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids" - }, - "dependencies": { - "@docusaurus/core": "^3.8.1", - "@docusaurus/plugin-client-redirects": "^3.8.1", - "@docusaurus/preset-classic": "^3.8.1", - "@mdx-js/react": "^3.1.0", - "clsx": "^2.0.0", - "docusaurus-theme-github-codeblock": "^2.0.2", - "prism-react-renderer": "^2.4.1", - "react": "^19.1.1", - "react-dom": "^19.1.1" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.5.2", - "@docusaurus/types": "^3.5.2" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 3 chrome version", - "last 3 firefox version", - "last 5 safari version" - ] - }, - "engines": { - "node": ">=20.0" - } -} diff --git a/docs/static/api-docs/slack_sdk/aiohttp_version_checker.html b/docs/reference/aiohttp_version_checker.html similarity index 100% rename from docs/static/api-docs/slack_sdk/aiohttp_version_checker.html rename to docs/reference/aiohttp_version_checker.html diff --git a/docs/static/api-docs/slack_sdk/audit_logs/async_client.html b/docs/reference/audit_logs/async_client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/audit_logs/async_client.html rename to docs/reference/audit_logs/async_client.html diff --git a/docs/static/api-docs/slack_sdk/audit_logs/index.html b/docs/reference/audit_logs/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/audit_logs/index.html rename to docs/reference/audit_logs/index.html diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/async_client.html b/docs/reference/audit_logs/v1/async_client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/audit_logs/v1/async_client.html rename to docs/reference/audit_logs/v1/async_client.html diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/client.html b/docs/reference/audit_logs/v1/client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/audit_logs/v1/client.html rename to docs/reference/audit_logs/v1/client.html diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/index.html b/docs/reference/audit_logs/v1/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/audit_logs/v1/index.html rename to docs/reference/audit_logs/v1/index.html diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/internal_utils.html b/docs/reference/audit_logs/v1/internal_utils.html similarity index 100% rename from docs/static/api-docs/slack_sdk/audit_logs/v1/internal_utils.html rename to docs/reference/audit_logs/v1/internal_utils.html diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/logs.html b/docs/reference/audit_logs/v1/logs.html similarity index 100% rename from docs/static/api-docs/slack_sdk/audit_logs/v1/logs.html rename to docs/reference/audit_logs/v1/logs.html diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/response.html b/docs/reference/audit_logs/v1/response.html similarity index 100% rename from docs/static/api-docs/slack_sdk/audit_logs/v1/response.html rename to docs/reference/audit_logs/v1/response.html diff --git a/docs/static/api-docs/slack_sdk/errors/index.html b/docs/reference/errors/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/errors/index.html rename to docs/reference/errors/index.html diff --git a/docs/static/api-docs/slack_sdk/http_retry/async_handler.html b/docs/reference/http_retry/async_handler.html similarity index 100% rename from docs/static/api-docs/slack_sdk/http_retry/async_handler.html rename to docs/reference/http_retry/async_handler.html diff --git a/docs/static/api-docs/slack_sdk/http_retry/builtin_async_handlers.html b/docs/reference/http_retry/builtin_async_handlers.html similarity index 100% rename from docs/static/api-docs/slack_sdk/http_retry/builtin_async_handlers.html rename to docs/reference/http_retry/builtin_async_handlers.html diff --git a/docs/static/api-docs/slack_sdk/http_retry/builtin_handlers.html b/docs/reference/http_retry/builtin_handlers.html similarity index 100% rename from docs/static/api-docs/slack_sdk/http_retry/builtin_handlers.html rename to docs/reference/http_retry/builtin_handlers.html diff --git a/docs/static/api-docs/slack_sdk/http_retry/builtin_interval_calculators.html b/docs/reference/http_retry/builtin_interval_calculators.html similarity index 100% rename from docs/static/api-docs/slack_sdk/http_retry/builtin_interval_calculators.html rename to docs/reference/http_retry/builtin_interval_calculators.html diff --git a/docs/static/api-docs/slack_sdk/http_retry/handler.html b/docs/reference/http_retry/handler.html similarity index 100% rename from docs/static/api-docs/slack_sdk/http_retry/handler.html rename to docs/reference/http_retry/handler.html diff --git a/docs/static/api-docs/slack_sdk/http_retry/index.html b/docs/reference/http_retry/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/http_retry/index.html rename to docs/reference/http_retry/index.html diff --git a/docs/static/api-docs/slack_sdk/http_retry/interval_calculator.html b/docs/reference/http_retry/interval_calculator.html similarity index 100% rename from docs/static/api-docs/slack_sdk/http_retry/interval_calculator.html rename to docs/reference/http_retry/interval_calculator.html diff --git a/docs/static/api-docs/slack_sdk/http_retry/jitter.html b/docs/reference/http_retry/jitter.html similarity index 100% rename from docs/static/api-docs/slack_sdk/http_retry/jitter.html rename to docs/reference/http_retry/jitter.html diff --git a/docs/static/api-docs/slack_sdk/http_retry/request.html b/docs/reference/http_retry/request.html similarity index 100% rename from docs/static/api-docs/slack_sdk/http_retry/request.html rename to docs/reference/http_retry/request.html diff --git a/docs/static/api-docs/slack_sdk/http_retry/response.html b/docs/reference/http_retry/response.html similarity index 100% rename from docs/static/api-docs/slack_sdk/http_retry/response.html rename to docs/reference/http_retry/response.html diff --git a/docs/static/api-docs/slack_sdk/http_retry/state.html b/docs/reference/http_retry/state.html similarity index 100% rename from docs/static/api-docs/slack_sdk/http_retry/state.html rename to docs/reference/http_retry/state.html diff --git a/docs/static/api-docs/slack_sdk/index.html b/docs/reference/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/index.html rename to docs/reference/index.html diff --git a/docs/static/api-docs/slack_sdk/models/attachments/index.html b/docs/reference/models/attachments/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/attachments/index.html rename to docs/reference/models/attachments/index.html diff --git a/docs/static/api-docs/slack_sdk/models/basic_objects.html b/docs/reference/models/basic_objects.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/basic_objects.html rename to docs/reference/models/basic_objects.html diff --git a/docs/static/api-docs/slack_sdk/models/blocks/basic_components.html b/docs/reference/models/blocks/basic_components.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/blocks/basic_components.html rename to docs/reference/models/blocks/basic_components.html diff --git a/docs/static/api-docs/slack_sdk/models/blocks/block_elements.html b/docs/reference/models/blocks/block_elements.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/blocks/block_elements.html rename to docs/reference/models/blocks/block_elements.html diff --git a/docs/static/api-docs/slack_sdk/models/blocks/blocks.html b/docs/reference/models/blocks/blocks.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/blocks/blocks.html rename to docs/reference/models/blocks/blocks.html diff --git a/docs/static/api-docs/slack_sdk/models/blocks/index.html b/docs/reference/models/blocks/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/blocks/index.html rename to docs/reference/models/blocks/index.html diff --git a/docs/static/api-docs/slack_sdk/models/dialoags.html b/docs/reference/models/dialoags.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/dialoags.html rename to docs/reference/models/dialoags.html diff --git a/docs/static/api-docs/slack_sdk/models/dialogs/index.html b/docs/reference/models/dialogs/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/dialogs/index.html rename to docs/reference/models/dialogs/index.html diff --git a/docs/static/api-docs/slack_sdk/models/index.html b/docs/reference/models/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/index.html rename to docs/reference/models/index.html diff --git a/docs/static/api-docs/slack_sdk/models/messages/index.html b/docs/reference/models/messages/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/messages/index.html rename to docs/reference/models/messages/index.html diff --git a/docs/static/api-docs/slack_sdk/models/messages/message.html b/docs/reference/models/messages/message.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/messages/message.html rename to docs/reference/models/messages/message.html diff --git a/docs/static/api-docs/slack_sdk/models/metadata/index.html b/docs/reference/models/metadata/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/metadata/index.html rename to docs/reference/models/metadata/index.html diff --git a/docs/static/api-docs/slack_sdk/models/views/index.html b/docs/reference/models/views/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/models/views/index.html rename to docs/reference/models/views/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/authorize_url_generator/index.html b/docs/reference/oauth/authorize_url_generator/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/authorize_url_generator/index.html rename to docs/reference/oauth/authorize_url_generator/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/index.html b/docs/reference/oauth/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/index.html rename to docs/reference/oauth/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/amazon_s3/index.html b/docs/reference/oauth/installation_store/amazon_s3/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/amazon_s3/index.html rename to docs/reference/oauth/installation_store/amazon_s3/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/async_cacheable_installation_store.html b/docs/reference/oauth/installation_store/async_cacheable_installation_store.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/async_cacheable_installation_store.html rename to docs/reference/oauth/installation_store/async_cacheable_installation_store.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/async_installation_store.html b/docs/reference/oauth/installation_store/async_installation_store.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/async_installation_store.html rename to docs/reference/oauth/installation_store/async_installation_store.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/cacheable_installation_store.html b/docs/reference/oauth/installation_store/cacheable_installation_store.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/cacheable_installation_store.html rename to docs/reference/oauth/installation_store/cacheable_installation_store.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/file/index.html b/docs/reference/oauth/installation_store/file/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/file/index.html rename to docs/reference/oauth/installation_store/file/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/index.html b/docs/reference/oauth/installation_store/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/index.html rename to docs/reference/oauth/installation_store/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/installation_store.html b/docs/reference/oauth/installation_store/installation_store.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/installation_store.html rename to docs/reference/oauth/installation_store/installation_store.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/internals.html b/docs/reference/oauth/installation_store/internals.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/internals.html rename to docs/reference/oauth/installation_store/internals.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/bot.html b/docs/reference/oauth/installation_store/models/bot.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/models/bot.html rename to docs/reference/oauth/installation_store/models/bot.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/index.html b/docs/reference/oauth/installation_store/models/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/models/index.html rename to docs/reference/oauth/installation_store/models/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/installation.html b/docs/reference/oauth/installation_store/models/installation.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/models/installation.html rename to docs/reference/oauth/installation_store/models/installation.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlalchemy/index.html b/docs/reference/oauth/installation_store/sqlalchemy/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/sqlalchemy/index.html rename to docs/reference/oauth/installation_store/sqlalchemy/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlite3/index.html b/docs/reference/oauth/installation_store/sqlite3/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/sqlite3/index.html rename to docs/reference/oauth/installation_store/sqlite3/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/redirect_uri_page_renderer/index.html b/docs/reference/oauth/redirect_uri_page_renderer/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/redirect_uri_page_renderer/index.html rename to docs/reference/oauth/redirect_uri_page_renderer/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/amazon_s3/index.html b/docs/reference/oauth/state_store/amazon_s3/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/state_store/amazon_s3/index.html rename to docs/reference/oauth/state_store/amazon_s3/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/async_state_store.html b/docs/reference/oauth/state_store/async_state_store.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/state_store/async_state_store.html rename to docs/reference/oauth/state_store/async_state_store.html diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/file/index.html b/docs/reference/oauth/state_store/file/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/state_store/file/index.html rename to docs/reference/oauth/state_store/file/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/index.html b/docs/reference/oauth/state_store/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/state_store/index.html rename to docs/reference/oauth/state_store/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/sqlalchemy/index.html b/docs/reference/oauth/state_store/sqlalchemy/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/state_store/sqlalchemy/index.html rename to docs/reference/oauth/state_store/sqlalchemy/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/sqlite3/index.html b/docs/reference/oauth/state_store/sqlite3/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/state_store/sqlite3/index.html rename to docs/reference/oauth/state_store/sqlite3/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/state_store.html b/docs/reference/oauth/state_store/state_store.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/state_store/state_store.html rename to docs/reference/oauth/state_store/state_store.html diff --git a/docs/static/api-docs/slack_sdk/oauth/state_utils/index.html b/docs/reference/oauth/state_utils/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/state_utils/index.html rename to docs/reference/oauth/state_utils/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/token_rotation/async_rotator.html b/docs/reference/oauth/token_rotation/async_rotator.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/token_rotation/async_rotator.html rename to docs/reference/oauth/token_rotation/async_rotator.html diff --git a/docs/static/api-docs/slack_sdk/oauth/token_rotation/index.html b/docs/reference/oauth/token_rotation/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/token_rotation/index.html rename to docs/reference/oauth/token_rotation/index.html diff --git a/docs/static/api-docs/slack_sdk/oauth/token_rotation/rotator.html b/docs/reference/oauth/token_rotation/rotator.html similarity index 100% rename from docs/static/api-docs/slack_sdk/oauth/token_rotation/rotator.html rename to docs/reference/oauth/token_rotation/rotator.html diff --git a/docs/static/api-docs/slack_sdk/proxy_env_variable_loader.html b/docs/reference/proxy_env_variable_loader.html similarity index 100% rename from docs/static/api-docs/slack_sdk/proxy_env_variable_loader.html rename to docs/reference/proxy_env_variable_loader.html diff --git a/docs/static/api-docs/slack_sdk/rtm/index.html b/docs/reference/rtm/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/rtm/index.html rename to docs/reference/rtm/index.html diff --git a/docs/static/api-docs/slack_sdk/rtm/v2/index.html b/docs/reference/rtm/v2/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/rtm/v2/index.html rename to docs/reference/rtm/v2/index.html diff --git a/docs/static/api-docs/slack_sdk/rtm_v2/index.html b/docs/reference/rtm_v2/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/rtm_v2/index.html rename to docs/reference/rtm_v2/index.html diff --git a/docs/static/api-docs/slack_sdk/scim/async_client.html b/docs/reference/scim/async_client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/scim/async_client.html rename to docs/reference/scim/async_client.html diff --git a/docs/static/api-docs/slack_sdk/scim/index.html b/docs/reference/scim/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/scim/index.html rename to docs/reference/scim/index.html diff --git a/docs/static/api-docs/slack_sdk/scim/v1/async_client.html b/docs/reference/scim/v1/async_client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/scim/v1/async_client.html rename to docs/reference/scim/v1/async_client.html diff --git a/docs/static/api-docs/slack_sdk/scim/v1/client.html b/docs/reference/scim/v1/client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/scim/v1/client.html rename to docs/reference/scim/v1/client.html diff --git a/docs/static/api-docs/slack_sdk/scim/v1/default_arg.html b/docs/reference/scim/v1/default_arg.html similarity index 100% rename from docs/static/api-docs/slack_sdk/scim/v1/default_arg.html rename to docs/reference/scim/v1/default_arg.html diff --git a/docs/static/api-docs/slack_sdk/scim/v1/group.html b/docs/reference/scim/v1/group.html similarity index 100% rename from docs/static/api-docs/slack_sdk/scim/v1/group.html rename to docs/reference/scim/v1/group.html diff --git a/docs/static/api-docs/slack_sdk/scim/v1/index.html b/docs/reference/scim/v1/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/scim/v1/index.html rename to docs/reference/scim/v1/index.html diff --git a/docs/static/api-docs/slack_sdk/scim/v1/internal_utils.html b/docs/reference/scim/v1/internal_utils.html similarity index 100% rename from docs/static/api-docs/slack_sdk/scim/v1/internal_utils.html rename to docs/reference/scim/v1/internal_utils.html diff --git a/docs/static/api-docs/slack_sdk/scim/v1/response.html b/docs/reference/scim/v1/response.html similarity index 100% rename from docs/static/api-docs/slack_sdk/scim/v1/response.html rename to docs/reference/scim/v1/response.html diff --git a/docs/static/api-docs/slack_sdk/scim/v1/types.html b/docs/reference/scim/v1/types.html similarity index 100% rename from docs/static/api-docs/slack_sdk/scim/v1/types.html rename to docs/reference/scim/v1/types.html diff --git a/docs/static/api-docs/slack_sdk/scim/v1/user.html b/docs/reference/scim/v1/user.html similarity index 100% rename from docs/static/api-docs/slack_sdk/scim/v1/user.html rename to docs/reference/scim/v1/user.html diff --git a/docs/static/api-docs/slack_sdk/signature/index.html b/docs/reference/signature/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/signature/index.html rename to docs/reference/signature/index.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/aiohttp/index.html b/docs/reference/socket_mode/aiohttp/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/aiohttp/index.html rename to docs/reference/socket_mode/aiohttp/index.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/async_client.html b/docs/reference/socket_mode/async_client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/async_client.html rename to docs/reference/socket_mode/async_client.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/async_listeners.html b/docs/reference/socket_mode/async_listeners.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/async_listeners.html rename to docs/reference/socket_mode/async_listeners.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/client.html b/docs/reference/socket_mode/builtin/client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/builtin/client.html rename to docs/reference/socket_mode/builtin/client.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/connection.html b/docs/reference/socket_mode/builtin/connection.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/builtin/connection.html rename to docs/reference/socket_mode/builtin/connection.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/frame_header.html b/docs/reference/socket_mode/builtin/frame_header.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/builtin/frame_header.html rename to docs/reference/socket_mode/builtin/frame_header.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/index.html b/docs/reference/socket_mode/builtin/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/builtin/index.html rename to docs/reference/socket_mode/builtin/index.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/internals.html b/docs/reference/socket_mode/builtin/internals.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/builtin/internals.html rename to docs/reference/socket_mode/builtin/internals.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/client.html b/docs/reference/socket_mode/client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/client.html rename to docs/reference/socket_mode/client.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/index.html b/docs/reference/socket_mode/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/index.html rename to docs/reference/socket_mode/index.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/interval_runner.html b/docs/reference/socket_mode/interval_runner.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/interval_runner.html rename to docs/reference/socket_mode/interval_runner.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/listeners.html b/docs/reference/socket_mode/listeners.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/listeners.html rename to docs/reference/socket_mode/listeners.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/logger/index.html b/docs/reference/socket_mode/logger/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/logger/index.html rename to docs/reference/socket_mode/logger/index.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/logger/messages.html b/docs/reference/socket_mode/logger/messages.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/logger/messages.html rename to docs/reference/socket_mode/logger/messages.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/request.html b/docs/reference/socket_mode/request.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/request.html rename to docs/reference/socket_mode/request.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/response.html b/docs/reference/socket_mode/response.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/response.html rename to docs/reference/socket_mode/response.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/websocket_client/index.html b/docs/reference/socket_mode/websocket_client/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/websocket_client/index.html rename to docs/reference/socket_mode/websocket_client/index.html diff --git a/docs/static/api-docs/slack_sdk/socket_mode/websockets/index.html b/docs/reference/socket_mode/websockets/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/socket_mode/websockets/index.html rename to docs/reference/socket_mode/websockets/index.html diff --git a/docs/static/api-docs/slack_sdk/version.html b/docs/reference/version.html similarity index 100% rename from docs/static/api-docs/slack_sdk/version.html rename to docs/reference/version.html diff --git a/docs/static/api-docs/slack_sdk/web/async_base_client.html b/docs/reference/web/async_base_client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/async_base_client.html rename to docs/reference/web/async_base_client.html diff --git a/docs/static/api-docs/slack_sdk/web/async_client.html b/docs/reference/web/async_client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/async_client.html rename to docs/reference/web/async_client.html diff --git a/docs/static/api-docs/slack_sdk/web/async_internal_utils.html b/docs/reference/web/async_internal_utils.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/async_internal_utils.html rename to docs/reference/web/async_internal_utils.html diff --git a/docs/static/api-docs/slack_sdk/web/async_slack_response.html b/docs/reference/web/async_slack_response.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/async_slack_response.html rename to docs/reference/web/async_slack_response.html diff --git a/docs/static/api-docs/slack_sdk/web/base_client.html b/docs/reference/web/base_client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/base_client.html rename to docs/reference/web/base_client.html diff --git a/docs/static/api-docs/slack_sdk/web/client.html b/docs/reference/web/client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/client.html rename to docs/reference/web/client.html diff --git a/docs/static/api-docs/slack_sdk/web/deprecation.html b/docs/reference/web/deprecation.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/deprecation.html rename to docs/reference/web/deprecation.html diff --git a/docs/static/api-docs/slack_sdk/web/file_upload_v2_result.html b/docs/reference/web/file_upload_v2_result.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/file_upload_v2_result.html rename to docs/reference/web/file_upload_v2_result.html diff --git a/docs/static/api-docs/slack_sdk/web/index.html b/docs/reference/web/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/index.html rename to docs/reference/web/index.html diff --git a/docs/static/api-docs/slack_sdk/web/internal_utils.html b/docs/reference/web/internal_utils.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/internal_utils.html rename to docs/reference/web/internal_utils.html diff --git a/docs/static/api-docs/slack_sdk/web/legacy_base_client.html b/docs/reference/web/legacy_base_client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/legacy_base_client.html rename to docs/reference/web/legacy_base_client.html diff --git a/docs/static/api-docs/slack_sdk/web/legacy_client.html b/docs/reference/web/legacy_client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/legacy_client.html rename to docs/reference/web/legacy_client.html diff --git a/docs/static/api-docs/slack_sdk/web/legacy_slack_response.html b/docs/reference/web/legacy_slack_response.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/legacy_slack_response.html rename to docs/reference/web/legacy_slack_response.html diff --git a/docs/static/api-docs/slack_sdk/web/slack_response.html b/docs/reference/web/slack_response.html similarity index 100% rename from docs/static/api-docs/slack_sdk/web/slack_response.html rename to docs/reference/web/slack_response.html diff --git a/docs/static/api-docs/slack_sdk/webhook/async_client.html b/docs/reference/webhook/async_client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/webhook/async_client.html rename to docs/reference/webhook/async_client.html diff --git a/docs/static/api-docs/slack_sdk/webhook/client.html b/docs/reference/webhook/client.html similarity index 100% rename from docs/static/api-docs/slack_sdk/webhook/client.html rename to docs/reference/webhook/client.html diff --git a/docs/static/api-docs/slack_sdk/webhook/index.html b/docs/reference/webhook/index.html similarity index 100% rename from docs/static/api-docs/slack_sdk/webhook/index.html rename to docs/reference/webhook/index.html diff --git a/docs/static/api-docs/slack_sdk/webhook/internal_utils.html b/docs/reference/webhook/internal_utils.html similarity index 100% rename from docs/static/api-docs/slack_sdk/webhook/internal_utils.html rename to docs/reference/webhook/internal_utils.html diff --git a/docs/static/api-docs/slack_sdk/webhook/webhook_response.html b/docs/reference/webhook/webhook_response.html similarity index 100% rename from docs/static/api-docs/slack_sdk/webhook/webhook_response.html rename to docs/reference/webhook/webhook_response.html diff --git a/docs/sidebars.js b/docs/sidebars.js deleted file mode 100644 index 549930ea3..000000000 --- a/docs/sidebars.js +++ /dev/null @@ -1,66 +0,0 @@ -// @ts-check - -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ -const sidebars = { - sidebarPythonSDK: [ - { - type: "doc", - id: "index", - label: "Python Slack SDK", - className: "sidebar-title", - }, - "installation", - "web", - "webhook", - "socket-mode", - "oauth", - "audit-logs", - "rtm", - "scim", - { type: "html", value: "
    " }, - { - type: "category", - label: "Legacy slackclient v2", - items: [ - "legacy/index", - "legacy/auth", - "legacy/basic_usage", - "legacy/conversations", - "legacy/real_time_messaging", - "legacy/faq", - "legacy/changelog", - ], - }, - "v3-migration", - { type: "html", value: "
    " }, - { - type: "category", - label: "Tutorials", - items: ["tutorial/uploading-files", "tutorial/understanding-oauth-scopes"], - }, - { type: "html", value: "
    " }, - { - type: "link", - label: "Reference", - href: "https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/", - }, - { type: "html", value: "
    " }, - { - type: "link", - label: "Release notes", - href: "https://github.com/slackapi/python-slack-sdk/releases", - }, - { - type: "link", - label: "Code on GitHub", - href: "https://github.com/SlackAPI/python-slack-sdk", - }, - { - type: "link", - label: "Contributors Guide", - href: "https://github.com/SlackAPI/python-slack-sdk/blob/main/.github/contributing.md", - }, - ], -}; - -export default sidebars; diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css deleted file mode 100644 index 65b7c372b..000000000 --- a/docs/src/css/custom.css +++ /dev/null @@ -1,583 +0,0 @@ -:root { - --ifm-font-size-base: 15px; - - /* set hex colors here pls */ - --dim: #eef2f6; - - --aubergine: #481a54; - --aubergine-background: #552555; - --aubergine-dark: #2c0134; - - --aubergine-active: #7c3085; - --aubergine-active-70: #7c308570; - --aubergine-active-50: #7c308550; - --aubergine-active-30: #7c308530; - - --horchata: #f4ede4; - - --slack-red: #e3066a; - --slack-red-70: #e3066a70; - --slack-red-50: #e3066a50; - --slack-red-30: #e3066a30; - --slack-red-20: #e3066a20; - - --slack-yellow: #fcc003; - --slack-yellow-70: #fcc00370; - --slack-yellow-50: #fcc00350; - --slack-yellow-30: #fcc00330; - --slack-yellow-20: #fcc00320; - - --slack-green: #41b658; - --slack-green-70: #41b65870; - --slack-green-50: #41b65850; - --slack-green-30: #41b65830; - --slack-green-20: #41b65820; - - --slack-blue: #1ab9ff; - --slack-blue-70: #1ab9ff70; - --slack-blue-50: #1ab9ff70; - --slack-blue-30: #1ab9ff30; - --slack-blue-20: #1ab9ff20; - - /* used for dark-mode links */ - --slack-cloud-blue: #1ab9ff; - /* slack marketing color used for light-mode links */ - --slack-dark-blue: #1264a3; - - /* used for functions */ - --unofficial-orange: #e36606; - --unofficial-orange-70: #e3660670; - --unofficial-orange-50: #e3660650; - --unofficial-orange-30: #e3660630; - - /* turns opacity into flat colors for bubbles on top of things */ - --slack-yellow-70-flat: #fcc00370; - - --slack-yellow-30-on-white: #feecb3; - --slack-green-30-on-white: #c6e9cc; - --slack-red-30-on-white: #f6b4d2; - --slack-blue-30-on-white: #baeaff; - --unofficial-orange-30-on-white: #f6d1b4; - --aubergine-active-30-on-white: #d7c0da; - - --ifm-h5-font-size: 1rem; - /* --ifm-heading-font-family: 'AvantGardeForSalesforce', sans-serif; */ - /* --ifm-font-family-base: 'Salesforce_Sans', sans-serif; */ - --ifm-navbar-height: 83px; - - -} - -.navbar__logo img { - height: 150%; - margin-top: -8px; -} - -.navbar--dark { - --ifm-navbar-background-color: #000 !important; - --ifm-navbar-link-hover-color: var(--slack-blue); -} - -.footer { - --ifm-footer-background-color: #000 !important; - --ifm-footer-link-hover-color: var(--slack-blue); - --ifm-footer-color: white !important; -} - -.theme-admonition div{ - text-transform: none !important; /* Disables uppercase transformation */ - -} - -/* resets striped tables that hurt me eyes */ -table tr:nth-child(even) { - background-color: inherit; -} - -h1 { - font-size: 2.5rem; -} - -/* Reduce title size in blog list */ -.blog-list-page h2[class*="title"] -{ - font-size: 2rem; -} - -/* Reduce title size in blog page */ -.blog-post-page h1[class*="title"] -{ - font-size: 2rem; -} - -/* changing the links to blue for accessibility */ -p a, -.markdown a { - color: var(--slack-cloud-blue); - text-decoration: none; -} - -p a, -.markdown a:hover { - text-decoration: underline; -} - -a:hover { - color: var(--slack-cloud-blue); -} - -.article h1 { - font-size: 1rem !important; /* Adjust the size as needed */ -} - -.card { - box-shadow: none; -} - -/* adjusting for light and dark modes */ -[data-theme="light"] { - --docusaurus-highlighted-code-line-bg: var(--dim); - --ifm-color-primary: var(--aubergine-active); - --ifm-navbar-background-color: black; - --ifm-footer-background-color: black; - --slack-cloud-blue: var(--slack-dark-blue); - --reference-section-color: var(--horchata); -} - -[data-theme="dark"] { - --docusaurus-highlighted-code-line-bg: rgb(0 0 0 / 30%); - --ifm-color-primary: var(--slack-cloud-blue); - --ifm-navbar-background-color: #000 !important; - --ifm-footer-background-color: #000 !important; - --ifm-footer-color: white; -} - -.alert--warning { - --ifm-alert-background-color: var(--slack-yellow-30); - --ifm-alert-border-color: var(--slack-yellow); - --ifm-alert-background-color-highlight: var(--slack-yellow-30); -} - -.alert--info { - --ifm-alert-background-color: var(--slack-blue-30); - --ifm-alert-border-color: var(--slack-blue); - /* --ifm-alert-background-color-highlight: var(--slack-blue-30); */ -} - -.alert--danger { - --ifm-alert-background-color: var(--slack-red-30); - --ifm-alert-border-color: var(--slack-red); -} - -.alert--success { - --ifm-alert-background-color: var(--slack-green-30); - --ifm-alert-border-color: var(--slack-green); -} - -.footer { - /* font-size: 80%; */ - padding-bottom: 0.5rem; -} - -.footer__items a { - color: inherit; -} - -.footer .container { - margin: 0; -} - -.table-of-contents__link { - font-size: .9rem; -} - -/* bolding ToC for contrast */ -.table-of-contents__link--active { - font-weight: bold; -} - -/* removing ToC line */ -.table-of-contents__left-border { - border-left: none !important; -} - - -.dropdown-hr { - margin: 0 -} - -/* increasing name of site in sidebar */ -.sidebar-title { - /* padding-bottom: 0.5rem; - font-size: 1.25em; */ - font-weight: bold; -} - -.theme-doc-sidebar-item-link hr { - margin: 1rem; -} - -.sidebar-sdk-title { - /* margin: 0.5rem 0; */ - padding: 0.5rem; - /* border-radius: 4px; */ - border-bottom: 0.5px solid grey; -} - -/* .theme-doc-sidebar-item-category-level-1 .menu__link { - font-weight: bold; -} */ - -.theme-doc-sidebar-item-category-level-1 .menu__list-item .menu__link { - font-weight: normal; -} - -/* removing sidebar line and adding space to match ToC */ -.theme-doc-sidebar-container { - border-right: none !important; - margin-right: 2rem; -} - -/* announcement bar up top */ -div[class^="announcementBar_"] { - font-size: 20px; - height: 50px; - background: var(--horchata); -} - -/* navbar github link */ -.navbar-github-link { - width: 32px; - height: 32px; - padding: 6px; - margin-right: 6px; - margin-left: 6px; - border-radius: 50%; - transition: background var(--ifm-transition-fast); -} - -.navbar-github-link:hover { - background: var(--ifm-color-gray-800); -} - -.navbar-github-link::before { - content: ""; - height: 100%; - display: block; - background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") - no-repeat; -} - -/* Delineate tab blocks */ -.tabs-container { - border: 1px solid var(--ifm-color-primary); - border-radius: 4px; - padding: 0.5em; -} - -summary { - background-color: var(--ifm-background-color); - --docusaurus-details-decoration-color: var(--ifm-color-primary); -} - -details { - border: 1px solid var(--ifm-color-primary)!important; - background-color: var(--ifm-background-color)!important; - --docusaurus-details-decoration-color: var(--ifm-color-primary); -} - -details[open] { - border: 1px solid var(--ifm-color-primary); - background-color: var(--ifm-background-color); - --docusaurus-details-decoration-color: var(--ifm-color-primary); - -} - -/* Docs code bubbles */ -[data-theme="light"] { - --contrast-color: black; - --code-link-background: var(--slack-blue-30); - --code-link-text: rgb(21, 50, 59); - - --method-link-background: var(--slack-green-30-on-white); - --method-link-text: rgb(0, 41, 0); - - --scope-link-background: var(--slack-yellow-30-on-white); - --scope-link-text: rgb(63, 46, 0); - - --event-link-background:#fad4e5; - /* --event-link-text: rgb(63, 0, 24); */ - --event-link-text: rgb(0, 0, 0); - - --function-link-background: var(--unofficial-orange-30-on-white); - --function-link-text: rgb(75, 35, 0); - - --command-link-background: var(--aubergine-active-30-on-white); - --command-link-text: rgb(75, 0, 75); -} - -[data-theme="dark"] { - --contrast-color: white; - --code-link-text: white; - --method-link-text: white; - --scope-link-text: white; - --event-link-text: white; - --function-link-text: white; - --command-link-text: white; - - --code-link-background: var(--slack-blue-70); - --method-link-background: var(--slack-green-70); - --scope-link-background: var(--slack-yellow-70); - --event-link-background: var(--slack-red-70); - --command-link-background: var(--aubergine-active); - --function-link-background: var(--unofficial-orange-70); -} - -a code { - background-color: var(--code-link-background); - color: var(--code-link-text); -} - -a[href^="https://api.slack.com/methods"] > code -{ - background-color: var(--method-link-background); - color: var(--method-link-text); -} - -a[href^="/reference/methods"] > code -{ - background-color: var(--method-link-background); - color: var(--method-link-text); -} - -a[href^="https://api.slack.com/scopes"] > code -{ - background-color: var(--scope-link-background); - color: var(--scope-link-text); -} - -a[href^="/reference/scopes"] > code -{ - background-color: var(--scope-link-background); - color: var(--scope-link-text); -} - -a[href^="https://api.slack.com/events"] > code -{ - background-color: var(--event-link-background); - color: var(--event-link-text); -} - -a[href^="/reference/events"] > code -{ - background-color: var(--event-link-background); - color: var(--event-link-text); -} - -a[href^="/deno-slack-sdk/reference/slack-functions/"] > code { - background-color: var(--function-link-background); - color: var(--function-link-text); -} - -a[href^="/deno-slack-sdk/reference/connector-functions/"] > code { - background-color: var(--function-link-background); - color: var(--function-link-text); -} - -a[href^="/slack-cli/reference/commands"] > code { - background-color: var(--command-link-background); - color: var(--command-link-text); -} - -.facts-section { - margin-top: 2rem; - background-color: var(--slack-green-20) !important; -} - - -.facts-section .tabs-container { - border: none; - border-radius: 0px; - padding: 0em; - --ifm-leading: 0rem - -} - -.facts-section .tabs__item { - padding: 0 0.5rem; - color: inherit; -} - -.facts-section .tabs__item--active { - border-bottom-color: inherit -} - -.errors-section { - background-color: var(--slack-red-20) !important; -} - - -.inputs-section { - background-color: var(--slack-blue-20) !important; -} - -.functions-section { - border-radius: 6px; - padding: 1rem; - margin-bottom: 2rem; -} - -.facts-row-list { - display: flex; - flex-wrap: wrap; - column-gap: 0.5rem; - row-gap: 0.5rem; - align-items: baseline; /* Aligns items to the same baseline */ -} - -.facts-row-list-item { - display: inline-block; -} - - -.inline-icon { - height: 1.9em; /* Matches the height of the text */ - width: auto; /* Maintains aspect ratio */ - vertical-align: middle; /* Aligns with the text */ -} - -.functions-section .type { - text-align: right; -} - -.param-required-section { - padding-top: 1rem; - margin-bottom: 1rem; -} - -.reference-container { - display: flex; - flex-direction: column; - width: 100%; - /* border: 1px solid #ddd; */ - border-radius: 8px; - overflow: hidden; -} -.reference-facts-header { - display: flex; - /* background: #f4f4f4; */ - padding: 10px 0; - font-weight: bold; -} -.reference-facts-item { - display: flex; - padding: 10px 0; - border-bottom: 1px solid var(--ifm-color-emphasis-200); -} -.reference-facts-item:last-child { - border-bottom: none; -} - -.reference-name { - flex: 2; - /* padding: 5px;*/ - min-width: 200px; -} - -.reference-description { - flex: 2; /* Makes description take extra space */ - padding: 5px; -} - -.reference-last-column { - flex: 1; - padding: 5px 0; -} - -.reference-subitems-bubble { - display: inline-block; - background: var(--ifm-color-emphasis-200); - color: var(--ifm-color-emphasis-1000); - padding: 2px 6px; - margin: 2px; - border-radius: 4px; - font-size: 12px; -} - -.param-container { - border-top: 1px solid lightgray; - padding-top: 1rem; - padding-bottom: 1rem; -} - -.param-container:last-child { - padding-bottom: 0; -} - -.param-top-row { - display: flex; - align-items: center; - margin-bottom: 1rem; -} - -/* left-align param name */ -.param-top-row .name { - flex: 1; -} - -/* right-align Required and Type */ -.param-top-row .required, -.param-top-row .type { - margin-left: auto; - text-align: right; -} - -/* add space between Required and Type */ -.param-top-row .required { - margin-left: 10px; -} - -.info-row { - display: flex; - /* align-items: center; */ - padding-top: 1rem; - padding-bottom: 1rem; - border-top: 1px solid var(--ifm-color-emphasis-400); -} - -.info-key { - flex: 0 0 10rem; - align-items: center; -} - -/* hides next and previous */ -.pagination-nav__link { - display: none; -} - -/* -html[data-theme="dark"] .button:hover { - background-color: var(--slack-blue-30-on-white); -} - -html[data-theme="light"] .button:hover { - background-color: var(--aubergine-active-30-on-white); -} */ - -.button { - background-color: var(--aubergine); /* Change color on hover */ - border: 0; - color: white; -} - -.button:hover { - background-color: var(--aubergine-active); - border: 0; - color: white; -} - -.footer-spaced { - display: flex; - gap: 20px; - padding-bottom: 1rem -} \ No newline at end of file diff --git a/docs/src/theme/NotFound/Content/index.js b/docs/src/theme/NotFound/Content/index.js deleted file mode 100644 index c122bc039..000000000 --- a/docs/src/theme/NotFound/Content/index.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import clsx from 'clsx'; -import Translate from '@docusaurus/Translate'; -import Heading from '@theme/Heading'; -export default function NotFoundContent({className}) { - return ( -
    -
    -
    - - - Oh no! There's nothing here. - - -

    - - If we've led you astray, please let us know. We'll do our best to get things in order. - - -

    -

    - - For now, we suggest heading back to the beginning to get your bearings. May your next journey have clear skies to guide you true. - -

    -
    -
    -
    - ); -} diff --git a/docs/src/theme/NotFound/index.js b/docs/src/theme/NotFound/index.js deleted file mode 100644 index 3b551f9e4..000000000 --- a/docs/src/theme/NotFound/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import {translate} from '@docusaurus/Translate'; -import {PageMetadata} from '@docusaurus/theme-common'; -import Layout from '@theme/Layout'; -import NotFoundContent from '@theme/NotFound/Content'; -export default function Index() { - const title = translate({ - id: 'theme.NotFound.title', - message: 'Page Not Found', - }); - return ( - <> - - - - - - ); -} diff --git a/docs/static/img/bolt-logo.svg b/docs/static/img/bolt-logo.svg deleted file mode 100644 index 5077600d5..000000000 --- a/docs/static/img/bolt-logo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/static/img/bolt-py-logo.svg b/docs/static/img/bolt-py-logo.svg deleted file mode 100644 index 1dcab5261..000000000 --- a/docs/static/img/bolt-py-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico deleted file mode 100644 index e6e9a4aa71ffae29bbfaeacc2bb431272df45cc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24499 zcmeHv2UJu^6Yh|cWDrFKBqLFRNCBOS;p-WUL`u;FG^vd#3+ z8~}3NUDJ6}p|Z_$0_rn#sj_BIsj5|PxvJb&^qXlmrU3>|YEZh$U zqlSM8m~t2_;2qE((I8xd!TdsCFbt@>0KxE>PDFx-+v@uA+LY;Ka&ovJHI9$%)#t`DjTBz z8Tmj~)rOD_>2(7P2JhdH|KE_Y{*7@pnCNq%0>D~lWMJ?o_8+w$D_;rGPb-P&KMC6I z3j+Mxq2EJ1t?v-_+qC0t+XnPX%f@*H=6sETWFHB{`)A}!rT2;fc_ZKY4z|os?<<$A z=_AqOLS5J>8~YCQozKt82V?(cOBrA7t8bM_ruX~naW=$bW&S1RY$*LAzv0SX^1s?} zP#!dH(pjU7-{Swn{PeyWpwDl9gMY)ie6EI5Ta|+`TY|&kxIjKR7|+!o%G#nYz?kJ5 zaHHh6;t%rH<%2fT09iwu>wvs_5I*Pud{TZ%en!6`ME}*k8`&gdT|QI}Y)Jty4_^Qq za7~}1VGgndtwaV%p)%-^c{V})1;fwwL*I-9qTl`t^`C#C^<-oCv*gPgcD>o0k4-~k zA%*DWlg#Yn|5lLB8sOSWH}%yRkf6&o_V-n&9r#x0EmIfke{qBsD{pfQ&k><>%Mxba zjMF`H|2~%t!2?k6NEZ+W_5SEPh(`}n*%#QgOIZ8rhcQw)v!_y%8Y>@?3v94wSbGfE zpIxp9K^bg0uq&(nEaSz1y34@ky$az(m#d!sp}Z~aXq99ve_(TGZsZTW13UH;Jm>Iw zJ2%V!vo8NRV3#6)MLw{tR|e}3lR|B9N#|Yrljj$k9!h&<32;Feza<}Fd;x6XSHB`3 zqJicDqyx5+4duC|3yDGUx9T6L9OSowJ+>F|T>7^# zAXR#Mk*a(@EC0)0jW78x7{Hu__H7UkXbgKwRg}8RRP90R^1XmARnr@-(k6%Kpyy}W z|D`4j2JI1D(?DM!_*5WF*!+JI{~h_iDhJx{g7J0$d#56>2LyZ5F98~Ze?xwEsY=#X z^8?b8zgs@E*WF4sl=pAQ?=Dle{g!-az4%`HAzlBgV~(X;|1P%DzhJ$9zFnvu(0@~Z z`L=*=fzn`IV8ZhG)p&i4*g`)*YZjKLTRN}ZX8B-^DaMxn)A);yQoRi6YG}QH)~wAu zy)y;GUDNr!fIlb@eB*|9>qQ7Q*V!tKsqMpH0?IKMKR=*_Hikfu#$d*A7AOO7%5Va3 z;4mC0_`zX*esG-f$}&9AH|tLsUM0x!^II>3D&Y8)!SVbcrl1^z9uOe@8$&=j22(qa zf&3KECe<8-f9j_IEVg`(?Q50={(>L_4pbJf_hXDW8||z_>i=ScY$Vi%?5Nar-&`E9 z?Xx5i1A$VAe#wn>{*8Cgc{q@ryU8wH_u+zlLnmaHZpI;e)v3Z~kme~5gGhX*Ob2LnR7e8o+5hqFm zi$fx#PXUYbTQR^tg025MV`I)1?jK=?%E5PW35x^tz4^CrZ_Ee2Yho3&CS$k}-4ci;!#_8g=aeh21_JbxE{;48SbQO@sr z{~h?Db0O8jVY1(ac_ZKdCVuc;4~QfBuKyd~Ew&B6f*46S z{QnldFaBDTs6Ka-s=Sb8|YhW!sdL49;_$&8`}ZwnW%5+bjU|(%=wNE zTmM(_1D~+_W-R|CEs@^u0bw%YdByiF?0@E?9{&^kkk1idUHT_@x1e1D`alraDO>uX z|HQsNpJuUV7r)Z~psxb9kpIVd-mjJc{d)!Y*?l)*{bI*sZQ-x65k~_LGzNy;O=>?= zA37hwjv1JiQV-!VgQ7h+?u0OwU3>qGCy`CF)s zc$y^)c$$tF@}QKVdqA7(Y)nJr@MSKoe-F@oijC*X-+c$;1M2t3LG;*u-^ly_zyIIu z0myd``S*b@4*~qD&EVXt<)=fbN)w<<0r#&iVmdU4zSR=wd=0wO1>L0re#mm@ewItR zfW+qd(7hwzD{R>qz}Zh*b|;11YK49i3SZT~Iof3{Pl2~%%HfW>qd zyo3I3{|kn%zG!ToYX+YQw*C+Cf1w?M7f8~e%T%5Jl)Lr4zF#TtL8_Wz@pz{5%VBYT zGX{N%t^bqw!C5GO0PtI<{R+Mx(SWm{J6Jrf2!WH|#Jyo0;PDFU{;QwI&sPNS|GhK9 zt`&qU`dzx`?Wg~l`e07hgSmg>M}7G#<&ZA>yZGIn@&9pl56-50 zf7AwWPJ0iW{Rx3FSpF4^-=YC$iZkFW<&QghKimHs@q@D;|L@@k*jJ%*SE!GGo_G5e zmcN@1`eF@?>0f-|zk(k+CxY$)e5(zcbuQ2sT0m|)B>(SXhU$YpUj_7yeWfb$*m;AE ze+5583vV+Zgm8j&V-(vC(C-~U*RJ31!Sdf2f38=igw8M5@8v>wm46~Ya}ZibHuBl{ z{;T*m@^A%bmK*2S#>`-`gpuyWlH{3pJL8(RjgS6G_g8AI#zkH%o5{pOC~ zm&9WHW}MFV;df%*$Q!aXzK0*QuY2QqynfFvo$uv0v4cGTu!S`@%J|*y>o(sOcUvLs z&^oqRzFUS63&2?WpKaiq1NrAS*Z()tUu;0WH2E)97!2ti;3K3d~2(h|n?+e;8hw48$MAy8(Z23u;sRC4apf)B|*7Odv+X zD9e}uPQdg_dpE~xU)#U(pZ&o6rQMtQ>1#i(eC^jYBJ_GcVVKu(2kC07k&`k)cc#cS z)Rm7yx3!=^3~4eGha@W)j0L8ltf=o6GuG)Itv?$pFflJ{aM%@(++RAI^CgXo5Opsh zzM`(B?QzkBbjH5~S5ixn^7(NW>-eaRY391Zh_ zvpf`Sa&m2RA7>UNKHutO6sw0!`8Yo0?#ARHiR?bn(P8jZdzHfchHdt+ltSLF!b_Su z$m2?|IhxlY3f3g)#Pl$DnFGx-{yEM9rY1(gz-epK*S6_>!w+`MetcBe(H9@LJ^6L= zB=I!ew4*FHZqh!cGmp9M4B>jJhWeUc+&@x`x<8f%J1Eqf-q3wJV;9E_yh~R8m0pKV zOUcTKEw`Y81L~s=;aP7N&$wY=!eiDQAhE5fkoopG!Ev^Um@Q1U|b(ycB@76D8=j2_qS?k6{PdGNN=oMJ5Hg<>-msL^;P&l*po`*$t?RbAiBWarbLE{Y`)84kWdAubYx|P*n z^o4`-2S!&Kx&@^%Ty2V>-LH?~u=k{J#K*a3KJ4AEeuXDCns4^rK&S9>MUKm3r!J3e zF~(lU&p21pEf(z5&B+{Mn>2DOahxqk=3u9v^LqD^ltnSBq2o1W**20ryHysVtKLc~ z6{k6gVvfjaj_)R|(qxIf_pwl;fv%{Jg*kphQVN`mlCF+>t5hhMS71%l zy${13#h=c-Q{#VrGR8}UI)1FToDxQ(%AAyROc?#RV^^MI^X}R>9MP6Dj`<(>Q+6En zFmX-f-rl(L%}AHNwzTC*`Je$j}1~07L zMPv4zXIg==9GUQSe)pk4UbF3%ipSn;Po3%;q8<}?3MaZlkzG%nT9hFwdIh|YXrwzG zT+L)CskV}B=zNh3J#9Mgi8)`KkVDlbA$xf~2I$Q3Ja>eT^4(?iUW<5~MLm7MdHxCq z?07NCfyT_ED&d_{vDc0__|IQ)VgklTCo^j(abKKYbYJZDnZMo}i^xfo_9VPSQ`x;- zl3R9H9YZ7!d$wK3V!<;$Fe2A=q+hdtG)t(4A|i2)K5*ZY5RchrlXl~lSo$&zw}Is+ z>f|zBV&v))jlA9B9K-fRsJkDI>juGN5^5;|5*0i4$=&@ZrB;-Kn^Ze-r9=AAl3KeY z<13;IdrB{P*0R*5eW-mwgCcgQ&s?nFf3A5Eb9Hq0NIhwSoWbpRlDd+o;YXQL_KlO- z6_kpMOA$?7B(p1deMCeN=@QEtYm5_9Hb9m)x7Y3Y=;hl5FFI?bJ{`)2e0!8$M^yD+inD?yHIt{B;ta zxqDdatqftgbQ;u$q6$#dbcdqoG)QEx%wIdDIApKVBEA&W)%L>qrjrGM?yEI|6HCN4 z15#?b_|M)W%{32>6RN+whYN%6NX_{;g>%z1X%TzmGh42K!6WcR&#Dh$peEi5)a*=!a zrL6HgS2nJogSUYs3tY9S+-rtbJ*W5g2pYxN0#=VcrHR0LB@K*^!Qd^nvbCb-1iEBB zW6rVV(fV1qNr&GLOZo3lJ`FgR%_2m0MD7C}^Xwe8F^P10j4dl*aMwj~S@xD;A?lRY zKG38qUX{-H7Dqw5DX2Xfi&5t5xjnOc_jGgYeE-h*h6V!|@5JsxZF8-+X)tZ{L8mo5 zI61;`2Q4QroR*vE8e17HbPOk^ z>XW9l;P(CRpt|M+O|XmG##VOG=oA4UO=&Pj?)RnBI_G@hFAf;O$Y^L$x^ql5Q-9N-!ch?%s!c`CF zy6Pf{Z|>Y6Z_(l}%OUoJBnMaMSN@O`W$3#gbuj9`E*$SQ92E3PQ0a=$oxcJ>9Ob`|t=2PP#v1G0$FIj?>9RC{)nY zT_b_dGvW-Ags7FMRtf`Em*Qw?t+S-eQ^Pikd2){<-!D)3uq?3QoFwMXc+e4X1IJAV zy<5l2YPO0J6$D1JdMw3)eqM9ol&Jd;Ym8m9{o|UXE1>14-SPC5Ij6$ zdY~|^F-`4w%qLf!IzJ*m?Bny+8`1e^SQ9+`L#%MQOtak9?gX0D+FbXzqaDZIL)b3)k=^v!1=DKZ zH}kw)eDGI;=Rb0dXoybaUbcS~RwBsZ;tftM`qCXm#HkogK6AN5hwKM+}!5{=;^CP3tfUWOC=0&{Nf$!6DhkxMVIE%lN8>7i;>0g%mLJQn0-hTJ~{5GxvbXU!05d^ z$W&K~OJzAfZL#3vW!4}9JLeKpefcuF+_+mdr`dYpg*=hLsebz)7kLcngAXx-C+u8s z9iETMaI#ljRX#b7+U20b;pes^+=SYEewqkijN?RKn^7lnn?xQ=Ms7eLj6}^Lf25_kdinCFg-WVf^Z9W`_BE%(ZK2!C zpf#7X;EgFCExSL_^!*`>S(1x)&n2zeUV(2c;h}JhZJZ-Xol?$&z=si5ol)SnsB~S55>{T&AS?zgvt`tB)}_+ zR(;#mx~*Kz%Je-bAPjzpZ-d*$X3=`33dWTSiCKaiD^#fuo;)$nAYgkJ>jdY@q_e!Z9XJMEd4mTTr zl@KXFa=`l7Q%{mLvhuVg8=E|qNlWcz?JL!mFSkz|^B#EpoO;kqi#3D-@jxdOc}!0t z_pNh;lY+zX!~xr=s2M(ltFLar8~hlNv}vUK>)Wu>ZS1icjEco2g=q}KXppcnbYomR#9l^L5jK{UysmkvxbGqxv zXIv|F3BgG>PGkJJy%o&$h0mr_5jil0aRx4oR#PP|YjS)nb91Y~Sx%V}fwY|-hwo1v zu1=LBJ-d=Xl>~dvoWT>b6(rdz+6j!javaCjC;cT8}{huZRZ!qfKy}Y`` zBOZ|_nOi1J+mC!~U9Og{30ez?C<+w8^FHc}QbY+-GT)~vo$(ElCglB=9XQ6tK1H;F-TtP^l$1|e%~m3J3TH?Z4NWWgat$BQkoDhr+W`OM zoj}iaZMWf7^O|$fPJFP4agV0TR8nT2{mJ(Jq@oU!Z}KKn-ilGF=@ltwwuW%{E6~F^ zSgnUt7eDbbxGvov)p{{J+hRKONXjK7p@(JZz-PJ>AJlr!`(@;@#A9AvCYrw-HB;5{ z0H$68d(P`{bI7w15x0O2^t-XEiY1p`BYc%CZzf2ilgBCGt+uis{Ek!hBW`jMTziFs zlF6Mj1&V(fh1pZY_2n51`Leo4+T=ekce2EiJtX(TRWD?j*W?Zi+!L4C73^Tzo=TXu zucr;w?Zb4;W9VHV9cEm=UgZ!jB@H*x?9TF#nG#Aex0f%AC1sdcv&PQ0tJE`d$lYt3I~g@yUt9(Nyz(-ojR@jf5bS@&RC>4X>8EnaVf zab~Ab=Ii7%ZS+;{R4BUF5vMixi^UVppgTK!E6H@8oJP<#hxHD>>>ORHP3`Nx=_X-R zA6xA}x zOV?OlJ*o+n3lC?u%b-*oOW*WNxyn&qTIo+Ncza^@)BC;q7sYjV@S|_A)Ep-C!-$w$ z*uK;`on>1WI#v4N2tYqAMODe3d+yT?_IagyTpqp`IuO;Gri1d~_OCL=V(c}dKBl}p zp=?6bbFSSzTb=%e5zFd>%Bsg2f;5r(I7vy|*{5$~l!#q5hi{#WW_er$do#ypXKaw} zJ9)*I@U>Jy_##Jg_rRcA=#0sUZ21EF$}I1}u-4wT+j{-W;+2NiNEr&bX?hYJYo13= z9KS)rQ1SP;zl~mh1<`q*0 z#o0LJ^YM~T3e9qt518HCc7lB0V|A_2y5dKjRj!QB59vN4L$5Nm&s?vy2-PS^%<6b@ zbRVg?N_(oB=43Z%@(IpZv>N`!QDj#CZT$v!;rJ5K0;E~`h`&@3szsmrMnFN1QcpzS zt{l@xhSR3+a&5e1n9L$RQ?BVBb2-^;dURz#Uv2?Mp{dYc-qAfj2&pwt!j+wV?ov4O zG{gIVZhl2-4a)QU&(S>3rS|1N=nyM_-H8{szb=T>KN?)cY899s5Ihy-8oR)U?iN(L z_=q&YtFt(5v}!1yvLv}MavM$l9g2N-R)#nvUYM6^SCDs5eD*%u&Z~s7s~eAh2BYZi zA&aMVicgjHDmwNqcR0q>b0#lwycmTG3qy2eU2NfK*Pgi#;7uj_@Ge*iahk}J~z%*kd)omsD z$=W?;n4!~sw^#~fe(ajps+W8F!(A0SJeKSCH>}zn&fnv6SFO}{8K8Gw!;vl*fiLvI zJDXBH%sNynkj1EG?kQ%|j+~_PO_fWxi!txIKE5)EU<$upIwu*EL0@+L0&Ot6HNX^eI#@)w{ zz5o8$NOJb^d7PJyv24`14m&f7;jW zl)TQRmqo}@R?Gq+N-fUguDl=be3EE0xSd}n*A^w_HT=e6o?tgWoPK%!Ch2tRxt-M+ zD-RNyy7ed{VKtALImNDCXJ!2akN@QGCU4|~+U~{PRO!O;?qPQAd*RAw7R)eg?52V| zJ^2puJRLqk{Da}%beNBICn+UX?z)7rb*daO`|i93WVyNud*!81acPfKTazWs6XY8dS~cz#0Xs{0vkD< zAKnt^CI1RR#_8nFPJJ4g&>B61e&hku)q~NM4jj;CJoUzufy6X!&lv`nXKkK24AmFP zz+NN5rbSw`dJ2@>WYK1-@$&~YXV0*>XzxayQU=b zOp(;n=KJA0or#~>K08nr9tBf)9!w}oZ{VYCc#<;xxY(K{pPW|*PfQ!d_>BAt4Loz# zE_k4u;r6mp?+`&4<++K92u{3_iLuc(uW*;qdaht)6^r~MA40E&SLdpyB}^{ElAg(v z1ZlkVK@V%fZWlMu$oLt%-aYz4uL^-YS5q0fSlI}>CKz*-#IG)`SSz_-Puj#`hWRM0#r<%h&iS&|n}=tDfmbYgLiaf3ZdnSLv9m>F8sh~2Ifq!b$lT|jLIf4x z=D_*rgOuNZ?GE|~Z)Xk3okTG{o}gk>_y{qdLu@&IsJV=I{wz(x6WGHBhryx{I-$^a z&hEP(eDbJ2RF$o#hRmZ(;(>Rajq5mM{-{I0{DHaa2beOeTgYXTAt67{**f2w0>lR? z1q)u#2%XlsK+)~AhizAktj`N85;D^vp>n%HcVDR~-|>>TFRD7UJxb-NMH{7C=d2soO`6^d>HF1@`LVkHwM!& z&(GSM_1g%C7iKIH%e)&8Xvsx5TGGa0+??@=XO!7$$RjfH<1-fuRxN7j6_AvNj9_jD z9w*~gDxLH}#O5BrALA^U#)Z!V=s|2~wxwA|6QA=VXH^|Ov);AOc%ZR@7*CPE2tKb} z;kRm&Vj1}Yf)?}wvowv`*4Eld6EJ~|=Lv;JFGu6M=D5E~2BLH3t^^PIxxI9zhzyHe zY#!d@yqbWDH0vLn(2fYMY@nmcW~AOeYqogVdx6Vx&s0a3@}=a_-A}0N4yj6hp2-T% zYoG0tB1;&0ACVGcB}ofAM=oYUb=i0K#Hkl25Eh~YyH}5&x!}_!K{I!hSIKQ+?LlP$ z2N&NMZQNSQ{5@;=S+pqu+MN4^zk=L>OMSse*FBGTB>S!}O0zN5P@kLe=jF^*m-|q9 z$^Lom{Axr^~mbM3Oz27b~zF;9?+^RV9ha913%xE{FeFsWVyZE%-KGfYzCvA4dJ<6v8M)?LM z+L$IIDXwU)1@X=4%)KI)!n=T+6|8@y_}P`%C(NsqooavR$_P9}u``m2e4b}kw%0*hTl=%C)OLZBP0_%R~V-0Cv_7A{HQm&Px#>HJUp=)?D^KPQP+n)(3z+1fCn@d1`v}@=>Pws^_ zAXqQ&<@n7J2H#YvldCL=sYk`EX`cl#`M&d6k!}prT9}pwb`14d&+WM~bglfieApkT zW%q@DpiJPS2?EovXef$H`lQ7%9Q@JNmf+GOSKgAtN(GZWQ-&I)`cEDd^hE28ahk~G z@0DKEma?QOym{=+a~qb&%@g~z%2*WK$;rw?l^a5+E(+%_@_HM|db8A-ke?x-it7|K zefv3#dDjyOqOf5?w2Z=e{OtmAp*l+Mt6!a8(UF6%X-)ye5A z$|@@1VxuLftbNXSD=u>S3fYh0hx`Y^=KPnEB#&pfdJoA|kd}p1S_`fj*vwaJ(ahkj zSRRz7H*82L@l9W}t|w_Lx!Um7nOoTSQ5S(wjU@vw%;KKV-}#f-Bu8d0d|#jLo!Dw5 zDmnU9AaiJ{%A%xu!<^&H+1ts{t-GxV%s)Qs8R$Ge)i-%7ZOQ4a&pBD*bKdq%LkVwa zSDLsO26Y`9nUI!_A00&b4Pl(=#CBw-G84+fd`!sEeJzTkG849{4r@-R0)i3W?0efz zFT=E!B0UzSm?ta@?&sY(IkDXNm?3^l>S$gjuFy^;UFC|yfx5HJc`b_bWA4uSyzO^| zW9i{9Bxvp}x7-RKn)jKRd{!=hDV8hJ7$^D$$FNh?s&(ESav$A&dCLyCpAL!a)B#q< zo9yFnT0E4tah{~&obsfRv3F)~atZE~OxqjVpAx`bzO2x$TIQauI-Y*gw%`fFV%8 zC6)~wFGX_($PpEz!Y%-Ik$aPhN4JgCkd}$=IVcX!zCep@h4Ev1q?FbP32{ycr)}qj zTP)0Yx9_Z&*eQ2*<^X>R8|mKbCzKu6>z8Fc>{4u}t_W+NN^`Tww|$o;y!=vEreEqH z;2@z&!8U*px%^;uXJH6fBh63F(Zj-T=U)^~gWa^ZyO1gi3VS}>k+ulw#hqKCOXVw*U5IzC_b%85j1mL< z3EOc-O|6M(sxJ#PF3P)?+_N;4J;O;`ERcPdUV;DeTCbE+7%{uO`^<$)8ZGeb(L8d0 zkblF?5fB{}jtV^e#)N@gIb*=9T@v(x0>AZvi#f#RSAc&Lz4yQ?)9B$h*Dq;@*_zN~ zmaJYDKhI?jW^C^6F6wI|zJC8Fspsa$Yf!=1`dRCTDPjR$T{Fh;M(Y};}C z(Lp*K(u6taB9Ps9Phd_(8;svhCbmdplbD%iFYCj{O32V`ik1!mfvn+HuEpBW1kpA} zFGaMM*MA_>zT|@;7c60X?IuY;fFYe~O{mf2pb3o=xlnEh8hM*uL00`RXPABb^=Vw6 zIfplO?}%g`O4RMw^Z(G%^2)Qx`G%7fIBLTg)$FF7OdQ=EqBxc8v+EG9JbEDJfV(ft zq)$`d)$1!~?oUo5FYRH2&UUMIKK00ln+!^+;ql9-CX6+l+E)Ky+TuuPUmgB-hD&~K zDSek+nH=}9b%M&ufv$)4v7(Pr0V67zp-|*rym($`cCFHhR`jPy%>!iN2Vrfe8mRGU zG^P6Up92S<7Id1odf=894SfyXNMQoL-%A^I;Zn#lAoE1ryb{dN)TdJ!$904~Z(wjB zbZEFed%X3=-b`GZgwkD_Q65Ye*uxB6`63MB0(UJVJbg4$20sa%df{8%m!T(SrWF1` zMNqh=Yx<%@5k;8o9alld8wF2Dq*|S~;}#FAaL$-vDp(n&FY@l1Q8HVQO*CPcW)7}e z4!4pt%H5SSVF9!SIQqvmoL}+@OnLcM6TVdZQlWSC!|w5vxU-ruT|N1?y=$;i#riJIwu6KIpvqu`4h(kI#WfRiNKGwlz9y+%$cCQFQeh~Sn?9>2=atzB*s z!Wwkqsqg&qwPhq>6UV1T^%CM96a{V6g>9aQb5;aYVP}R8$H01V)cxXpu2&Jdg-a88 zEgZCMvLHHqHu&E86Z4Y|EKk%W_=hJoO0N)ey6(ug1cl-%hA^BK-~(BfHq^NmERM@a zviIJEx$-u28u6@tcaCS2y^sAPqd8~W#?(j0_arT>c;Jew@3>We41Yd&-!zr?L+_r4 z?uutb4Pg(A+gEG!C`Zsji#s^cxHP65xf0Fekuof&@cbUn2;~<#3_5pAoU_{P>`Ej3 zg#6>~=|x!uC4y~mCjod2?W$aPBaRpG=?7JX%^zC3E{I!M8OA-U7UPA}LGaWTJz0y9 zZ%4#Z?J85OJe`+#tQUt2V;CEsAtzphDc3XKE8cZY)uLJ5ePD0KV9QDd}<#88?~JbTJHc60~0js(+C(N;zrH242M1IM7E diff --git a/docs/static/img/slack-logo-on-white.png b/docs/static/img/slack-logo-on-white.png deleted file mode 100644 index 2a73996c6c402db042920a47e65a82be85e25e1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25811 zcmeFZbzIcV7e5N?BBcUS0uqV{NK5yM0@B^7NOw250-~f!mw>QzN=k#oqm(QqApH;6>S5A&HgbLPxB?{ntNzExI~zK%zUhk=1{UFPW%RSXOW0{rCQ zTm>bHQm;6%UIjDvxNc@yIbc)|pKF)%4H&U*t-7_yjDf1gz` znf}y)U|hWTHQX^_j>5JcLQzt1_K1%}@P=|u2>>+n>^ z83Th=?)(Q6AsU+ty3(;!*LKlXkQXwsw`G6!!v47_yN9jAc`FPN4P=v{3EWxB`qPNsBx?40bJcg67N=;%b8UYH4~K9Ty< z9Q-DF*TTicL5PFH-QAttotxd>$((~rP*9MA^C8E>hisq*o3p2#%QFu)J7@aeom}?w z#MIfu$1GwPkyv$JI9&=#qe7?=h5b>tX8=y8oO?%*cD*9~V@5i2>J#Y7S97^zs*|cVil# zsqpX_Mj};zjmZ)c%96uwpUY*~cwFubAYv+nN>vydqH zQzabF=l-Cdn(jm-+R(NhA3+tnK(J#~?i%}>hZdntvQ~>7$kj4m!P9d7bQjUE2JY)? zwMbk0nvruBpHpp1Sk1+|^|~myzb6<;A{EyUle$&UHy+p*XiWcmTDr^*CRVQIUoFia zqr7hU8d25(DlWOR7}6A;OP_+Doq~^uMb&PtD~SK@8IB9#&)OFzRum?cRig_}Q0WL$ zJh(dA35Ekhll(@!-vx~UnA+(jJW zWZ2s+V_5KC%EuFUjQS9%Z8Gn;%3X;$_SWA6J#cZ|0aYEW^4_Q*>SQqQ_$m8ON3Zk)zEhCb`CydO8G;_4^Q~qz*qmMEsX*(^D0wewVE4yrz@>IZ!X{a z!Qy#BlLfXgb6;4uT)EUKL0==Q1t2}``pPMOxtjBtN8 zol3&cdWbdr*kCoT6uZ7 zMJBTT^sdHV@)Vik{t~PTk2gMUIeKEkK&n9_t2R3sr+Ydtt6Qx6Tg3pqR0EAwlRV4H z`~KiM0xWnE<>_f2WwHL>_qtd&GJW>@9#|Eu#3Ki$<_4w&B6zaAZU2yf2^l9k5Jnv! zd!t8EWX~6q=t;^?_4%jFp?`>Y7uhsD5Ur}@lV^1(7C~>&)1e@DxvQbFByVv4QH|ta z6OAsSl|CxEDO||(cj#j%JKOdFQZ;UUIFf!hRN>Iqviwrclw)A}+Gl%`_#EC@1D{Vm z(LeY9(+*Y(^`lpiZ+AMC(6dbE;hi5H_)z^YGmHw_F1+*T|R%E`aY}6!mfb zBeMeBMNs1?$R*U9>W}&WE0o^U#VE@5P>qt=!&AG=`?6n5$TEbxH@1gYtwv1l==#dv z1%bBXbn)m3t;?gjQ10?3^_SD5`=J0&*qZ6$MwrRe9v1eoTrvy`q6YfmRufWNDok?@ zx%XS2;t*N{Hw}Do%t}x#%Ur$XTXFqzW<(tS5{(?$w-_ib$!2rw4S={uq^RWWA+R?mvK1_(C{^WAap|2tD zS*m_zB`}{zjBYo@dV9aWoaf7?9Y}EhH^tt`rP;Bb=qvt!Tzs4PBdMKe|eZ=x=Vj^c80L$UvYyOKZ46iN3u|p%d$;!9X%g@&UqAB)A$MNuAk!oMN;~`kmLiQ-jRuoJ z(PuN$Kb8PYRhwKukOCBoCTKhURjGtI%Eq4Bdz$GxFP>BT{UiF{-0`4$MQ0Xjj0$bQ4^ zze82v;~*-c^50z!VVu#_u3WR}+xvH|an#vLw3rGLwJ%K$CL{`gK^ch&#!DrTW7s5b zx!Z2_2Rz~s#?#S7D`IT%T{0E63z7K$Vucdt7WBk@*vlquxV@+fNu;P634w?Xi8S)W zWYVaXc5UN>fpsLifXV8qhIh#G$g^RJt?F~Gz=<%=Ja08`ygP?nMxv@DMnd`|`+mht zYci4a?`Q2SzqdIM#=5?IosXF@Q=AIj)8{BJPwKxl#kc-$_{d`BiOd!xB z7DD(o|5+WA9lA#sCx!8)V*dUIo~WbIh3qjw$xUL8he<+(dOE40C7#3d`()U(^;HK) z?;i)yQQmQxV3Syq>>bn6uQoR-JxkWgN~OnU)e=nOQXP8Gqx+ncPa1bD zoa-AOV)f%>i=SNSu1H_zos5AjHcOwrAbc|GIH(8h$H^%cULR~jpe6v4gS#Fx!3iQffnrO2|encMcyA)Uilzr-VduXOG z>74E$R5-l2@cjPHJlc+JDV~VB&^@t3JhlZjsW3gTg5uE?dz{t}gflx>YXK*W=uJXj zq)$DQ9}6}2Xr+QcieIbKjSMPpqO$B^eHRVKIjlH)pH64M-aB;BdnU=dADR+jtlj>1 z+4}t-jyvgQrMmh&*Ey@;iM z*qz#kAC4XwKfp|Pd2pZh?hjSCfZNWvrCa%R#)oXOx8)A`kB!BP9gp(;otzoXq&s}E zpAYTO)@@ml&(UK4>k1hM4rnb`gx4eEvL;bfT-=14R#ogW|Nhp1){J()p5b`v+;Kdq z@4Ek?gQI`Vl<#m=JnzXr)6@~pv!S>n(x)b@CT0h0 zMmlJ$yrPKJ5+kA~#pn!zy}R$EQt4lw{USee+{8vv<^z>h!(75M$|lY&lsC-KA4MXk#y&M`}3>Z7-umQC(qhCA$KOBTrJ| zBmVv$Y@G7PFuHLOMFZh)EU&bo50i|Sgkfo+KxD|JHB!A8H{ROoex~JLAth1de|924;xRiwjh)!AD=QzMy$K4(6&#SWc;yWCXQs}guUa1Aw- z!5DA1I->!xB>~k1tVZRH4d{CKB0I%KD#>qsjG1gt)eJ9NLHk`p?Pb(fMxPyGugC9j ztrOF|`|?sb@esq32EGdQdtgA#2#K@(3=^m?Hs${Qb@`p*T8h%K?hz)O{UkAlh~bAc zW_o#KMp17H;hWSOq)*MMzE}G#GwQme99DBSr16g5qV=8sIaO0A9Z8#Hhn;#CMkkD! z&Qp7*j}8)rbywf_v*fguQ{)o*iT>A$>m70JZxwtG5LpkU#URJUL;FMT_ zNXk+T$+Tj^AW0P5tm&1?Ptyr3k-WOGS}dA`5L8ldT7a zx{|RbT**Ca|b_0iO0)Nm2&Y%j)q2J|6_TX0k0bklK$ z!@54`R;Ef>ZJ9r>6znM5G#Qz2%#7-=uT^T@L^N7a_zT}%C;CSf#?H^CtOL*{==kd|tjblG=ToMF15%&+l+j>^9wBlv;?JITE0< zghm2Xmh51FUyfbbkrB&DpmKl}^=+Ez1P;)x4C&LfhhPmK>S7TyNz?UIM~;Z-xk4Nz z1MZv4b$`(0uT=Rwg0%9DQA}e6)mUZb2y>n`1#PjsqGslUSl+(d*J>79?zJ1wR)6-7 z>@I0890MK%W)pO+0ud*i*LZ6RJAbk~nE)Nczgz8AB*3Wj<8roM7#cRNrQZ%|2a0l)w?-v*-jDN35 z6v!$sqGc{g)<4s_b0h8z2wuQN07)VplKD6XDd^V?S6olHrnHe}SAP!PNOaUJe`P=|}t@cxg?ruXKF1qS1jc?XfNGCF93f2B3e zDs9`pGa7`p12&pi);$8QS6*CX(z1@Qm0!V(I3A7Ayl#SmA90sDe{QiIWEL=KlW*b< zEG--2NObamKRriw{F~`^s?EQ|&_rMWl9aU=K_pCrgH|bLV(bDyrnvzrb8{lSc?tY% zfCA$W@lXVYJ_L)ER_j`U2L!6iOc!10^pmG%8Nx9#xJ$D{djSgtz~YGxe&xOdsPL;` zHdlXW$QXZU`q+Qpw*~!s3_YM~tJ>A(dklMJ^Y7lSR915=Bd9{f^?r`=$`{Ey`YDDPsSi|%1D7l)AIwQkiL>)t8( zbPjv}(|XpB*bQIebC{o|1jtC0(lgRyaM=8)$*W~@0g#&{z_yU^ak~$^FQvMYn$I!6 zT^lE2LRn`jqSZSk?1bEi2$o&fa~8oHfQIpi9Nz>1&y5HqO40O?MRsybB){xS`v(W|jLan36 z7cKYzC`eMMlb~aPyRUTS2~z$pegMRm<(UQ(d<$ym9Z|N?*{^={oG<@Apo^XtdN?Wx z3{LFEq+R8}{)G=J#101VdFfhA1qN78M2z2(tG}2)Az*KzL7gle3uYNY=X!Aaxg!F@ z0=&V>3Av{n^l}9GKt1NdTm1s&`XwyT4LAeFl`fEXRp$w6GJgOz5{_X*1oKpd(J zmpRTU*?9zZ#8;+e6LaYE%AJhjC3$z3-{FsBz#Ao14_F#C#Bm(SVl)s@X~l4{sPUR$ z`)ht*z=<4a}T^I@aeH$HHO%v7D_8S4raKrYDO z1I_rXNQrVZVVs3STBwT#g`h!UF%lP$5`RGoC}mQCF|iS;sX(0w-xwcxi|djU`}*A| z?7MogWjIq_Dhs7VDG^!3z><$$J>T;=t6Z7Ah{pcw)=sHgEuS+9ZVckE=K7-i@) zM=#t}SPxi%o{S7zV3Xd2E}uL0Myo5|jU@pC?GEiLx!s(q@t>W>n`VN%XolR|5H|8#?90;pc4$QvAHNf~e?2;dvo5^SA9!GV(yy8Cp-ZII zTauDQRgqa%jXR6FPfwQmDmr#6pIpQue~^P}9Q1{$(0P(Kb0>YopVkfyRYW$PsQB=X zcg)7igfB#jmhE};Sgl+{-9^Fv^FGD;;R|e${&8Ie{$_`K-fy{xW|(@C{rO(Z@BIZ> zz*z;BgFl7(LM@zc-tRXFWjjBp-?$J}z`v$nKvn#5ar+ySVv++aky91C5T^6p>kJmn zxqswu5b3WGKj;2=H(hK%Un!VNU$Es|pL_-?^Zy@2z*9^~GjBtvup(}Agmipl4)Jc# zy7a>*4+MK_Ie;%N>DWvmS;}}K-jl!Q(%9(r^qg&FfU9LmBPRH8oHQfR50J&aPY1{h zNk@CUPm^BHLkYaz!p=>F^&Q?dBlPj7gFfdHuz};6s!|U^XHMyZLxPdMB7VmSCIM(* zSvexIIx@x%&FdUCc-DG_XMa84w=^duUmMW^zWA4)_1j&2kzVq~&%joB)^bWl_-N<1 z6RwDt!The>nF^qd=X)Y{o8uIA#R|@nuAg=VS*5MQ7?PPjrZcrH?q*^ zMt3Hx-i~Z`0g2^mwpUA%%xP=l3o)p@#{p?VYh{LvoZ&#?!awvTlia%giHqKfUO5)# zllpp+8MA^_V{S)fYH`z~%^>oZ-tqKfBj(d7VWR}*z@8aWIIo@myQQ~m5?0Uw7LMwI zYM${ioGzdOdmaq+_jafrXWuC74of6jMa8AH+eKa-h!^$k4Kh=*{#Q#w4(qwpPAD_o z#NJd&3|8N&#nn5z&BCfD?$;noF&qs(gv!Ce7&cYK`#6Cwm6yCr3eUareBhOvo0n9c zl2`vnd0pIWHUZa z3O;G3ZU^N=J7loht&VqE>e<;)9iJP*VUtj&WQr8CYk~ci(MKl~ z>E)BN{<7<{HjD25uB!!$Y7-lQu-6c-sIxIkowHai;R&9v(|wtE&>3h}(poK|+I7yI zg{i*bE`74!rm(-he#QE3fa%GRm8RMn#IKKepC~WaH}$|w<+zXoHK2Q=;{GAC=w@&4`M*{W_>#{dwqA2L(&ytf7HhTKcM&l!VBmI8^;2h z+n)%Z{TfmN$~AbF#+>6!JyFHU&6fbX5!)bQeYbZahW*a2F@aEiXbMU7DqJ{p`BaTR zZkh4=&(ReJakSXCEP{1>gzv4n_hM3X;oK{>&>HrQHE(EtQKTa|n!GINY^Cv}Q_Al> zGr3YTPu%;QMrsMmllkyLrgwZ&#WSy=(Eis`8p3f+3Mj3FnQB=*F71{`Vz662zsisX z7ES4@x5stlM;9%A++>nB#!D|6qHfc?ct9w(=lJ&CSQ*3-GT?pIDSg}Ih*f5R78j91 zJ5v#rFykc12k|9+VHZNEkLk0F7G z0jZb3Uv`uNqN)br687ppsp8Y{&0h}Z-V)!L^s68A{c*4fESg8sP{a0Hd!dN(ih%6t z3Y=C3Bi-rR`Y><=p|Jogxa+qqjTj-zvc`-g(gOooOoDVfiy zh2sA@x?biT$|9yG(It@N>Nk{u9~p>b51a9#O}3p(Zytylh0Y)?`5+qjt=|-SDmjb} z=h4ZWnhjRY40wp{kvQEl9i*xt=@31@zoL{YS8FL7ZPybs=Li7u-BL(mRbjGKZEUUS z{t){nH)jI(IP0sS7yrDg`%hL&*BLXp{IbH@7wP48n;}b~MtR`4nKQMCv7eMB`K@?r zO8tHOR*HQy8Ajo5^xJqg*GDIwyIZ45Ox@NZ^HvJ1;zF~2>_Wmsw{V`&opfVABg~O% zqSzm-j)?Ud3viDR+pR``iOXTzm5=mP(++OLH~B!Se9aq9RwRvu&z*Z69^aXF-#Y& z$)@jk7{O3@OMA2aW=Y^={&W$d4Ew}OjjcyT=60>MHNZckYnv>rf|WiPyy7gFXCFUP zMhx-aS8OVEF`DEAO42B|_#v;xUC>vHu2H(b1*$>JhS$|_>f^d=L#U8;MpLu&al3E$ zFG<#EbWpZXTW7Hx6We5Y_~TEbf=<%QnlDu4AjU8#Euww2Qw4XUy4It z-(0ODmmL$d3(%Z&E^iATc7Y_|`3%}vX3_UIm?c!?`*$7RQEv21;Kf6jS`FzB#j%YK zvli8e;rwEW-g_3$vYr9c72J#^{dHC!!)CPqTo?c=x3K=$LZ7K`Y({%`F(LRk)t}lx z07R5|W7ox3Rqq7CeqG~#den*>&`)2&*?~0`XY3lkvtImEwq^~ZQ412sX>Tf@GEFbX z3MkhgJ_&YaAuT3ilAeMyerJ|uJ|QIxOQiDlC*(12wCI*VeR_3$l_Q!DT0ClqbFe=c z`mCrt>XizjZj7wQPw!*FB#CSp&Bx7fv|)`)IFM~CXv3Vxs+F;~dYys+bwheZ+K(ymnXdABg%)|wL}6FUM}&AIplPYm_TWhnf4oSF}fYqvn-33d67^#5Q@n-3|XNDIh_uwFvmPUZGZcKsG zU(A~Y;+@%9TaW$%)I7k)ycaR&E(sT;R!P{pOV|*cr@;Jy9~m2Q^08lc)S>%6EDZoB zdAxHVTmt;SaSUW^w)wh^oLof|3=K7Ol0uIbv_WwSaFhMp@m0#zLC^@*go|LK7U;GM zYLau)7?VHiD;RQDMIAHZR-jMDvvuBDEaTvT8eg=;iV@d`Z6Iuf9)@i!L=nukdvZ;U zI%j#-?jG`kErT%}(VFIZmfy^Uv&vPCg7)>M5Tr`w$>yG=eH=f7y!Uu@8^7n1Zmj3) zPCk$$m(3q2ELjn?yx-wyPYPkFse)|Uv)F0a#YW~2r07>Blz)@5Jq`3XTBR0EFRwSz z(zn5FY|F?-eZkYO%RY*2><*i1DGRsP3kG^)`5%Ov(bTnR zvdE8F3lAJN*SvJiaKD@fq4Zy%{ODyCKBhJ<|LWPz<)FSPt0#gKKRPDkH|)oK@nB=r zdCBspWUsTni6}CA$m!0$+9RPoR?RzIfmQCxLCC!b1C?Qa5k2`#6x59Dpf6DZbxL06 zG+#OL%n@@flxkl8mH3_$P0BZ0Vp&EiQ}kN_irES?xiV_n>(;3-)^RQ05BpBC5% zXlsg9rjX9ZT*~zBs~Yudb&a~-DGyjLoV(BOKXk?NwG<&E@CFXonPVxiGQAp~Iyxl~ zcP;T2*H)e^94n7&wIN?dx{SYU8OX8)al{^qQ$(i^F`qCQKd)8}BtX*@0^+sIa zw$kVt7n$sss9(UWtU+=4TtLpD4o<65=#ZcqWeS<>GW8KauXPi6gPQp-#f7ZqiZUOj zm){)n!avES&8ZTrAX@y?6vNy5;q|kw744Sdg|XHenuYt;o6^!zM{@&g(Xq2XEtuCG zOcSI|G$yXYvrefK*a{cWCS-*)3t3j6n%dUf5KDCI^2k%mo)-H+0|fQWH>T(;zp$C_ zn4(2i0O0?FGEn=2)S>{;V>@Q&Cg}# z*|nq2eS_=q5iyDoSI-^mc4A*jDXDBNcdVJ5Fi&iaY9t7opSs-FDt3_9=QZi6pd8kh z<&{h9d>Y+vuUH(V0DUMptb$8f=LxSyWV+6HN(*YNExw2e&5OSS``7ZO6#) z5o25B+uc;Bsw%CfpTL2)4IAN^n3KN7n}m96b|=fELTTGdEfbw#$C|Q)3RM55J%dE< zg*~rocm9!dFw(dG!eL7a+tM|c9zygqsfHbOuO&a$$bQfKCNgjzdwRlEhLNcPy(*w7 z&^|K61|&^y*7GyJc8YGTxr9jQ{!VmU0N<+7Y-nU42Do`qgOltFZGpg4C;pkarag7&c%ae$QIM!j9Y^CfMvL% za3s8(zev~kY9Y~)?t}2JIz?X=*(wGQALfB(o?o#pJUl@?RQYo3q)BoYwt% z{0@zdgm$7jnwXQs+}`YuyKhd4Ma3I> zuA!>!rTGmTcamu-FB($K3d(UDOB}K4Qlo8>kBNqDd?r)L+TPDnFDI|cG?-I(+)H1b>8Al(0Cy(y>AnA*_ci<9{kGrVjIU0x?B(6CW#!13-zBL;P?5jtSj z3SMq9D`f2+h}3BlIygL-%jPgL6Ko84JQm7cPj3*szwcKr+Bl#-pY}upTmODDGSm=v>>Lzb3e!e)Pn^l_Wzx;ju zhMmTMig^N;@KK}DRwE9J>!)FDt=q)Zj4OvDKPdb3ln0R(R2SI_vwrwK%Wpp&{4*Rn zQ*~N5dBZC;xQR2YK@lPBpZBFl8BMZz_Z!3Wf7e4hlBWG z$C!t?Fg#xL#HU7N#ycLy1EA@t+W$^eq${j4~IcTeE1<#qQdBa|ZQeui5Mb z=1doiEF11Dxk#NjeM#v`D{lx!-kLlxnO)C{iXZj4C3V#Z(ZKtNX?5(4R^KE}j?vND z=n6_yI%wcQSgo#EvNrjnoeJ;J8O9!Ndff#9X@{d35CXa(=49`9wtqvzaQDzWS+5RQ z??k)eH6LY^2~#-TkqO7q^vnnHy3YrtJUxEJ4O{-I1_e`i+4wGw+SY4o(9r7Z9Qrhk zH%QB}jTA6 z0?RDnwOJc4D!3$8@?v>T+6h3JKOVtx^1hBe?ilj>zLUN)+P+#q0yEKEspB?^U+bj| zjB3FC;SfsPRa0Wi+psAeobZD^%+AfX#3yz9odw~aNNk!vMC%}-@AP^N&1H_*XW(C# zQQf?L_fMd82LPJY$@pciKTZBS5&9jhg`ENIc^dxZ|8(&G$OB{ZvzmeqSG;6_<0qRZ z_F}5Z0zL%?r|Htm1vSVTxB6%Pr6%hXF++W?TOw(_GPQkK!#8CqXI&Z{#~k-4+EkrJ zOZU5G1UY;$%few_#KrxpwH2ynzCD&C+V7z4tZy6Ds%$Fq4Y(QSw$2ff;@!z^;0aX( zM_o$O8!rsuIH|qAP6}rd0tm>IXpc1=MaF5*<}(5~h3pdq*Y{f{#j^!YK5PB^t5tQ3 zY!+$7aQfxe)Lmgt3k&Gl5PIzxb9ofLsv#LMgg+7(uh3^r@%2>6OnXpJ>CWnGbBMIa(EOd6 zHHQ0y$#cuuom|Oh%@{9}z>V*vo#{r)q`&#XW0V?mpxFENeU$JT%f|*ZyzrK+CkXwb z;tbT2-}CHS!su=pIVkY9%tPpTpbJaY)ZU^XINq z@Kg28b?e;?>b9lF{KY|i+8?Tj!0}f1r!|jF4l=oghEgV^2^E|Ih(AS%*GV4^i?rB* zaQ%%>8AdPJgOCT0XMbilio|dBpa{a_AC2$6mJ1ObKFb{G@8g&hi8RsNX^tdkq&YYk zEluB!ent!7#$!!EXFX?zSS3CJ=lLK5A_bB=OiLtHMRUp?h@39i?>k%GYd4du8X7-d zO0b+)7Z_i8xJmlVoB?9qL-uIkJC9(Ey>BUbE(RnUD4-6sB`DbwKr}yH?@V% z5_z1x>P-~+zwMl2rI+s;!HHg0_IwO?Nv{mH#Yb#*w7>U1T1U!Q8Rc~6EQQQ`Q0+bY zcXIt$gD}g@#|a^@Sy4smcsD8>Mg?_a&1N_$FR-UCVRr~Ja@jI?Dp##ULU1bJ0LAR=uZp!4 z?L(O3jQE+uk>l%_b7=MZuzC5r-PfkA7d1mUh29Xywm=*^Tce^$yB9M*f7&IV$HRy+6`Zk z!+)Lr;rK`^T)U{sRf*2*n#q?2EljrSvvl!UUzNQ|lN-fqNyM?N=zoyH zo1OfUGtHO5sp;s~^s}`waZv#jBG_QvCyxGId)TwM^XT$()&+N=_!|(^q{HorOpaIk zddww>epAmJk}ZXJ+J?jdj5Rl*f$wbYEQ?mI;o@ZWMp$YESRRX5u#S+Q2Ar%Idk+Z0 z!C7YDy5~Z>YvK*ub7=Q3Hw1WSP5``TCaDOK%g>4r_#c%)Q1j_~ve;PA{u?)zNDOYu zX2X_Rq-PFPxHAoIee3ome9E76%?KsWNzFb&AUyvOMgYCq%#(s)x*Q3n5KtNsm007_ zw?lJnWWeBdvgzcu$y3H>lAOME-Hpm*<|7^c@oXbXlveBR%5;9$o^RlrQm-VjpJ$ix zC%G)en4k{&8uZC>)UNQGn$!4pWPAIn_D9RNnV_g?Eapx z;~BV;a(`+tAqCbIdxSf_@*1&o6&HbsnpZQ{r(A5EHaX;ZDkn?qakPfr{jxWQBJSJK zny}qR$KrW08gc5HqaO<0ys&QQL*jF37Yt)4<6^EAl&~E6ln_l`X5rhQX?p*wvJCh0 zq4mD1V&((V9Gi?=c3xJ-yYX^Wj4ubmjuylW^^Eqgz zyg~-}dt$_3Hietv#bE0J07%$x6Z+E9A%xf#=K_LhoB*BmSzdIrwyn z$y_>|K8qs_H28PcVVqBij1%Tl4H&w22vRnFhADj@GFUJBwNZ)iRcoqy?!=hH!>Ov7X z&OwJ$O^)9YK|$GSCzTO{t5K7T(m0h#dO5v`P&`97O1y;Hu^T~UCX-L`Rsh8uXUi#< zC}&b00KEZ z{D|g{76VxXI0#$HLM~g7Hk!R&ZQoUEXjl7E2Wcg}v3V`xE1#V1>MfS~T1Y?w(q$&9 zkP7Hq?DkER3t1_#u@L7wlbVg{uMgY*iQaa)VLnqV<|ZweqJjsf!Atg-niXAf<*#Lp zb~DyzTXi!g>~Ohb)=bYcl1FOs@Sww02H%`WOSnmPy&QIYulS`)sudZ>7_*+R*A8KjI|rHIR^Go()BA)f0cL;rb+D+1b(ODx)X%k~nc)dm0zU zP)`lt`PR$3!6NJUN=+!>Cpge}4#_7#kYejCpNAg_rlV48Yv)9N96LfvZ9p4Gp}EG1 zR$QfgVAmVzW$*oX3?B>@*CSE%usZn%AHhZ=A-B&)Q^%Zm`h=L&X$v|hO8z?T2NF6`RGT5tHEJTqp@<`L$97~hd zy%5PqPy{B}C%mc6-Pk{_TBON4Mti&a#_-#Y2#raMGQmNr{Pa}F>6G)x~NB3(mWo7yt=8O@Dk<+y6&`>2iMKuejr+La?8B_9*m9=vm<(*hjLWn zCG0-fANQ}MQ~XKrfQx}l1Ya6oUq)CO1>69gn5$I?Ui|}dmAX9~c-V~K3w1kKhkS~i z=NUC7a72o?_b;@Yy8(!HAFS$=g(Tjtq4w^z`RwIdWzgi$GbZ+GG_~xdzY*Bgl^}9k zHTP}58&TH#PnDyn#YjZ`u{UQ|jBB5~qG>taTJ1~N=#o89G017}o(5;#(XBmx?**~4 zfmPZzGw+geZ~wCE%EIsnJXS%&+Ch4j=t`FZXvX~29$IMkhDcYjVPav?+IfRKtYs zwaWyCN47{@zc>VOTQIP%&K$YAQ?hrCbf=w^MQmf5wy5xCcK45Ogk&%$C*{ z>?!&K{f?L+F|Qj*IVp9ur0owgxPxki8@x0do4(lRH7fGPf;@@X?>hF+YA2?OTfEvr zXTtasQi{gvI(OMp(CzH*N|QJP52o&A>waO$m1imptoSHlLLnF%WxI>hYFe$>xI((C zo)v3|!AbTAjoZk76^!hAEme*mgTAu1?HD-y1464Vtswyj^h3!c7C9!{o`&+o zef_g2L<}OW5Nq!kxmw=MOm}Zp;yiyE;q7sOqGUq#=EBIAT)W0(|OCZDoHtU{9V^@+QLZ->GrBc@mq-F zFFV%BF&uS<68h7OrNHbwkC-u2%#IiCRxUxvh-=wX>f^ArFCg>RwMG`i7;%+2P9<*v z4Fq6+W`Ovj+0PE?Z2*C`X;Kq(8AZBVc?W}oPGB=6ix?PppPqjgKyJKG4irvJo~aD- zv7s`OJ5qFJGP7}gHYvbK6y}bWB*Oe&ikQ0&03ZI*oaY0}S1`OxVfN#H0tq~mFyMr@ zx<0hiI#ntH!Azm-`ScUrX^+y5OkD0sK-FYMFxd7qM)GnXOypADPIkN>UeLjc-K!t| z-cn$}b^uuO>QN%%t>gXEB7Vb%o$O+@K~2W7J8}9}*7%eh8mycLk+yBFOdnxMV3A~p z8C=_alY$*=#)6QgJgdI5$x8YLt&+R8+xW?7bdfiI<3~|)qFdlRRz@k5aI|U`B5det z-QoRnat#+i8Z-c}O3ed&sj%D9RwI65!rn3TB_@aU0Vea`nH89!HT0a?G7e5^?pIwN zD+MC2(;0YrN$Ivsp5Xh}vyA5!(#Eb@XK41hK^))ag!bFKE8DD6+cNBh&MWwtk75}o7ki^N2ovj;0@l4)%P-rS)X&LQF zR?dgsFA|}OQ^}tZKvp}!!(nz1VfLdpoloZYm`2r#Vfu~3j+wiO{OU={ql7*wgJSz1 z@I#!DtZBB^aGXqU{ZmWp+r?&gO6aMLC_4{91_$vQ;-uqf3x6pCrqyrS9mS$wN>1mS z$p9etV0aAIZU{5Bs$}}w+?SaLy$T=9kzo^aL<9@f?79dQ!51p~Eb3?cWG z8)3<&jXQCtw8M7`Q^k@fgOE0_KTW(o$LtC{Vkb^2JG()RXGJ?15UqhwkSTA9-^!IG zevo_DEZPQILq`~lSowKIn>;WO)U2OIaGtksJIO0C8hY9&flo7Z%A~ zBxM<>NMB0Os2 zYT2h23-_y)Gaqpfq*vT?51t8xQ}i>6ySs0CBtG(;pSn`v#?_M+8C81sT}_=@;m!l= z+9uBAEWdNt#|5pgBJyD^lGe_ZW5?sE00hTohtsh$M{Uke*AbQw1N*v6@;KL!uM9N4=xoM5@5a0EgRhJc zxoe%3UIN|8S?_dji)t5S>45w+ORTGM+g$XNarDCb;YG)sY{|Xh#MLeGC;`f1B?iJX z%*n$c9`A$*(Qt6#aGyX_SH!g=HO0qgrj+q&af*PCP3J>;k2L{w*p9!AIZ3v`*36@g zUtf-2kw_U$gc8;;gph-aAB6DdJCxZ(s@Ryku?MLl(RQfQ1CzETHPpnAF#OSmkD?Hn z%Wy+Q*l5eHu){+ z08ZX)Vqz?s?J)8ys%IHu?%w`cL6k^#j7OK+(i*A-QX|+%pE4F+GwanI^#LgibViuN z%-!xbU;YLvB3obF-0c=dBukywb!lf#cYNEBMRT8iR&b2Rh9bt% zW8>n50CE4ls`A4dJ{w7zuTlb{f#NEsrudJ;0 zzPhDVzuSTG%0@SzdDdmnpgv0Cn z4(s!H*AGBoS4nQMqOzmX!B@jLAD1UKu>!ovsw)Qab}%6zSX6-W_j4^hY8u^DT(*A+ zZd2qu22sDqI@IT~T@v54`L*qBu~C)V>(l29BLF$c15)L&rOM7l-M9?Kx{!J>I>y&H zO$u%UaRB7%hvRzQ^T|!^lRbsDw*mfu!z;M}MXUiwYMeq&^bTOBJ@jfL4nzE&S)FS+ zEtrIOyAH?s8IT}+Faw)y&fQMkHK!Mpr%D@5o|ikFd+RLml|I*aQ=61wOw_W!?_z7> z0qdC0{(16yX}<*|1I#Svb;mj3KV;zoEaGMgAT_ca>^6sE`bjB}TkwKtj~>X_yhw9r#^dlVt4o zSdft~$Y^r6B#mnWf0l{tMWANXA6)yPxedV%t}1(NA&oVuK;R5cA;hed&~da7k79xG zvfK`%sev)mmu^CoTr<{FIlLwx1d_imgE}l!CvxBHT#lWP+4?9EV#Q{!4jKW-8G+qt zcQW7C10hWel=-DBEngI-YAUcgtUT-@^X%q3l4Ss{F}G;PhBDA z%VH2*-=xSvd#;h&DD^?i!boitR$rAF3)S6|-zvxWsC``qZ#%)=zZte418hfyIIuG9 zwX)t{e2*m#I0X`}-)E-wa}j@Ce2t&&KZ(V&(8b)yxCV3)Ais>t>n&(Rf7 zhUQi$g%P7oQ{v&u*KG1TGq^z<0s#-5J$Q#|*ws2Sr`wr2G%ZP^&h9$X`lTN0c#HT$1D+i{*WW6e=!_6#xyqL z&|PMWJKnBfKQND@^v?mHB@#Xm*;<$c1;QG#{T}S*ZG{?3Raq-3d(Ew@W_?vAu*v#VRyWb_@@$~XTU!kg@ya)jJ7EeY##gH1+FJu4CQFnHss-*npRSuBh2b#d`LU> zRoF)OEj;@XuZ@1g6d#=FZM4^3X{V$heeKOCY-QqWDf&J~Ri4Rzp1F|+kU6Md{iev% zeZ)~u^!*=xRb=j%lzmeLv(b2hcmHYglG92Dscv+Ri5B<-VzAsfwI6uF>OAZ7d^=(u zeTmC|YG|R^)JDJf9IB$=W%80uzJDZ&A4bSum&FYuoFF|9-Q|ARs;9^5i$B@A_>?*? zT2e!9Qst8B*ZUOhL$8OT@#?u9M;x^QW1_8kjr+c>W2exf&C3$oA6=~P1II6A;LJM3 zjNbYflyp#{uLo3h=sW5|TYUu)Nz+8sUh@F!bjiN4oP3i=CtqweN>R*VDD+C6rcW^V`SPH0XL!|Fd z-J7NU@$*t8x%HWRLZ`0VOBZi6vf-V|QiL56CWmA3#c4 z{e8x?bqYBK?%KGQp%9KjN?rKUa^Ubr z>7|4p>8NswJkB*Rr%I``h8!Z2aaBYEPOCK7OlegqEKRa8JrjLR!f*b$Rd#k*NeR<@ zLg~x-6?tEB+wC{KoRqIb&_v~>4M3V@1%Vw2@>bzFb7J5}X5hH)>Jn~P?Wy!I#oJG| zx&o@%de#tw!=&7~)vj2m^Vh|ge;*T9$V08Yi_H{C=af&F^j3e0X|#XkVG`BJOx{MBmM$fen*-W6g0-@X|(iAj$Nu^Xj39d)o7xX8l?r z)A{=8G@GE}4&431*;(_VYeA!u;|0ZO0c6FEsBjOtFsw%^+Oc6H*nt;v40Ye75qm%* zsr8WDNtOdo6Kze?D6jI|p1!?H3Q(u^2lR8L&wH?4tm)Zrf)<2HwP zsy(tA3UpLUeeUEDni!n&INU36G>X}_{1L+Id|T8`TfW+1Z)&=mU^PNk1xdl zjdMnD@{Mb^e&#jf>nIJT47etH?bq++?e%45*W^S^T9Nknn27ZIjbST3H|iA=4focbUDBwwt)BE#X^!Jam=jrBE*H5pmuhq&ukn1Gku$wt}A#kvZR~5-C z29AK%Iij`5>46z~fJv+2)!9Q@1=o~MKIw`Md%C({!?&dl5)K0v?T)cmejZ`2BqRHlw&8WuEojKWPAukvEt{_~ zEwj%=Qco*6Vaa5#cDd=<@Tt8Q$eDMe1hnRgN*)!&xZF`jKlFgNJ#MvGm zV8()XK3T6e#sqlp12Nh^Jf;stK{!7BM9n9c30)9$*muZEkfWIoY3LC z=v2-9uAYdtt5yO~=kZn%$5i*=1O&NUaC76Cax&{MKIsTF+5#ijn??bl#3 z+t}Ek#*W6d*R9XOIvO|+^*$t&l7~pX4%V`-Ur)8*oVXhzpz>DqAwVKY>`@g|=iUaw z1nH!DlO*k{7v1u8_K5^vE^T;U8h*ge1k0sP@nX$JjJQaY0CM-#Kv?=NoiE#|zSRc} zd@b8>KuKai=QUvfCa~azPo6G7|8mQyG0Si911&&|ghMUzVPPEIb#nxCf-rz@=znK% zg9+yLjc0HqM1XzD5oA=3F)M>Z0af#6^iOQ&t$@Rc>Is57N2OlX|71Z=6NoCn6-1P) zKZ8TtN!o6hC+n%gz!vaxz~M}PYS(5%Jl zr(|!9!hUCx^yI?KI0O~6frxT~FB9$cfpzmGlm}BnLV_ibl*RYCj;PW5MmZsbj*br2 zTi-j+=v|xjfnJ_!D7j%pD!XNKR#YdFP2w2*H@-e4=l8a7N4D1o2mUxsg8xW7`U?&?HkbxpNTPYSg<mK;$>BN(@Ci&p6dRP)TkuShcF$k20RY z7zo!H)POT)A;=l~bJE3-;+-kH{*V@G|B?|uZ{;N?(a7%-A!H$e2kldgStIqC$~8SO zW>S&iDf{-xy=Evs6?fHJ+3}($l&oAPh;QfFu)Jc=;ATv+a1@;zh!%aig*NhUA%emX7WLA4&6uNrez z;%r4D*NNe>^KYCU@o-&d_InK~gQib*C~=7M~=U1X2kXG7G)@uu#GDiCTu?Me$>Z2=C?)n4V^ zR>olez)K_Dd#8|jgBzvqUfvfV~k~V!v zC}v|7BSDcg3{lzlL_>Uv96K|W#*OxR&HwQEE(SR<$u5RYJ4y-Jbe3c)f1kpFEGABA z&KNWCPq{Mh7ByiHv$2+upmUR^xu8a}96QriXS?yq&{@P&=&WI(i~KWX-=PL?#^XQm zKGf$ddwP2aHzLQ+HJHD&+1Ua{UOL!cp zb6L+d#(8ajDE)QR5|g`>Sj?a1`Ps^>#_Z3uK0h@+?f8kl!k_sn{~CIshAoXNY9Cr{ z<$rpAV>5pRo#W9g4|4l#Pkofdyg9wc5bnHQLPCP}DryO7Z|Ne+ocW*hzFah>8g8{wMyg%>gIiNq~J zY2b8`$xpV*MF}p&yOo8IM~Uu%MdWK^Y@m zxKHHxb%l^Go@OOZoA^zmE7V@pG9+hOT*LkscanS8KSi==tl)(SdWyrNrOdB{b`U+~d>ebIOfQ$4$zw z)ZMgfj*BYC)jb#;Y+c$C^J&p2;pWAEh?DiXWlDscbn8qNTyVf-N^2*iWqxVayxzcK zdy7!_UJi%4f9)OngY5E*4fV%ljNw?NB-gp$^TOca&w*tf7pU z)P?kKQCh=I)h8wb)FNZEIoKS$=}Y|PjH7s&T*9cw#5=`xwQ>6p@_t>`yhQlAq3VTk z&Qo+P{+p#YLvWX*!fTv-xqT>k@D0(El(tXgM1>#G25CWG$Si5#n4dj4`Y|~+(FH%@ zBPASS&3XT?Yb!*o%|2WU{lrBbL)A)@K`vT4sqR&r_i}E4=TXleeLP|L);6E3;n7!V*-G_;T*n!ACz-X-)C}F>M5E`1C%WjsMX_ Q{izOvV`#l%UB?^$2eLeXjsO4v diff --git a/docs/static/img/slack-logo.svg b/docs/static/img/slack-logo.svg deleted file mode 100644 index fb55f7245..000000000 --- a/docs/static/img/slack-logo.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/tutorial/README.md b/tutorial/README.md index 0fe94c109..0d4cc2e4b 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -54,7 +54,6 @@ Open up your new project folder "PythOnBoardingBot" in your text editor. ## Coming up next - Add tests to your app. - Add starring a message as an onboarding task. -- Run this app on [Glitch](https://glitch.com/). - Creating a Slack "MessageBuilder" object. This would aid in the creation of complex messages. - Running this app from the command line with [`$ click_`](https://click.palletsprojects.com/en/7.x/). - How to run this app on multiple teams. From c80484946b555a9770c796bc001a9b24b1f29b80 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 15:04:35 +0000 Subject: [PATCH 21/72] chore(deps): bump actions/checkout from 4.2.2 to 5.0.0 (#1734) --- .github/workflows/ci-build.yml | 2 +- .github/workflows/mypy.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 944567ab5..4197d85af 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -29,7 +29,7 @@ jobs: CI_LARGE_SOCKET_MODE_PAYLOAD_TESTING_DISABLED: "1" FORCE_COLOR: "1" steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml index ac68eb459..8fd531b08 100644 --- a/.github/workflows/mypy.yml +++ b/.github/workflows/mypy.yml @@ -16,7 +16,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} From d4fc14296843fc80824d79e1752ebe9d0a377d94 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 15:13:10 +0000 Subject: [PATCH 22/72] chore(deps): bump codecov/codecov-action from 5.4.3 to 5.5.0 (#1733) --- .github/workflows/ci-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 4197d85af..e1c511036 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -63,7 +63,7 @@ jobs: verbose: true - name: Upload test coverage to Codecov (only with latest supported version) if: startsWith(matrix.python-version, '3.13') - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + uses: codecov/codecov-action@fdcc8476540edceab3de004e990f80d881c6cc00 # v5.5.0 with: token: ${{ secrets.CODECOV_TOKEN }} # Run validation generates the coverage file From 64e1f30ee581ae022129614f95cf8f32b5a33ec1 Mon Sep 17 00:00:00 2001 From: ewanek1 Date: Tue, 9 Sep 2025 12:54:50 -0700 Subject: [PATCH 23/72] chore: remove 3.6 references (#1735) * Remove Python 3.6 refs. * Fix Black version for Python 3.7. * Fix greenlet removal. * Fix greenlet removal. * Address comments and simplify black versioning. * Specifying version 3.7.17. --- README.md | 2 +- docs/english/installation.md | 2 +- docs/english/legacy/index.md | 2 +- docs/english/tutorial/uploading-files.md | 2 +- docs/english/v3-migration.md | 2 +- pyproject.toml | 3 +-- requirements/testing.txt | 5 ++--- slack/web/async_internal_utils.py | 2 +- slack_sdk/web/internal_utils.py | 4 ++-- tutorial/README.md | 6 +++--- 10 files changed, 14 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index c1dabbab9..7defbbccb 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Are you looking for [slackclient](https://pypi.org/project/slackclient/)? The sl --- -This library requires Python 3.6 and above. If you require Python 2, please use our [SlackClient - v1.x][slackclientv1]. If you're unsure how to check what version of Python you're on, you can check it using the following: +This library requires Python 3.7 and above. If you're unsure how to check what version of Python you're on, you can check it using the following: > **Note:** You may need to use `python3` before your commands to ensure you use the correct Python path. e.g. `python3 --version` diff --git a/docs/english/installation.md b/docs/english/installation.md index 9c8bfec23..bf818fe22 100644 --- a/docs/english/installation.md +++ b/docs/english/installation.md @@ -1,6 +1,6 @@ # Installation -This package supports Python 3.6 and higher. We recommend using [PyPI](https://pypi.python.org/pypi) for installation. Run the following command: +This package supports Python 3.7 and higher. We recommend using [PyPI](https://pypi.python.org/pypi) for installation. Run the following command: ```bash pip install slack-sdk diff --git a/docs/english/legacy/index.md b/docs/english/legacy/index.md index eec165816..e2ca20613 100644 --- a/docs/english/legacy/index.md +++ b/docs/english/legacy/index.md @@ -10,7 +10,7 @@ Refer to the [migration guide](/tools/python-slack-sdk/v3-migration) to learn ho Slack APIs allow anyone to build full featured integrations that extend and expand the capabilities of your Slack workspace. These APIs allow you to build applications that interact with Slack just like the people on your team. They can post messages, respond to events that happen, and build complex UIs for getting work done. -To make it easier for Python programmers to build Slack applications, we've provided this open source SDK that will help you get started building Python apps as quickly as possible. The current version is built for Python 3.6 and higher — if you need to target Python 2.x, you might consider using v1 of the SDK. +To make it easier for Python programmers to build Slack applications, we've provided this open source SDK that will help you get started building Python apps as quickly as possible. The current version is built for Python 3.7 and higher. ## Slack platform basics {#platform-basics} diff --git a/docs/english/tutorial/uploading-files.md b/docs/english/tutorial/uploading-files.md index 70cc6e1c1..a9a624758 100644 --- a/docs/english/tutorial/uploading-files.md +++ b/docs/english/tutorial/uploading-files.md @@ -56,7 +56,7 @@ With this, all your Slack app configuration is done. Let's start coding. ### Creating a new project {#create-new-project} -First, ensure you're using Python version 3.6 or above. While the current standard is for the `python3` and `pip3` commands to use Python 3.6 or above, it's best to ensure your runtime is always using the latest version of Python. [pyenv](https://github.com/pyenv/pyenv) is a handy tool that can do this for you. +First, ensure you're using Python version 3.7 or above. While the current standard is for the `python3` and `pip3` commands to use Python 3.7 or above, it's best to ensure your runtime is always using the latest version of Python. [pyenv](https://github.com/pyenv/pyenv) is a handy tool that can do this for you. We'll create a brand new virtual environment and install the required library dependencies using the following commands. diff --git a/docs/english/v3-migration.md b/docs/english/v3-migration.md index 67199c2be..d599ac28a 100644 --- a/docs/english/v3-migration.md +++ b/docs/english/v3-migration.md @@ -69,7 +69,7 @@ If you don't wish to upgrade yet, be sure to pin your module for the Python `sla ### Minimum Python versions {#minimum-versions} -`slackclient` v2.x requires Python 3.6 (or higher). Support for Python 2.7 is maintained in the existing `slackclient` v1.x. +`slackclient` v2.x requires Python 3.7 (or higher). Client v1 support: - Python 2: Python 2.7 was supported in the 1.x version of the client up until Dec 31st, 2019. diff --git a/pyproject.toml b/pyproject.toml index 9eb6201b7..cb2e28d11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ name = "slack_sdk" dynamic = ["version", "readme", "authors", "optional-dependencies"] description = "The Slack API Platform SDK for Python" license = { text = "MIT" } -requires-python = ">=3.6" +requires-python = ">=3.7" keywords = [ "slack", "slack-api", @@ -27,7 +27,6 @@ classifiers = [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", diff --git a/requirements/testing.txt b/requirements/testing.txt index 984af2f4a..4ee8403c1 100644 --- a/requirements/testing.txt +++ b/requirements/testing.txt @@ -4,12 +4,11 @@ pytest>=7.0.1,<9 pytest-asyncio<2 # for async pytest-cov>=2,<7 # while flake8 5.x have issues with Python 3.12, flake8 6.x requires Python >= 3.8.1, -# so 5.x should be kept in order to stay compatible with Python 3.6/3.7 +# so 5.x should be kept in order to stay compatible with Python 3.7/3.8 flake8>=5.0.4,<8 # Don't change this version without running CI builds; # The latest version may not be available for older Python runtime -black>=22.8.0; python_version=="3.6" -black==22.10.0; python_version>"3.6" +black==22.10.0; click==8.0.4 # black is affected by https://github.com/pallets/click/issues/2225 psutil>=6.0.0,<8 # used only under slack_sdk/*_store diff --git a/slack/web/async_internal_utils.py b/slack/web/async_internal_utils.py index 10c6c2fdf..1148dc9e7 100644 --- a/slack/web/async_internal_utils.py +++ b/slack/web/async_internal_utils.py @@ -56,7 +56,7 @@ def _get_headers( e.g. { 'Content-Type': 'application/json;charset=utf-8', 'Authorization': 'Bearer xoxb-1234-1243', - 'User-Agent': 'Python/3.6.8 slack/2.1.0 Darwin/17.7.0' + 'User-Agent': 'Python/3.7.17 slack/2.1.0 Darwin/17.7.0' } """ final_headers = { diff --git a/slack_sdk/web/internal_utils.py b/slack_sdk/web/internal_utils.py index 41a870c5c..a76980f4a 100644 --- a/slack_sdk/web/internal_utils.py +++ b/slack_sdk/web/internal_utils.py @@ -44,7 +44,7 @@ def get_user_agent(prefix: Optional[str] = None, suffix: Optional[str] = None): Returns: The user agent string. - e.g. 'Python/3.6.7 slackclient/2.0.0 Darwin/17.7.0' + e.g. 'Python/3.7.17 slackclient/2.0.0 Darwin/17.7.0' """ # __name__ returns all classes, we only want the client client = "{0}/{1}".format("slackclient", version.__version__) @@ -91,7 +91,7 @@ def _get_headers( e.g. { 'Content-Type': 'application/json;charset=utf-8', 'Authorization': 'Bearer xoxb-1234-1243', - 'User-Agent': 'Python/3.6.8 slack/2.1.0 Darwin/17.7.0' + 'User-Agent': 'Python/3.7.17 slack/2.1.0 Darwin/17.7.0' } """ final_headers = { diff --git a/tutorial/README.md b/tutorial/README.md index 0d4cc2e4b..12d99c89c 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -21,14 +21,14 @@ As you complete each task you'll see the message update with a green checkmark. 1. A Slack team. Before anything else you'll need a Slack team. You can [Sign into an existing Slack workspace](https://get.slack.help/hc/en-us/articles/212681477-Sign-in-to-Slack) or you can [create a new Slack workspace](https://get.slack.help/hc/en-us/articles/206845317-Create-a-Slack-workspace) to test your app first. -2. A terminal with Python 3.6+ installed. +2. A terminal with Python 3.7+ installed. Check your installation by running the following command in your terminal: ``` $ python3 --version --> Python 3.6.7 +-> Python 3.7.17 ``` -You'll need to install Python 3.6 if you receive the following error: +You'll need to install Python 3.7 if you receive the following error: ``` -> bash: python3: command not found ``` From 28f55cce3ad3c80e7c704d3ce214e48640cbd081 Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Tue, 9 Sep 2025 17:42:02 -0400 Subject: [PATCH 24/72] chore: clean up project based on 3.6 removal (#1736) * chore: clean up following 3.6 removal * Update generate_api_docs.sh --- .github/dependabot.yml | 12 ------------ scripts/build_pypi_package.sh | 2 +- scripts/deploy_to_prod_pypi_org.sh | 2 +- scripts/deploy_to_test_pypi_org.sh | 2 +- scripts/generate_api_docs.sh | 11 ++++++++--- scripts/run_integration_tests.sh | 4 ++-- scripts/run_mypy.sh | 4 ++-- scripts/run_unit_tests.sh | 4 ++-- scripts/run_validation.sh | 5 ++--- slack_sdk/oauth/installation_store/internals.py | 15 ++++----------- slack_sdk/scim/v1/internal_utils.py | 6 +----- .../oauth/installation_store/test_internals.py | 2 +- 12 files changed, 25 insertions(+), 44 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 34b2ad725..dc523d227 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -12,15 +12,3 @@ updates: directory: "/" schedule: interval: "monthly" - - package-ecosystem: "npm" - directory: "/docs" - schedule: - interval: "monthly" - groups: - docusaurus: - patterns: - - "@docusaurus/*" - react: - patterns: - - "react" - - "react-dom" diff --git a/scripts/build_pypi_package.sh b/scripts/build_pypi_package.sh index e4acb96bb..76b3e8e41 100755 --- a/scripts/build_pypi_package.sh +++ b/scripts/build_pypi_package.sh @@ -5,7 +5,7 @@ cd ${script_dir}/.. rm -rf ./slack_sdk.egg-info pip install -U pip && \ - pip install twine build && \ + pip install -U twine build && \ rm -rf dist/ build/ slack_sdk.egg-info/ && \ python -m build --sdist --wheel && \ twine check dist/* diff --git a/scripts/deploy_to_prod_pypi_org.sh b/scripts/deploy_to_prod_pypi_org.sh index 01863545c..b96cdef62 100755 --- a/scripts/deploy_to_prod_pypi_org.sh +++ b/scripts/deploy_to_prod_pypi_org.sh @@ -5,7 +5,7 @@ cd ${script_dir}/.. rm -rf ./slack_sdk.egg-info pip install -U pip && \ - pip install twine build && \ + pip install -U twine build && \ rm -rf dist/ build/ slack_sdk.egg-info/ && \ python -m build --sdist --wheel && \ twine check dist/* && \ diff --git a/scripts/deploy_to_test_pypi_org.sh b/scripts/deploy_to_test_pypi_org.sh index 01f6a9818..54ed0e04b 100755 --- a/scripts/deploy_to_test_pypi_org.sh +++ b/scripts/deploy_to_test_pypi_org.sh @@ -5,7 +5,7 @@ cd ${script_dir}/.. rm -rf ./slack_sdk.egg-info pip install -U pip && \ - pip install twine build && \ + pip install -U twine build && \ rm -rf dist/ build/ slack_sdk.egg-info/ && \ python -m build --sdist --wheel && \ twine check dist/* && \ diff --git a/scripts/generate_api_docs.sh b/scripts/generate_api_docs.sh index 52c86c1e5..8f1281141 100755 --- a/scripts/generate_api_docs.sh +++ b/scripts/generate_api_docs.sh @@ -6,6 +6,11 @@ cd ${script_dir}/.. pip install -U -r requirements/documentation.txt pip install -U -r requirements/optional.txt -rm -rf docs/static/api-docs -pdoc slack_sdk --html -o docs/static/api-docs -open docs/static/api-docs/slack_sdk/index.html + +rm -rf docs/reference + +pdoc slack_sdk --html -o docs/reference +cp -R docs/reference/slack_sdk/* docs/reference/ +rm -rf docs/reference/slack_sdk + +open docs/reference/index.html diff --git a/scripts/run_integration_tests.sh b/scripts/run_integration_tests.sh index 8bf922c7b..a5d86801b 100755 --- a/scripts/run_integration_tests.sh +++ b/scripts/run_integration_tests.sh @@ -9,8 +9,8 @@ script_dir=`dirname $0` cd ${script_dir}/.. pip install -U pip -pip install -r requirements/testing.txt \ - -r requirements/optional.txt +pip install -U -r requirements/testing.txt \ + -U -r requirements/optional.txt echo "Generating code ..." && python scripts/codegen.py --path . echo "Running black (code formatter) ..." && black slack_sdk/ diff --git a/scripts/run_mypy.sh b/scripts/run_mypy.sh index e7ffb7970..0d27346bc 100755 --- a/scripts/run_mypy.sh +++ b/scripts/run_mypy.sh @@ -7,7 +7,7 @@ script_dir=$(dirname $0) cd ${script_dir}/.. pip install -U pip setuptools wheel -pip install -r requirements/testing.txt \ - -r requirements/optional.txt +pip install -U -r requirements/testing.txt \ + -U -r requirements/optional.txt mypy --config-file pyproject.toml diff --git a/scripts/run_unit_tests.sh b/scripts/run_unit_tests.sh index e827dc32a..cec153388 100755 --- a/scripts/run_unit_tests.sh +++ b/scripts/run_unit_tests.sh @@ -9,8 +9,8 @@ script_dir=`dirname $0` cd ${script_dir}/.. pip install -U pip -pip install -r requirements/testing.txt \ - -r requirements/optional.txt +pip install -U -r requirements/testing.txt \ + -U -r requirements/optional.txt echo "Generating code ..." && python scripts/codegen.py --path . echo "Running black (code formatter) ..." && black slack_sdk/ diff --git a/scripts/run_validation.sh b/scripts/run_validation.sh index cbbec0355..8a61d03a6 100755 --- a/scripts/run_validation.sh +++ b/scripts/run_validation.sh @@ -7,9 +7,8 @@ set -e script_dir=`dirname $0` cd ${script_dir}/.. -pip install -U pip setuptools wheel -pip install -r requirements/testing.txt \ - -r requirements/optional.txt +pip install -U -r requirements/testing.txt \ + -U -r requirements/optional.txt echo "Generating code ..." && python scripts/codegen.py --path . echo "Running black (code formatter) ..." && black slack_sdk/ diff --git a/slack_sdk/oauth/installation_store/internals.py b/slack_sdk/oauth/installation_store/internals.py index 1c3bfccaf..52eeeb98b 100644 --- a/slack_sdk/oauth/installation_store/internals.py +++ b/slack_sdk/oauth/installation_store/internals.py @@ -1,18 +1,11 @@ -import sys -from datetime import datetime, timezone +from datetime import datetime from typing import Type, TypeVar, Union def _from_iso_format_to_datetime(iso_datetime_str: str) -> datetime: - if sys.version_info[:2] == (3, 6): - format = "%Y-%m-%d %H:%M:%S" - if "." in iso_datetime_str: - format += ".%f" - return datetime.strptime(iso_datetime_str, format).replace(tzinfo=timezone.utc) - else: - if "+" not in iso_datetime_str: - iso_datetime_str += "+00:00" - return datetime.fromisoformat(iso_datetime_str) + if "+" not in iso_datetime_str: + iso_datetime_str += "+00:00" + return datetime.fromisoformat(iso_datetime_str) def _from_iso_format_to_unix_timestamp(iso_datetime_str: str) -> float: diff --git a/slack_sdk/scim/v1/internal_utils.py b/slack_sdk/scim/v1/internal_utils.py index a07a5b383..cbb90dd72 100644 --- a/slack_sdk/scim/v1/internal_utils.py +++ b/slack_sdk/scim/v1/internal_utils.py @@ -1,7 +1,6 @@ import copy import logging import re -import sys from typing import Dict, Callable from typing import Union, Optional, Any from urllib.parse import quote @@ -43,10 +42,7 @@ def _to_dict_without_not_given(obj: Any) -> dict: def _create_copy(original: Any) -> Any: - if sys.version_info.major == 3 and sys.version_info.minor <= 6: - return copy.copy(original) - else: - return copy.deepcopy(original) + return copy.deepcopy(original) def _to_camel_case_key(key: str) -> str: diff --git a/tests/slack_sdk/oauth/installation_store/test_internals.py b/tests/slack_sdk/oauth/installation_store/test_internals.py index 8c73b4c65..74cb935fc 100644 --- a/tests/slack_sdk/oauth/installation_store/test_internals.py +++ b/tests/slack_sdk/oauth/installation_store/test_internals.py @@ -39,7 +39,7 @@ def test_timestamp_to_type(ts, target_type, expected_result): def test_timestamp_to_type_invalid_str(): - match = "Invalid isoformat string" if sys.version_info[:2] > (3, 6) else "time data .* does not match format" + match = "Invalid isoformat string" with pytest.raises(ValueError, match=match): _timestamp_to_type("not-a-timestamp", int) From 76a754173207599547363c17f283aae6781a3394 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Sep 2025 21:49:48 +0000 Subject: [PATCH 25/72] chore(deps): bump actions/setup-python from 5.6.0 to 6.0.0 (#1737) --- .github/workflows/ci-build.yml | 2 +- .github/workflows/mypy.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index e1c511036..7fbbb3e56 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -33,7 +33,7 @@ jobs: with: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: ${{ matrix.python-version }} cache: pip diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml index 8fd531b08..fa5087fd1 100644 --- a/.github/workflows/mypy.yml +++ b/.github/workflows/mypy.yml @@ -20,7 +20,7 @@ jobs: with: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: ${{ matrix.python-version }} - name: Run mypy verification From 33065e7a6b6c18936ba262421999955dd2c8ffad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Sep 2025 21:58:24 +0000 Subject: [PATCH 26/72] chore(deps): bump actions/stale from 9.1.0 to 10.0.0 (#1738) --- .github/workflows/triage-issues.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/triage-issues.yml b/.github/workflows/triage-issues.yml index b37c13422..5cb75bf93 100644 --- a/.github/workflows/triage-issues.yml +++ b/.github/workflows/triage-issues.yml @@ -16,7 +16,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0 + - uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0 with: days-before-issue-stale: 30 days-before-issue-close: 10 From 435bf6dee2022253a66621719bec56d6f911b29b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Sep 2025 22:06:56 +0000 Subject: [PATCH 27/72] chore(deps): bump codecov/codecov-action from 5.5.0 to 5.5.1 (#1739) --- .github/workflows/ci-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 7fbbb3e56..841cb37ed 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -63,7 +63,7 @@ jobs: verbose: true - name: Upload test coverage to Codecov (only with latest supported version) if: startsWith(matrix.python-version, '3.13') - uses: codecov/codecov-action@fdcc8476540edceab3de004e990f80d881c6cc00 # v5.5.0 + uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: token: ${{ secrets.CODECOV_TOKEN }} # Run validation generates the coverage file From eb1c7afa5a4df99b1df762bd658bdcc5a8019918 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 14:03:53 +0000 Subject: [PATCH 28/72] chore(deps): update pytest-cov requirement from <7,>=2 to >=2,<8 (#1741) --- requirements/testing.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/testing.txt b/requirements/testing.txt index 4ee8403c1..5ba5e632b 100644 --- a/requirements/testing.txt +++ b/requirements/testing.txt @@ -2,7 +2,7 @@ aiohttp<4 # used for a WebSocket server mock pytest>=7.0.1,<9 pytest-asyncio<2 # for async -pytest-cov>=2,<7 +pytest-cov>=2,<8 # while flake8 5.x have issues with Python 3.12, flake8 6.x requires Python >= 3.8.1, # so 5.x should be kept in order to stay compatible with Python 3.7/3.8 flake8>=5.0.4,<8 From ed1893d99d56644d6c971bb75e68f3c974a6bb24 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 11:05:28 -0400 Subject: [PATCH 29/72] chore(deps): update mypy requirement from <=1.15.0 to <=1.17.1 (#1740) * chore(deps): update mypy requirement from <=1.15.0 to <=1.17.1 Updates the requirements on [mypy](https://github.com/python/mypy) to permit the latest version. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v0.1.0...v1.17.1) --- updated-dependencies: - dependency-name: mypy dependency-version: 1.17.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] * improve typing * Update basic_components.py --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: William Bergamin Co-authored-by: William Bergamin --- requirements/testing.txt | 2 +- slack_sdk/models/blocks/basic_components.py | 6 +++--- slack_sdk/models/dialogs/__init__.py | 2 +- .../async_cacheable_installation_store.py | 8 ++++---- .../installation_store/cacheable_installation_store.py | 8 ++++---- slack_sdk/socket_mode/builtin/internals.py | 4 ++-- slack_sdk/socket_mode/client.py | 2 +- slack_sdk/socket_mode/websocket_client/__init__.py | 4 ++-- slack_sdk/web/internal_utils.py | 10 +++++----- slack_sdk/webhook/client.py | 8 ++++---- 10 files changed, 27 insertions(+), 27 deletions(-) diff --git a/requirements/testing.txt b/requirements/testing.txt index 5ba5e632b..6b4b500a8 100644 --- a/requirements/testing.txt +++ b/requirements/testing.txt @@ -15,7 +15,7 @@ psutil>=6.0.0,<8 boto3<=2 # For AWS tests moto>=4.0.13,<6 -mypy<=1.15.0 +mypy<=1.17.1 # For AsyncSQLAlchemy tests greenlet<=4 aiosqlite<=1 \ No newline at end of file diff --git a/slack_sdk/models/blocks/basic_components.py b/slack_sdk/models/blocks/basic_components.py index dcbcf0625..d6a1aed97 100644 --- a/slack_sdk/models/blocks/basic_components.py +++ b/slack_sdk/models/blocks/basic_components.py @@ -166,7 +166,7 @@ class Option(JsonObject): different required formats in different situations """ - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() logger = logging.getLogger(__name__) label_max_length = 75 @@ -313,7 +313,7 @@ class OptionGroup(JsonObject): different required formats in different situations """ - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() label_max_length = 75 options_max_length = 100 logger = logging.getLogger(__name__) @@ -395,7 +395,7 @@ def to_dict(self, option_type: str = "block") -> Dict[str, Any]: class ConfirmObject(JsonObject): - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() title_max_length = 100 text_max_length = 300 diff --git a/slack_sdk/models/dialogs/__init__.py b/slack_sdk/models/dialogs/__init__.py index 51df93060..82a40269e 100644 --- a/slack_sdk/models/dialogs/__init__.py +++ b/slack_sdk/models/dialogs/__init__.py @@ -421,7 +421,7 @@ def __init__( class DialogBuilder(JsonObject): - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementation + attributes: Set[str] = set() _callback_id: Optional[str] _elements: List[Union[DialogTextComponent, AbstractDialogSelector]] diff --git a/slack_sdk/oauth/installation_store/async_cacheable_installation_store.py b/slack_sdk/oauth/installation_store/async_cacheable_installation_store.py index 6c2cccdfe..935d24fe4 100644 --- a/slack_sdk/oauth/installation_store/async_cacheable_installation_store.py +++ b/slack_sdk/oauth/installation_store/async_cacheable_installation_store.py @@ -26,7 +26,7 @@ def __init__(self, installation_store: AsyncInstallationStore): def logger(self) -> Logger: return self.underlying.logger - async def async_save(self, installation: Installation): # type: ignore[explicit-override] + async def async_save(self, installation: Installation): # Invalidate cache data for update operations key = f"{installation.enterprise_id or ''}-{installation.team_id or ''}" if key in self.cached_bots: @@ -36,14 +36,14 @@ async def async_save(self, installation: Installation): # type: ignore[explicit self.cached_installations.pop(key) return await self.underlying.async_save(installation) - async def async_save_bot(self, bot: Bot): # type: ignore[explicit-override] + async def async_save_bot(self, bot: Bot): # Invalidate cache data for update operations key = f"{bot.enterprise_id or ''}-{bot.team_id or ''}" if key in self.cached_bots: self.cached_bots.pop(key) return await self.underlying.async_save_bot(bot) - async def async_find_bot( # type: ignore[explicit-override] + async def async_find_bot( self, *, enterprise_id: Optional[str], @@ -64,7 +64,7 @@ async def async_find_bot( # type: ignore[explicit-override] self.cached_bots[key] = bot return bot - async def async_find_installation( # type: ignore[explicit-override] + async def async_find_installation( self, *, enterprise_id: Optional[str], diff --git a/slack_sdk/oauth/installation_store/cacheable_installation_store.py b/slack_sdk/oauth/installation_store/cacheable_installation_store.py index 506aa2d0b..2455779dd 100644 --- a/slack_sdk/oauth/installation_store/cacheable_installation_store.py +++ b/slack_sdk/oauth/installation_store/cacheable_installation_store.py @@ -24,7 +24,7 @@ def __init__(self, installation_store: InstallationStore): def logger(self) -> Logger: return self.underlying.logger - def save(self, installation: Installation): # type: ignore[explicit-override] + def save(self, installation: Installation): # Invalidate cache data for update operations key = f"{installation.enterprise_id or ''}-{installation.team_id or ''}" if key in self.cached_bots: @@ -35,14 +35,14 @@ def save(self, installation: Installation): # type: ignore[explicit-override] return self.underlying.save(installation) - def save_bot(self, bot: Bot): # type: ignore[explicit-override] + def save_bot(self, bot: Bot): # Invalidate cache data for update operations key = f"{bot.enterprise_id or ''}-{bot.team_id or ''}" if key in self.cached_bots: self.cached_bots.pop(key) return self.underlying.save_bot(bot) - def find_bot( # type: ignore[explicit-override] + def find_bot( self, *, enterprise_id: Optional[str], @@ -63,7 +63,7 @@ def find_bot( # type: ignore[explicit-override] self.cached_bots[key] = bot return bot - def find_installation( # type: ignore[explicit-override] + def find_installation( self, *, enterprise_id: Optional[str], diff --git a/slack_sdk/socket_mode/builtin/internals.py b/slack_sdk/socket_mode/builtin/internals.py index c4c84e500..7b8365615 100644 --- a/slack_sdk/socket_mode/builtin/internals.py +++ b/slack_sdk/socket_mode/builtin/internals.py @@ -88,7 +88,7 @@ def _establish_new_socket_connection( if status != 200: raise Exception(f"Failed to connect to the proxy (proxy: {proxy}, connect status code: {status})") - sock = ssl_context.wrap_socket( # type: ignore[union-attr] + sock = ssl_context.wrap_socket( sock, do_handshake_on_connect=True, suppress_ragged_eofs=True, @@ -103,7 +103,7 @@ def _establish_new_socket_connection( return sock sock = socket.create_connection((server_hostname, server_port), receive_timeout) - sock = ssl_context.wrap_socket( # type: ignore[union-attr] + sock = ssl_context.wrap_socket( sock, do_handshake_on_connect=True, suppress_ragged_eofs=True, diff --git a/slack_sdk/socket_mode/client.py b/slack_sdk/socket_mode/client.py index ab1147baa..0fa0f9a25 100644 --- a/slack_sdk/socket_mode/client.py +++ b/slack_sdk/socket_mode/client.py @@ -131,7 +131,7 @@ def run_message_listeners(self, message: dict, raw_message: str) -> None: for listener in self.message_listeners: try: - listener(self, message, raw_message) # type: ignore[call-arg, arg-type] + listener(self, message, raw_message) # type: ignore[call-arg, arg-type, misc] except Exception as e: self.logger.exception(f"Failed to run a message listener: {e}") diff --git a/slack_sdk/socket_mode/websocket_client/__init__.py b/slack_sdk/socket_mode/websocket_client/__init__.py index f004a94b1..250e00727 100644 --- a/slack_sdk/socket_mode/websocket_client/__init__.py +++ b/slack_sdk/socket_mode/websocket_client/__init__.py @@ -58,7 +58,7 @@ class SocketModeClient(BaseSocketModeClient): auto_reconnect_enabled: bool default_auto_reconnect_enabled: bool - close: bool # type: ignore[assignment] + closed: bool connect_operation_lock: Lock on_open_listeners: List[Callable[[WebSocketApp], None]] @@ -225,7 +225,7 @@ def send_message(self, message: str) -> None: ) raise e - def close(self) -> None: # type: ignore[explicit-override, no-redef] + def close(self) -> None: self.closed = True self.auto_reconnect_enabled = False self.disconnect() diff --git a/slack_sdk/web/internal_utils.py b/slack_sdk/web/internal_utils.py index a76980f4a..1fd5f22fc 100644 --- a/slack_sdk/web/internal_utils.py +++ b/slack_sdk/web/internal_utils.py @@ -394,19 +394,19 @@ def _upload_file_via_v2_url( else: resp = urlopen(req, context=ssl, timeout=timeout) - charset = resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] + charset = resp.headers.get_content_charset() or "utf-8" # read the response body here - body: str = resp.read().decode(charset) # type: ignore[union-attr] + body: str = resp.read().decode(charset) if logger.level <= logging.DEBUG: message = ( "Received the following response - " - f"status: {resp.status}, " # type: ignore[union-attr] - f"headers: {dict(resp.headers)}, " # type: ignore[union-attr] + f"status: {resp.status}, " + f"headers: {dict(resp.headers)}, " f"body: {body}" ) logger.debug(message) - return {"status": resp.status, "headers": resp.headers, "body": body} # type: ignore[union-attr] + return {"status": resp.status, "headers": resp.headers, "body": body} def _validate_for_legacy_client( diff --git a/slack_sdk/webhook/client.py b/slack_sdk/webhook/client.py index 7a1d64856..35059a554 100644 --- a/slack_sdk/webhook/client.py +++ b/slack_sdk/webhook/client.py @@ -267,13 +267,13 @@ def _perform_http_request_internal(self, url: str, req: Request): http_resp = opener.open(req, timeout=self.timeout) else: http_resp = urlopen(req, context=self.ssl, timeout=self.timeout) - charset: str = http_resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] - response_body: str = http_resp.read().decode(charset) # type: ignore[union-attr] + charset: str = http_resp.headers.get_content_charset() or "utf-8" + response_body: str = http_resp.read().decode(charset) resp = WebhookResponse( url=url, - status_code=http_resp.status, # type: ignore[union-attr] + status_code=http_resp.status, body=response_body, - headers=http_resp.headers, # type: ignore[arg-type, union-attr] + headers=http_resp.headers, # type: ignore[arg-type] ) _debug_log_response(self.logger, resp) return resp From cbbeb2b117b3b195192b82d7c2331a05817625bf Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Mon, 22 Sep 2025 20:35:18 -0700 Subject: [PATCH 30/72] feat(models): add markdown block (#1748) --- slack_sdk/models/blocks/__init__.py | 2 ++ slack_sdk/models/blocks/blocks.py | 43 ++++++++++++++++++++++++++- tests/slack_sdk/models/test_blocks.py | 36 +++++++++++++++++++++- 3 files changed, 79 insertions(+), 2 deletions(-) diff --git a/slack_sdk/models/blocks/__init__.py b/slack_sdk/models/blocks/__init__.py index 96ecfb9e8..455d28d5c 100644 --- a/slack_sdk/models/blocks/__init__.py +++ b/slack_sdk/models/blocks/__init__.py @@ -58,6 +58,7 @@ from .blocks import HeaderBlock from .blocks import ImageBlock from .blocks import InputBlock +from .blocks import MarkdownBlock from .blocks import SectionBlock from .blocks import VideoBlock from .blocks import RichTextBlock @@ -115,6 +116,7 @@ "HeaderBlock", "ImageBlock", "InputBlock", + "MarkdownBlock", "SectionBlock", "VideoBlock", "RichTextBlock", diff --git a/slack_sdk/models/blocks/blocks.py b/slack_sdk/models/blocks/blocks.py index 3b39af577..82a154056 100644 --- a/slack_sdk/models/blocks/blocks.py +++ b/slack_sdk/models/blocks/blocks.py @@ -1,7 +1,7 @@ import copy import logging import warnings -from typing import Dict, Sequence, Optional, Set, Union, Any, List +from typing import Any, Dict, List, Optional, Sequence, Set, Union from slack_sdk.models import show_unknown_key_warning from slack_sdk.models.basic_objects import ( @@ -87,6 +87,8 @@ def parse(cls, block: Union[dict, "Block"]) -> Optional["Block"]: return CallBlock(**block) elif type == HeaderBlock.type: return HeaderBlock(**block) + elif type == MarkdownBlock.type: + return MarkdownBlock(**block) elif type == VideoBlock.type: return VideoBlock(**block) elif type == RichTextBlock.type: @@ -523,6 +525,45 @@ def _validate_alt_text_length(self): return self.text is None or len(self.text.text) <= self.text_max_length +class MarkdownBlock(Block): + type = "markdown" + text_max_length = 12000 + + @property + def attributes(self) -> Set[str]: # type: ignore[override] + return super().attributes.union({"text"}) + + def __init__( + self, + *, + text: str, + block_id: Optional[str] = None, + **others: dict, + ): + """Displays formatted markdown. + https://docs.slack.dev/reference/block-kit/blocks/markdown-block/ + + Args: + block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. + Maximum length for this field is 255 characters. + block_id should be unique for each message and each iteration of a message. + If a message is updated, use a new block_id. + text (required): The standard markdown-formatted text. Limit 12,000 characters max. + """ + super().__init__(type=self.type, block_id=block_id) + show_unknown_key_warning(self, others) + + self.text = text + + @JsonValidator("text attribute must be specified") + def _validate_text(self): + return self.text != "" + + @JsonValidator(f"text attribute cannot exceed {text_max_length} characters") + def _validate_alt_text_length(self): + return len(self.text) <= self.text_max_length + + class VideoBlock(Block): type = "video" title_max_length = 200 diff --git a/tests/slack_sdk/models/test_blocks.py b/tests/slack_sdk/models/test_blocks.py index ade4bfe8f..f7d8c129b 100644 --- a/tests/slack_sdk/models/test_blocks.py +++ b/tests/slack_sdk/models/test_blocks.py @@ -20,6 +20,7 @@ PlainTextObject, MarkdownTextObject, HeaderBlock, + MarkdownBlock, VideoBlock, Option, RichTextBlock, @@ -30,8 +31,8 @@ RichTextElementParts, ) from slack_sdk.models.blocks.basic_components import SlackFile -from . import STRING_3001_CHARS +from . import STRING_3001_CHARS # https://api.slack.com/reference/block-kit/blocks @@ -804,6 +805,39 @@ def test_text_length_151(self): HeaderBlock(**input).validate_json() +# ---------------------------------------------- +# MarkdownBlock +# ---------------------------------------------- + + +class MarkdownBlockTests(unittest.TestCase): + def test_document(self): + input = { + "type": "markdown", + "block_id": "introduction", + "text": "**Welcome!**", + } + self.assertDictEqual(input, MarkdownBlock(**input).to_dict()) + self.assertDictEqual(input, Block.parse(input).to_dict()) + + def test_text_length_12000(self): + input = { + "type": "markdown", + "block_id": "numbers", + "text": "1234567890" * 1200, + } + MarkdownBlock(**input).validate_json() + + def test_text_length_12001(self): + input = { + "type": "markdown", + "block_id": "numbers", + "text": "1234567890" * 1200 + "1", + } + with self.assertRaises(SlackObjectFormationError): + MarkdownBlock(**input).validate_json() + + # ---------------------------------------------- # Video # ---------------------------------------------- From a12ed710ce02a3ba64722ae5746db1ead9eccc2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Oct 2025 18:54:53 +0000 Subject: [PATCH 31/72] chore(deps): update mypy requirement from <=1.17.1 to <=1.18.2 (#1758) --- requirements/testing.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/testing.txt b/requirements/testing.txt index 6b4b500a8..3c9e941e5 100644 --- a/requirements/testing.txt +++ b/requirements/testing.txt @@ -15,7 +15,7 @@ psutil>=6.0.0,<8 boto3<=2 # For AWS tests moto>=4.0.13,<6 -mypy<=1.17.1 +mypy<=1.18.2 # For AsyncSQLAlchemy tests greenlet<=4 aiosqlite<=1 \ No newline at end of file From 83661b7743edf319d9d3194cc4f0a78046514051 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Oct 2025 19:04:08 +0000 Subject: [PATCH 32/72] chore(deps): bump docutils from 0.22 to 0.22.2 (#1757) --- requirements/documentation.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/documentation.txt b/requirements/documentation.txt index 3d2fbc81d..af8c47639 100644 --- a/requirements/documentation.txt +++ b/requirements/documentation.txt @@ -1,2 +1,2 @@ -docutils==0.22 +docutils==0.22.2 pdoc3==0.11.6 From 82aad20201e1d78b7fae680779c793e61941be0e Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Fri, 3 Oct 2025 10:21:24 -0700 Subject: [PATCH 33/72] docs: replace links from api.slack.com to docs.slack.dev redirects (#1763) --- .github/ISSUE_TEMPLATE/03_document.md | 2 +- README.md | 20 +- docs/reference/audit_logs/async_client.html | 4 +- docs/reference/audit_logs/index.html | 6 +- .../reference/audit_logs/v1/async_client.html | 6 +- docs/reference/audit_logs/v1/client.html | 6 +- docs/reference/audit_logs/v1/index.html | 2 +- docs/reference/index.html | 1812 +++++++++-------- docs/reference/models/attachments/index.html | 76 +- .../models/blocks/basic_components.html | 56 +- .../models/blocks/block_elements.html | 200 +- docs/reference/models/blocks/blocks.html | 188 +- docs/reference/models/blocks/index.html | 428 ++-- docs/reference/models/dialoags.html | 78 +- docs/reference/models/dialogs/index.html | 78 +- docs/reference/models/messages/index.html | 24 +- docs/reference/models/messages/message.html | 4 +- docs/reference/models/metadata/index.html | 4 +- docs/reference/models/views/index.html | 4 +- docs/reference/oauth/index.html | 2 +- .../async_cacheable_installation_store.html | 8 +- .../cacheable_installation_store.html | 8 +- .../installation_store.html | 2 +- docs/reference/oauth/state_store/index.html | 2 +- docs/reference/scim/async_client.html | 4 +- docs/reference/scim/index.html | 6 +- docs/reference/scim/v1/async_client.html | 4 +- docs/reference/scim/v1/client.html | 6 +- docs/reference/scim/v1/index.html | 2 +- docs/reference/signature/index.html | 4 +- docs/reference/socket_mode/aiohttp/index.html | 4 +- .../reference/socket_mode/builtin/client.html | 4 +- docs/reference/socket_mode/client.html | 4 +- docs/reference/socket_mode/index.html | 2 +- .../socket_mode/websocket_client/index.html | 10 +- .../socket_mode/websockets/index.html | 4 +- docs/reference/web/async_client.html | 1796 ++++++++-------- docs/reference/web/base_client.html | 6 +- docs/reference/web/client.html | 1796 ++++++++-------- docs/reference/web/deprecation.html | 6 +- docs/reference/web/index.html | 1796 ++++++++-------- docs/reference/web/internal_utils.html | 4 +- docs/reference/web/legacy_base_client.html | 6 +- docs/reference/web/legacy_client.html | 1796 ++++++++-------- docs/reference/webhook/async_client.html | 4 +- docs/reference/webhook/client.html | 12 +- docs/reference/webhook/index.html | 12 +- .../web/test_conversations_connect.py | 2 +- pyproject.toml | 2 +- slack/deprecation.py | 2 +- slack/signature/verifier.py | 2 +- slack/web/base_client.py | 2 +- slack/web/deprecation.py | 4 +- slack_sdk/__init__.py | 2 +- slack_sdk/audit_logs/__init__.py | 2 +- slack_sdk/audit_logs/v1/__init__.py | 2 +- slack_sdk/audit_logs/v1/async_client.py | 4 +- slack_sdk/audit_logs/v1/client.py | 4 +- slack_sdk/models/attachments/__init__.py | 24 +- slack_sdk/models/blocks/__init__.py | 4 +- slack_sdk/models/blocks/basic_components.py | 22 +- slack_sdk/models/blocks/block_elements.py | 56 +- slack_sdk/models/blocks/blocks.py | 24 +- slack_sdk/models/dialogs/__init__.py | 34 +- slack_sdk/models/messages/__init__.py | 12 +- slack_sdk/models/messages/message.py | 2 +- slack_sdk/models/metadata/__init__.py | 2 +- slack_sdk/models/views/__init__.py | 2 +- slack_sdk/oauth/__init__.py | 2 +- .../installation_store/installation_store.py | 2 +- slack_sdk/oauth/state_store/__init__.py | 2 +- slack_sdk/scim/__init__.py | 2 +- slack_sdk/scim/v1/__init__.py | 2 +- slack_sdk/scim/v1/async_client.py | 2 +- slack_sdk/scim/v1/client.py | 4 +- slack_sdk/signature/__init__.py | 2 +- slack_sdk/socket_mode/__init__.py | 2 +- slack_sdk/socket_mode/aiohttp/__init__.py | 4 +- slack_sdk/socket_mode/builtin/client.py | 4 +- .../socket_mode/websocket_client/__init__.py | 4 +- slack_sdk/socket_mode/websockets/__init__.py | 4 +- slack_sdk/web/async_client.py | 536 ++--- slack_sdk/web/base_client.py | 2 +- slack_sdk/web/client.py | 536 ++--- slack_sdk/web/deprecation.py | 8 +- slack_sdk/web/internal_utils.py | 6 +- slack_sdk/web/legacy_base_client.py | 2 +- slack_sdk/web/legacy_client.py | 536 ++--- slack_sdk/webhook/async_client.py | 2 +- slack_sdk/webhook/client.py | 2 +- tests/signature/test_signature_verifier.py | 2 +- tests/slack_sdk/models/test_blocks.py | 2 +- tests/slack_sdk/models/test_elements.py | 4 +- .../signature/test_signature_verifier.py | 2 +- tests/web/classes/test_blocks.py | 2 +- tests/web/classes/test_elements.py | 4 +- tutorial/01-creating-the-slack-app.md | 6 +- tutorial/02-building-a-message.md | 2 +- tutorial/03-responding-to-slack-events.md | 4 +- tutorial/PythOnBoardingBot/app.py | 2 +- 100 files changed, 6715 insertions(+), 5499 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/03_document.md b/.github/ISSUE_TEMPLATE/03_document.md index 5245ab289..822bc2ee4 100644 --- a/.github/ISSUE_TEMPLATE/03_document.md +++ b/.github/ISSUE_TEMPLATE/03_document.md @@ -10,7 +10,7 @@ assignees: "" ### The page URLs -- https://slack.dev/python-slack-sdk/ +- https://docs.slack.dev/tools/python-slack-sdk/ ### Requirements diff --git a/README.md b/README.md index 7defbbccb..ec57ebfdc 100644 --- a/README.md +++ b/README.md @@ -27,13 +27,13 @@ Whether you're building a custom app for your team, or integrating a third party The **Python Slack SDK** allows interaction with: - `slack_sdk.web`: for calling the [Web API methods][api-methods] -- `slack_sdk.webhook`: for utilizing the [Incoming Webhooks](https://api.slack.com/messaging/webhooks) and [`response_url`s in payloads](https://api.slack.com/interactivity/handling#message_responses) -- `slack_sdk.signature`: for [verifying incoming requests from the Slack API server](https://api.slack.com/authentication/verifying-requests-from-slack) -- `slack_sdk.socket_mode`: for receiving and sending messages over [Socket Mode](https://api.slack.com/socket-mode) connections -- `slack_sdk.audit_logs`: for utilizing [Audit Logs APIs](https://api.slack.com/admins/audit-logs) -- `slack_sdk.scim`: for utilizing [SCIM APIs](https://api.slack.com/admins/scim) -- `slack_sdk.oauth`: for implementing the [Slack OAuth flow](https://api.slack.com/authentication/oauth-v2) -- `slack_sdk.models`: for constructing [Block Kit](https://api.slack.com/block-kit) UI components using easy-to-use builders +- `slack_sdk.webhook`: for utilizing the [Incoming Webhooks](https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/) and [`response_url`s in payloads](https://docs.slack.dev/interactivity/handling-user-interaction/#message_responses) +- `slack_sdk.signature`: for [verifying incoming requests from the Slack API server](https://docs.slack.dev/authentication/verifying-requests-from-slack/) +- `slack_sdk.socket_mode`: for receiving and sending messages over [Socket Mode](https://docs.slack.dev/apis/events-api/using-socket-mode/) connections +- `slack_sdk.audit_logs`: for utilizing [Audit Logs APIs](https://docs.slack.dev/admins/audit-logs-api/) +- `slack_sdk.scim`: for utilizing [SCIM APIs](https://docs.slack.dev/admins/scim-api/) +- `slack_sdk.oauth`: for implementing the [Slack OAuth flow](https://docs.slack.dev/authentication/installing-with-oauth/) +- `slack_sdk.models`: for constructing [Block Kit](https://docs.slack.dev/block-kit/) UI components using easy-to-use builders - `slack_sdk.rtm`: for utilizing the [RTM API][rtm-docs] If you want to use our [Events API][events-docs] and Interactivity features, please check the [Bolt for Python][bolt-python] library. Details on the Tokens and Authentication can be found in our [Auth Guide](https://docs.slack.dev/tools/python-slack-sdk/installation/). @@ -293,9 +293,9 @@ helpful and collaborative way. [slackclientv1]: https://github.com/slackapi/python-slackclient/tree/v1 -[api-methods]: https://api.slack.com/methods -[rtm-docs]: https://api.slack.com/rtm -[events-docs]: https://api.slack.com/events-api +[api-methods]: https://docs.slack.dev/reference/methods +[rtm-docs]: https://docs.slack.dev/legacy/legacy-rtm-api/ +[events-docs]: https://docs.slack.dev/apis/events-api/ [bolt-python]: https://github.com/slackapi/bolt-python [pypi]: https://pypi.org/ [gh-issues]: https://github.com/slackapi/python-slack-sdk/issues diff --git a/docs/reference/audit_logs/async_client.html b/docs/reference/audit_logs/async_client.html index 7f8d7ff0d..600bb9c35 100644 --- a/docs/reference/audit_logs/async_client.html +++ b/docs/reference/audit_logs/async_client.html @@ -87,7 +87,7 @@

    Classes

    retry_handlers: Optional[List[AsyncRetryHandler]] = None, ): """API client for Audit Logs API - See https://api.slack.com/admins/audit-logs for more details + See https://docs.slack.dev/admins/audit-logs-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -389,7 +389,7 @@

    Classes

    return resp

    API client for Audit Logs API -See https://api.slack.com/admins/audit-logs for more details

    +See https://docs.slack.dev/admins/audit-logs-api/ for more details

    Args

    token
    diff --git a/docs/reference/audit_logs/index.html b/docs/reference/audit_logs/index.html index 55812fc19..940d34e1c 100644 --- a/docs/reference/audit_logs/index.html +++ b/docs/reference/audit_logs/index.html @@ -37,7 +37,7 @@

    Module slack_sdk.audit_logs

    Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization.

    -

    Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details.

    +

    Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details.

    Sub-modules

    @@ -94,7 +94,7 @@

    Classes

    retry_handlers: Optional[List[RetryHandler]] = None, ): """API client for Audit Logs API - See https://api.slack.com/admins/audit-logs for more details + See https://docs.slack.dev/admins/audit-logs-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -402,7 +402,7 @@

    Classes

    return resp

    API client for Audit Logs API -See https://api.slack.com/admins/audit-logs for more details

    +See https://docs.slack.dev/admins/audit-logs-api/ for more details

    Args

    token
    diff --git a/docs/reference/audit_logs/v1/async_client.html b/docs/reference/audit_logs/v1/async_client.html index 866b6309b..e3f01fafc 100644 --- a/docs/reference/audit_logs/v1/async_client.html +++ b/docs/reference/audit_logs/v1/async_client.html @@ -37,7 +37,7 @@

    Module slack_sdk.audit_logs.v1.async_client

    Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization.

    -

    Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details.

    +

    Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details.

    @@ -89,7 +89,7 @@

    Classes

    retry_handlers: Optional[List[AsyncRetryHandler]] = None, ): """API client for Audit Logs API - See https://api.slack.com/admins/audit-logs for more details + See https://docs.slack.dev/admins/audit-logs-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -391,7 +391,7 @@

    Classes

    return resp

    API client for Audit Logs API -See https://api.slack.com/admins/audit-logs for more details

    +See https://docs.slack.dev/admins/audit-logs-api/ for more details

    Args

    token
    diff --git a/docs/reference/audit_logs/v1/client.html b/docs/reference/audit_logs/v1/client.html index fd84b75bb..fb3939178 100644 --- a/docs/reference/audit_logs/v1/client.html +++ b/docs/reference/audit_logs/v1/client.html @@ -37,7 +37,7 @@

    Module slack_sdk.audit_logs.v1.client

    Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization.

    -

    Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details.

    +

    Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details.

    @@ -83,7 +83,7 @@

    Classes

    retry_handlers: Optional[List[RetryHandler]] = None, ): """API client for Audit Logs API - See https://api.slack.com/admins/audit-logs for more details + See https://docs.slack.dev/admins/audit-logs-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -391,7 +391,7 @@

    Classes

    return resp

    API client for Audit Logs API -See https://api.slack.com/admins/audit-logs for more details

    +See https://docs.slack.dev/admins/audit-logs-api/ for more details

    Args

    token
    diff --git a/docs/reference/audit_logs/v1/index.html b/docs/reference/audit_logs/v1/index.html index 2f809b98e..7c3def12a 100644 --- a/docs/reference/audit_logs/v1/index.html +++ b/docs/reference/audit_logs/v1/index.html @@ -37,7 +37,7 @@

    Module slack_sdk.audit_logs.v1

    Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization.

    -

    Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details.

    +

    Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details.

    Sub-modules

    diff --git a/docs/reference/index.html b/docs/reference/index.html index 8b9b9e3f5..6671d4f16 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -5,7 +5,7 @@ slack_sdk API documentation - @@ -38,7 +38,7 @@

    Package slack_sdk

    Here is the list of key modules in this SDK:

    @@ -163,7 +163,7 @@

    Classes

    class WebClient(BaseClient):
         """A WebClient allows apps to communicate with the Slack Platform's Web API.
     
    -    https://api.slack.com/methods
    +    https://docs.slack.dev/reference/methods
     
         The Slack Web API is an interface for querying information from
         and enacting change in a Slack workspace.
    @@ -234,7 +234,7 @@ 

    Classes

    **kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -256,7 +256,7 @@

    Classes

    Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -283,7 +283,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -304,7 +304,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -324,7 +324,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -344,7 +344,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -368,7 +368,7 @@

    Classes

    Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -395,7 +395,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -417,7 +417,7 @@

    Classes

    ) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -448,7 +448,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -476,7 +476,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -493,7 +493,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -515,7 +515,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -535,7 +535,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -554,7 +554,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -573,7 +573,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -589,7 +589,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -608,7 +608,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -627,7 +627,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -647,7 +647,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -662,7 +662,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -683,7 +683,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -703,7 +703,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -723,7 +723,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs) @@ -736,7 +736,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -753,7 +753,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs) @@ -765,7 +765,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs) @@ -778,7 +778,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs) @@ -796,7 +796,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -827,7 +827,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -839,7 +839,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -852,7 +852,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -868,7 +868,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -881,7 +881,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -901,7 +901,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -929,7 +929,7 @@

    Classes

    """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -956,7 +956,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -979,7 +979,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -1002,7 +1002,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -1027,7 +1027,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -1051,7 +1051,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -1069,7 +1069,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -1081,7 +1081,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -1094,7 +1094,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -1106,7 +1106,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -1131,7 +1131,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -1149,7 +1149,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1162,7 +1162,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1175,7 +1175,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1187,7 +1187,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1200,7 +1200,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1215,7 +1215,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1238,7 +1238,7 @@

    Classes

    ) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1256,7 +1256,7 @@

    Classes

    ) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1280,7 +1280,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1305,7 +1305,7 @@

    Classes

    ) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1327,7 +1327,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1349,7 +1349,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1369,7 +1369,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1391,7 +1391,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1406,7 +1406,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1426,7 +1426,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1443,7 +1443,7 @@

    Classes

    ) -> SlackResponse: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1461,7 +1461,7 @@

    Classes

    ) -> SlackResponse: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1483,7 +1483,7 @@

    Classes

    ) -> SlackResponse: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1500,7 +1500,7 @@

    Classes

    ) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1518,7 +1518,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1532,7 +1532,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1552,7 +1552,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1571,7 +1571,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1592,7 +1592,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1613,7 +1613,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1633,7 +1633,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs) @@ -1647,7 +1647,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1659,7 +1659,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs) @@ -1672,7 +1672,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1685,7 +1685,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1698,7 +1698,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1711,7 +1711,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1725,7 +1725,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1743,7 +1743,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1761,7 +1761,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1780,7 +1780,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1800,7 +1800,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1832,7 +1832,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1856,7 +1856,7 @@

    Classes

    def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -1864,7 +1864,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1885,7 +1885,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs) @@ -1898,7 +1898,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs) @@ -1912,7 +1912,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs) @@ -1925,7 +1925,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs) @@ -1938,7 +1938,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs) @@ -1959,7 +1959,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1989,7 +1989,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -2010,7 +2010,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -2030,7 +2030,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -2049,7 +2049,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -2064,7 +2064,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs) @@ -2077,7 +2077,7 @@

    Classes

    ) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -2092,7 +2092,7 @@

    Classes

    ) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs) @@ -2105,7 +2105,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) @@ -2117,7 +2117,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2132,7 +2132,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs) @@ -2144,7 +2144,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs) @@ -2157,7 +2157,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2174,7 +2174,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2190,7 +2190,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2204,7 +2204,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return self.api_call("assistant.threads.setStatus", params=kwargs) @@ -2218,7 +2218,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2233,7 +2233,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2247,7 +2247,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2257,7 +2257,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs) @@ -2269,7 +2269,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs) @@ -2287,7 +2287,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2313,7 +2313,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2333,7 +2333,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2346,7 +2346,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2359,7 +2359,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2378,7 +2378,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2405,7 +2405,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2417,7 +2417,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2430,7 +2430,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2444,7 +2444,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2460,7 +2460,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2480,7 +2480,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs) @@ -2493,7 +2493,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs) @@ -2505,7 +2505,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs) @@ -2520,7 +2520,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2545,7 +2545,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2568,7 +2568,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs) @@ -2576,7 +2576,7 @@

    Classes

    # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def channels_archive( @@ -2755,7 +2755,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs) @@ -2769,7 +2769,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2788,7 +2788,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2801,7 +2801,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs) @@ -2821,10 +2821,11 @@

    Classes

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2840,11 +2841,12 @@

    Classes

    "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2868,10 +2870,11 @@

    Classes

    username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2892,11 +2895,12 @@

    Classes

    "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2905,7 +2909,7 @@

    Classes

    *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2916,10 +2920,11 @@

    Classes

    unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2936,11 +2941,12 @@

    Classes

    "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) @@ -2959,7 +2965,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2993,10 +2999,11 @@

    Classes

    parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -3010,6 +3017,7 @@

    Classes

    "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -3018,7 +3026,7 @@

    Classes

    kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) @@ -3034,7 +3042,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -3060,7 +3068,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -3084,7 +3092,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -3096,7 +3104,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs) @@ -3108,7 +3116,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs) @@ -3122,7 +3130,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs) @@ -3135,7 +3143,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -3144,7 +3152,7 @@

    Classes

    self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3168,7 +3176,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3192,7 +3200,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3212,7 +3220,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3235,7 +3243,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3257,7 +3265,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs) @@ -3270,7 +3278,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs) @@ -3282,7 +3290,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs) @@ -3298,7 +3306,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3324,7 +3332,7 @@

    Classes

    ) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3337,7 +3345,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs) @@ -3351,7 +3359,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3365,7 +3373,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3384,7 +3392,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs) @@ -3403,7 +3411,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3429,7 +3437,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3450,7 +3458,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3468,7 +3476,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3495,7 +3503,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs) @@ -3508,7 +3516,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs) @@ -3520,7 +3528,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs) @@ -3533,7 +3541,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs) @@ -3546,7 +3554,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3558,7 +3566,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs) @@ -3567,7 +3575,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs) @@ -3579,7 +3587,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3591,7 +3599,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3603,7 +3611,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3618,7 +3626,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) @@ -3631,7 +3639,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs) @@ -3643,7 +3651,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs) @@ -3659,7 +3667,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3687,7 +3695,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3715,7 +3723,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3731,7 +3739,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3756,7 +3764,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3795,7 +3803,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3830,7 +3838,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3844,7 +3852,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3862,7 +3870,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs) @@ -3874,7 +3882,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs) @@ -3893,7 +3901,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3946,12 +3954,12 @@

    Classes

    ) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -4037,7 +4045,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -4060,7 +4068,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -4083,7 +4091,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs) @@ -4096,7 +4104,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs) @@ -4104,7 +4112,7 @@

    Classes

    # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def groups_archive( @@ -4285,7 +4293,7 @@

    Classes

    # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def im_close( @@ -4361,7 +4369,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4373,7 +4381,7 @@

    Classes

    # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def mpim_close( @@ -4460,7 +4468,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4486,7 +4494,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4506,7 +4514,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs) @@ -4522,7 +4530,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4543,7 +4551,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs) @@ -4555,7 +4563,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs) @@ -4567,7 +4575,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4580,7 +4588,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs) @@ -4594,7 +4602,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs) @@ -4610,7 +4618,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4636,7 +4644,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4662,7 +4670,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4686,7 +4694,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4707,7 +4715,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs) @@ -4720,7 +4728,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs) @@ -4733,7 +4741,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4745,7 +4753,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4758,7 +4766,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4776,7 +4784,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4804,7 +4812,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4832,7 +4840,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4861,7 +4869,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4887,7 +4895,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -4910,7 +4918,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -4933,7 +4941,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -4957,7 +4965,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -4979,7 +4987,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) @@ -4989,7 +4997,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs) @@ -5000,7 +5008,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -5022,7 +5030,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -5053,7 +5061,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs) @@ -5071,7 +5079,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -5093,7 +5101,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -5103,7 +5111,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs) @@ -5119,7 +5127,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -5145,7 +5153,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs) @@ -5159,7 +5167,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs) @@ -5174,7 +5182,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5199,7 +5207,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5226,7 +5234,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5247,7 +5255,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5274,7 +5282,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5296,7 +5304,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5307,7 +5315,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5317,7 +5325,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5329,7 +5337,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5344,7 +5352,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5363,7 +5371,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5378,7 +5386,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5390,7 +5398,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs) @@ -5401,7 +5409,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5414,7 +5422,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5429,7 +5437,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5452,8 +5460,8 @@

    Classes

    **kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5476,9 +5484,9 @@

    Classes

    Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5501,9 +5509,9 @@

    Classes

    """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5530,8 +5538,8 @@

    Classes

    ) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5542,6 +5550,72 @@

    Classes

    # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -5550,7 +5624,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5567,7 +5641,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5588,7 +5662,7 @@

    Classes

    **kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -5600,7 +5674,7 @@

    Classes

    return self.api_call("workflows.updateStep", json=kwargs)

    A WebClient allows apps to communicate with the Slack Platform's Web API.

    -

    https://api.slack.com/methods

    +

    https://docs.slack.dev/reference/methods

    The Slack Web API is an interface for querying information from and enacting change in a Slack workspace.

    This client handles constructing and sending HTTP requests to Slack @@ -5680,7 +5754,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -5690,7 +5764,7 @@

    Methods

    return self.api_call("admin.analytics.getFile", params=kwargs)

    Retrieve analytics data for a given date, presented as a compressed JSON file -https://api.slack.com/methods/admin.analytics.getFile

    +https://docs.slack.dev/reference/methods/admin.analytics.getFile

    def admin_apps_activities_list(self,
    *,
    app_id: str | None = None,
    component_id: str | None = None,
    component_type: str | None = None,
    log_event_type: str | None = None,
    max_date_created: int | None = None,
    min_date_created: int | None = None,
    min_log_level: str | None = None,
    sort_direction: str | None = None,
    source: str | None = None,
    team_id: str | None = None,
    trace_id: str | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -5719,7 +5793,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -5741,7 +5815,7 @@

    Methods

    return self.api_call("admin.apps.activities.list", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.apps.activities.list

    def admin_apps_approve(self,
    *,
    app_id: str | None = None,
    request_id: str | None = None,
    enterprise_id: str | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -5764,7 +5838,7 @@

    Methods

    Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -5785,7 +5859,7 @@

    Methods

    Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.approve

    +https://docs.slack.dev/reference/methods/admin.apps.approve

    def admin_apps_approved_list(self,
    *,
    cursor: str | None = None,
    limit: int | None = None,
    enterprise_id: str | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -5805,7 +5879,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -5818,7 +5892,7 @@

    Methods

    return self.api_call("admin.apps.approved.list", http_verb="GET", params=kwargs)

    List approved apps for an org or workspace. -https://api.slack.com/methods/admin.apps.approved.list

    +https://docs.slack.dev/reference/methods/admin.apps.approved.list

    def admin_apps_clearResolution(self,
    *,
    app_id: str,
    enterprise_id: str | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -5837,7 +5911,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -5849,7 +5923,7 @@

    Methods

    return self.api_call("admin.apps.clearResolution", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.apps.clearResolution

    def admin_apps_config_lookup(self, *, app_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -5866,7 +5940,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -5875,7 +5949,7 @@

    Methods

    return self.api_call("admin.apps.config.lookup", params=kwargs)

    Look up the app config for connectors by their IDs -https://api.slack.com/methods/admin.apps.config.lookup

    +https://docs.slack.dev/reference/methods/admin.apps.config.lookup

    def admin_apps_config_set(self,
    *,
    app_id: str,
    domain_restrictions: Dict[str, Any] | None = None,
    workflow_auth_strategy: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -5894,7 +5968,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -5907,7 +5981,7 @@

    Methods

    return self.api_call("admin.apps.config.set", params=kwargs)

    Set the app config for a connector -https://api.slack.com/methods/admin.apps.config.set

    +https://docs.slack.dev/reference/methods/admin.apps.config.set

    def admin_apps_requests_cancel(self,
    *,
    request_id: str,
    enterprise_id: str | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -5926,7 +6000,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -5938,7 +6012,7 @@

    Methods

    return self.api_call("admin.apps.requests.cancel", http_verb="POST", params=kwargs)

    List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.cancel

    +https://docs.slack.dev/reference/methods/admin.apps.requests.cancel

    def admin_apps_requests_list(self,
    *,
    cursor: str | None = None,
    limit: int | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -5957,7 +6031,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -5969,7 +6043,7 @@

    Methods

    return self.api_call("admin.apps.requests.list", http_verb="GET", params=kwargs)

    List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.list

    +https://docs.slack.dev/reference/methods/admin.apps.requests.list

    def admin_apps_restrict(self,
    *,
    app_id: str | None = None,
    request_id: str | None = None,
    enterprise_id: str | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -5992,7 +6066,7 @@

    Methods

    Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -6013,7 +6087,7 @@

    Methods

    Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.restrict

    +https://docs.slack.dev/reference/methods/admin.apps.restrict

    def admin_apps_restricted_list(self,
    *,
    cursor: str | None = None,
    limit: int | None = None,
    enterprise_id: str | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -6033,7 +6107,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -6046,7 +6120,7 @@

    Methods

    return self.api_call("admin.apps.restricted.list", http_verb="GET", params=kwargs)

    List restricted apps for an org or workspace. -https://api.slack.com/methods/admin.apps.restricted.list

    +https://docs.slack.dev/reference/methods/admin.apps.restricted.list

    def admin_apps_uninstall(self,
    *,
    app_id: str,
    enterprise_id: str | None = None,
    team_ids: str | Sequence[str] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -6066,7 +6140,7 @@

    Methods

    ) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -6080,7 +6154,7 @@

    Methods

    Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. -https://api.slack.com/methods/admin.apps.uninstall

    +https://docs.slack.dev/reference/methods/admin.apps.uninstall

    def admin_auth_policy_assignEntities(self,
    *,
    entity_ids: str | Sequence[str],
    policy_name: str,
    entity_type: str,
    **kwargs) ‑> SlackResponse
    @@ -6099,7 +6173,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6110,7 +6184,7 @@

    Methods

    return self.api_call("admin.auth.policy.assignEntities", http_verb="POST", params=kwargs)

    Assign entities to a particular authentication policy. -https://api.slack.com/methods/admin.auth.policy.assignEntities

    +https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities

    def admin_auth_policy_getEntities(self,
    *,
    policy_name: str,
    cursor: str | None = None,
    entity_type: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -6130,7 +6204,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -6142,7 +6216,7 @@

    Methods

    return self.api_call("admin.auth.policy.getEntities", http_verb="POST", params=kwargs)

    Fetch all the entities assigned to a particular authentication policy by name. -https://api.slack.com/methods/admin.auth.policy.getEntities

    +https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities

    def admin_auth_policy_removeEntities(self,
    *,
    entity_ids: str | Sequence[str],
    policy_name: str,
    entity_type: str,
    **kwargs) ‑> SlackResponse
    @@ -6161,7 +6235,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6172,7 +6246,7 @@

    Methods

    return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs)

    Remove specified entities from a specified authentication policy. -https://api.slack.com/methods/admin.auth.policy.removeEntities

    +https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities

    def admin_barriers_create(self,
    *,
    barriered_from_usergroup_ids: str | Sequence[str],
    primary_usergroup_id: str,
    restricted_subjects: str | Sequence[str],
    **kwargs) ‑> SlackResponse
    @@ -6191,7 +6265,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6205,7 +6279,7 @@

    Methods

    return self.api_call("admin.barriers.create", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.barriers.create

    def admin_barriers_delete(self, *, barrier_id: str, **kwargs) ‑> SlackResponse @@ -6222,13 +6296,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs)

    Delete an existing Information Barrier -https://api.slack.com/methods/admin.barriers.delete

    +https://docs.slack.dev/reference/methods/admin.barriers.delete

    def admin_barriers_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -6246,7 +6320,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -6256,7 +6330,7 @@

    Methods

    return self.api_call("admin.barriers.list", http_verb="GET", params=kwargs)

    Get all Information Barriers for your organization -https://api.slack.com/methods/admin.barriers.list

    +https://docs.slack.dev/reference/methods/admin.barriers.list

    def admin_barriers_update(self,
    *,
    barrier_id: str,
    barriered_from_usergroup_ids: str | Sequence[str],
    primary_usergroup_id: str,
    restricted_subjects: str | Sequence[str],
    **kwargs) ‑> SlackResponse
    @@ -6276,7 +6350,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6290,7 +6364,7 @@

    Methods

    return self.api_call("admin.barriers.update", http_verb="POST", params=kwargs)

    Update an existing Information Barrier -https://api.slack.com/methods/admin.barriers.update

    +https://docs.slack.dev/reference/methods/admin.barriers.update

    def admin_conversations_archive(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6307,13 +6381,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs)

    Archive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

    +https://docs.slack.dev/reference/methods/admin.conversations.archive

    def admin_conversations_bulkArchive(self, *, channel_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -6330,13 +6404,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs)

    Archive public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkArchive

    +https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive

    def admin_conversations_bulkDelete(self, *, channel_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -6377,7 +6451,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -6388,7 +6462,7 @@

    Methods

    return self.api_call("admin.conversations.bulkMove", params=kwargs)

    Move public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkMove

    +https://docs.slack.dev/reference/methods/admin.conversations.bulkMove

    def admin_conversations_convertToPrivate(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6405,13 +6479,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs)

    Convert a public channel to a private channel. -https://api.slack.com/methods/admin.conversations.convertToPrivate

    +https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate

    def admin_conversations_convertToPublic(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6428,13 +6502,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs)

    Convert a privte channel to a public channel. -https://api.slack.com/methods/admin.conversations.convertToPublic

    +https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic

    def admin_conversations_create(self,
    *,
    is_private: bool,
    name: str,
    description: str | None = None,
    org_wide: bool | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -6455,7 +6529,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -6469,7 +6543,7 @@

    Methods

    return self.api_call("admin.conversations.create", params=kwargs)

    Create a public or private channel-based conversation. -https://api.slack.com/methods/admin.conversations.create

    +https://docs.slack.dev/reference/methods/admin.conversations.create

    def admin_conversations_createForObjects(self,
    *,
    object_id: str,
    salesforce_org_id: str,
    invite_object_team: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -6488,7 +6562,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -6496,7 +6570,7 @@

    Methods

    return self.api_call("admin.conversations.createForObjects", params=kwargs)

    Create a Salesforce channel for the corresponding object provided. -https://api.slack.com/methods/admin.conversations.createForObjects

    +https://docs.slack.dev/reference/methods/admin.conversations.createForObjects

    def admin_conversations_delete(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6513,13 +6587,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.conversations.delete

    def admin_conversations_disconnectShared(self,
    *,
    channel_id: str,
    leaving_team_ids: str | Sequence[str] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -6537,7 +6611,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -6547,7 +6621,7 @@

    Methods

    return self.api_call("admin.conversations.disconnectShared", params=kwargs)

    Disconnect a connected channel from one or more workspaces. -https://api.slack.com/methods/admin.conversations.disconnectShared

    +https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared

    def admin_conversations_ekm_listOriginalConnectedChannelInfo(self,
    *,
    channel_ids: str | Sequence[str] | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    team_ids: str | Sequence[str] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -6569,7 +6643,7 @@

    Methods

    """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -6590,7 +6664,7 @@

    Methods

    List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. -https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

    +https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

    def admin_conversations_getConversationPrefs(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6607,13 +6681,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs)

    Get conversation preferences for a public or private channel. -https://api.slack.com/methods/admin.conversations.getConversationPrefs

    +https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs

    def admin_conversations_getCustomRetention(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6630,13 +6704,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention

    def admin_conversations_getTeams(self,
    *,
    channel_id: str,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -6655,7 +6729,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -6667,7 +6741,7 @@

    Methods

    return self.api_call("admin.conversations.getTeams", params=kwargs)

    Set the workspaces in an Enterprise grid org that connect to a channel. -https://api.slack.com/methods/admin.conversations.getTeams

    +https://docs.slack.dev/reference/methods/admin.conversations.getTeams

    def admin_conversations_invite(self, *, channel_id: str, user_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -6685,7 +6759,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -6696,7 +6770,7 @@

    Methods

    return self.api_call("admin.conversations.invite", params=kwargs)

    Invite a user to a public or private channel. -https://api.slack.com/methods/admin.conversations.invite

    +https://docs.slack.dev/reference/methods/admin.conversations.invite

    def admin_conversations_linkObjects(self, *, channel: str, record_id: str, salesforce_org_id: str, **kwargs) ‑> SlackResponse @@ -6715,7 +6789,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -6727,7 +6801,7 @@

    Methods

    return self.api_call("admin.conversations.linkObjects", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.conversations.linkObjects

    def admin_conversations_lookup(self,
    *,
    last_message_activity_before: int,
    team_ids: str | Sequence[str],
    cursor: str | None = None,
    limit: int | None = None,
    max_member_count: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -6748,7 +6822,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -6765,7 +6839,7 @@

    Methods

    return self.api_call("admin.conversations.lookup", params=kwargs)

    Returns channels on the given team using the filters. -https://api.slack.com/methods/admin.conversations.lookup

    +https://docs.slack.dev/reference/methods/admin.conversations.lookup

    def admin_conversations_removeCustomRetention(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6782,13 +6856,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention

    def admin_conversations_rename(self, *, channel_id: str, name: str, **kwargs) ‑> SlackResponse @@ -6806,13 +6880,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.conversations.rename

    def admin_conversations_restrictAccess_addGroup(self, *, channel_id: str, group_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -6831,7 +6905,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -6847,7 +6921,7 @@

    Methods

    )

    Add an allowlist of IDP groups for accessing a channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup

    +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup

    def admin_conversations_restrictAccess_listGroups(self, *, channel_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -6865,7 +6939,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -6880,7 +6954,7 @@

    Methods

    )
    +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups

    def admin_conversations_restrictAccess_removeGroup(self, *, channel_id: str, group_id: str, team_id: str, **kwargs) ‑> SlackResponse @@ -6899,7 +6973,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -6915,7 +6989,7 @@

    Methods

    )

    Remove a linked IDP group linked from a private channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup

    +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup

    def admin_conversations_setConversationPrefs(self, *, channel_id: str, prefs: str | Dict[str, str], **kwargs) ‑> SlackResponse @@ -6981,7 +7055,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -6991,7 +7065,7 @@

    Methods

    return self.api_call("admin.conversations.setConversationPrefs", params=kwargs)

    Set the posting permissions for a public or private channel. -https://api.slack.com/methods/admin.conversations.setConversationPrefs

    +https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs

    def admin_conversations_setCustomRetention(self, *, channel_id: str, duration_days: int, **kwargs) ‑> SlackResponse @@ -7009,13 +7083,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention

    def admin_conversations_setTeams(self,
    *,
    channel_id: str,
    org_channel: bool | None = None,
    target_team_ids: str | Sequence[str] | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7035,7 +7109,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -7051,7 +7125,7 @@

    Methods

    return self.api_call("admin.conversations.setTeams", params=kwargs)

    Set the workspaces in an Enterprise grid org that connect to a public or private channel. -https://api.slack.com/methods/admin.conversations.setTeams

    +https://docs.slack.dev/reference/methods/admin.conversations.setTeams

    def admin_conversations_unarchive(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -7068,13 +7142,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs)

    Unarchive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

    +https://docs.slack.dev/reference/methods/admin.conversations.archive

    def admin_conversations_unlinkObjects(self, *, channel: str, new_name: str, **kwargs) ‑> SlackResponse @@ -7092,7 +7166,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -7103,7 +7177,7 @@

    Methods

    return self.api_call("admin.conversations.unlinkObjects", params=kwargs)

    Unlink a Salesforce record from a channel. -https://api.slack.com/methods/admin.conversations.unlinkObjects

    +https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects

    def admin_emoji_add(self, *, name: str, url: str, **kwargs) ‑> SlackResponse @@ -7121,13 +7195,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.emoji.add

    def admin_emoji_addAlias(self, *, alias_for: str, name: str, **kwargs) ‑> SlackResponse @@ -7145,13 +7219,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.emoji.addAlias

    def admin_emoji_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -7169,13 +7243,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs)

    List emoji for an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.list

    +https://docs.slack.dev/reference/methods/admin.emoji.list

    def admin_emoji_remove(self, *, name: str, **kwargs) ‑> SlackResponse @@ -7192,13 +7266,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs)

    Remove an emoji across an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.remove

    +https://docs.slack.dev/reference/methods/admin.emoji.remove

    def admin_emoji_rename(self, *, name: str, new_name: str, **kwargs) ‑> SlackResponse @@ -7216,13 +7290,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.emoji.rename

    def admin_functions_list(self,
    *,
    app_ids: str | Sequence[str],
    team_id: str | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7242,7 +7316,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -7258,7 +7332,7 @@

    Methods

    return self.api_call("admin.functions.list", params=kwargs)

    Look up functions by a set of apps -https://api.slack.com/methods/admin.functions.list

    +https://docs.slack.dev/reference/methods/admin.functions.list

    def admin_functions_permissions_lookup(self, *, function_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -7276,7 +7350,7 @@

    Methods

    ) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -7286,7 +7360,7 @@

    Methods

    Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. -https://api.slack.com/methods/admin.functions.permissions.lookup

    +https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup

    def admin_functions_permissions_set(self,
    *,
    function_id: str,
    visibility: str,
    user_ids: str | Sequence[str] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7306,7 +7380,7 @@

    Methods

    ) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -7323,7 +7397,7 @@

    Methods

    Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities -https://api.slack.com/methods/admin.functions.permissions.set

    +https://docs.slack.dev/reference/methods/admin.functions.permissions.set

    def admin_inviteRequests_approve(self, *, invite_request_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -7341,13 +7415,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.inviteRequests.approve

    def admin_inviteRequests_approved_list(self,
    *,
    cursor: str | None = None,
    limit: int | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7366,7 +7440,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -7378,7 +7452,7 @@

    Methods

    return self.api_call("admin.inviteRequests.approved.list", params=kwargs)

    List all approved workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.approved.list

    +https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list

    def admin_inviteRequests_denied_list(self,
    *,
    cursor: str | None = None,
    limit: int | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7397,7 +7471,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -7409,7 +7483,7 @@

    Methods

    return self.api_call("admin.inviteRequests.denied.list", params=kwargs)

    List all denied workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.denied.list

    +https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list

    def admin_inviteRequests_deny(self, *, invite_request_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -7427,13 +7501,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.inviteRequests.deny

    def admin_inviteRequests_list(self, **kwargs) ‑> SlackResponse @@ -7469,7 +7543,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7483,7 +7557,7 @@

    Methods

    return self.api_call("admin.roles.addAssignments", params=kwargs)

    Adds members to the specified role with the specified scopes -https://api.slack.com/methods/admin.roles.addAssignments

    +https://docs.slack.dev/reference/methods/admin.roles.addAssignments

    def admin_roles_listAssignments(self,
    *,
    role_ids: str | Sequence[str] | None = None,
    entity_ids: str | Sequence[str] | None = None,
    cursor: str | None = None,
    limit: str | int | None = None,
    sort_dir: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7505,7 +7579,7 @@

    Methods

    ) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -7520,7 +7594,7 @@

    Methods

    Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities -https://api.slack.com/methods/admin.roles.listAssignments

    +https://docs.slack.dev/reference/methods/admin.roles.listAssignments

    def admin_roles_removeAssignments(self,
    *,
    role_id: str,
    entity_ids: str | Sequence[str],
    user_ids: str | Sequence[str],
    **kwargs) ‑> SlackResponse
    @@ -7539,7 +7613,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7553,7 +7627,7 @@

    Methods

    return self.api_call("admin.roles.removeAssignments", params=kwargs)

    Removes a set of users from a role for the given scopes and entities -https://api.slack.com/methods/admin.roles.removeAssignments

    +https://docs.slack.dev/reference/methods/admin.roles.removeAssignments

    def admin_teams_admins_list(self, *, team_id: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -7572,7 +7646,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -7584,7 +7658,7 @@

    Methods

    return self.api_call("admin.teams.admins.list", http_verb="GET", params=kwargs)

    List all of the admins on a given workspace. -https://api.slack.com/methods/admin.inviteRequests.list

    +https://docs.slack.dev/reference/methods/admin.inviteRequests.list

    def admin_teams_create(self,
    *,
    team_domain: str,
    team_name: str,
    team_description: str | None = None,
    team_discoverability: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7604,7 +7678,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -7617,7 +7691,7 @@

    Methods

    return self.api_call("admin.teams.create", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.teams.create

    def admin_teams_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -7635,13 +7709,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs)

    List all teams on an Enterprise organization. -https://api.slack.com/methods/admin.teams.list

    +https://docs.slack.dev/reference/methods/admin.teams.list

    def admin_teams_owners_list(self, *, team_id: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -7660,13 +7734,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs)

    List all of the admins on a given workspace. -https://api.slack.com/methods/admin.teams.owners.list

    +https://docs.slack.dev/reference/methods/admin.teams.owners.list

    def admin_teams_settings_info(self, *, team_id: str, **kwargs) ‑> SlackResponse @@ -7683,13 +7757,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs)

    Fetch information about settings in a workspace -https://api.slack.com/methods/admin.teams.settings.info

    +https://docs.slack.dev/reference/methods/admin.teams.settings.info

    def admin_teams_settings_setDefaultChannels(self, *, team_id: str, channel_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -7707,7 +7781,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -7717,7 +7791,7 @@

    Methods

    return self.api_call("admin.teams.settings.setDefaultChannels", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels

    def admin_teams_settings_setDescription(self, *, team_id: str, description: str, **kwargs) ‑> SlackResponse @@ -7735,13 +7809,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription

    def admin_teams_settings_setDiscoverability(self, *, team_id: str, discoverability: str, **kwargs) ‑> SlackResponse @@ -7759,13 +7833,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability

    def admin_teams_settings_setIcon(self, *, team_id: str, image_url: str, **kwargs) ‑> SlackResponse @@ -7783,13 +7857,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon

    def admin_teams_settings_setName(self, *, team_id: str, name: str, **kwargs) ‑> SlackResponse @@ -7807,13 +7881,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.teams.settings.setName

    def admin_usergroups_addChannels(self,
    *,
    channel_ids: str | Sequence[str],
    usergroup_id: str,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7832,7 +7906,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7842,7 +7916,7 @@

    Methods

    return self.api_call("admin.usergroups.addChannels", params=kwargs)

    Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.addChannels

    +https://docs.slack.dev/reference/methods/admin.usergroups.addChannels

    def admin_usergroups_addTeams(self,
    *,
    usergroup_id: str,
    team_ids: str | Sequence[str],
    auto_provision: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7861,7 +7935,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -7871,7 +7945,7 @@

    Methods

    return self.api_call("admin.usergroups.addTeams", params=kwargs)

    Associate one or more default workspaces with an organization-wide IDP group. -https://api.slack.com/methods/admin.usergroups.addTeams

    +https://docs.slack.dev/reference/methods/admin.usergroups.addTeams

    def admin_usergroups_listChannels(self,
    *,
    usergroup_id: str,
    include_num_members: bool | None = None,
    team_id: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7890,7 +7964,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -7902,7 +7976,7 @@

    Methods

    return self.api_call("admin.usergroups.listChannels", params=kwargs)

    Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.listChannels

    +https://docs.slack.dev/reference/methods/admin.usergroups.listChannels

    def admin_usergroups_removeChannels(self, *, usergroup_id: str, channel_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -7920,7 +7994,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7930,7 +8004,7 @@

    Methods

    return self.api_call("admin.usergroups.removeChannels", params=kwargs)

    Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.removeChannels

    +https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels

    def admin_users_assign(self,
    *,
    team_id: str,
    user_id: str,
    channel_ids: str | Sequence[str] | None = None,
    is_restricted: bool | None = None,
    is_ultra_restricted: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7951,7 +8025,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -7968,7 +8042,7 @@

    Methods

    return self.api_call("admin.users.assign", params=kwargs)

    Add an Enterprise user to a workspace. -https://api.slack.com/methods/admin.users.assign

    +https://docs.slack.dev/reference/methods/admin.users.assign

    def admin_users_invite(self,
    *,
    team_id: str,
    email: str,
    channel_ids: str | Sequence[str],
    custom_message: str | None = None,
    email_password_policy_enabled: bool | None = None,
    guest_expiration_ts: str | float | None = None,
    is_restricted: bool | None = None,
    is_ultra_restricted: bool | None = None,
    real_name: str | None = None,
    resend: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7994,7 +8068,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -8016,10 +8090,10 @@

    Methods

    return self.api_call("admin.users.invite", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.users.invite

    -def admin_users_list(self,
    *,
    team_id: str,
    include_deactivated_user_workspaces: bool | None = None,
    is_active: bool | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    +def admin_users_list(self,
    *,
    team_id: str | None = None,
    include_deactivated_user_workspaces: bool | None = None,
    is_active: bool | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -8029,7 +8103,7 @@

    Methods

    def admin_users_list(
         self,
         *,
    -    team_id: str,
    +    team_id: Optional[str] = None,
         include_deactivated_user_workspaces: Optional[bool] = None,
         is_active: Optional[bool] = None,
         cursor: Optional[str] = None,
    @@ -8037,7 +8111,7 @@ 

    Methods

    **kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -8051,7 +8125,7 @@

    Methods

    return self.api_call("admin.users.list", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.users.list

    def admin_users_remove(self, *, team_id: str, user_id: str, **kwargs) ‑> SlackResponse @@ -8069,13 +8143,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs)

    Remove a user from a workspace. -https://api.slack.com/methods/admin.users.remove

    +https://docs.slack.dev/reference/methods/admin.users.remove

    def admin_users_session_clearSettings(self, *, user_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -8093,7 +8167,7 @@

    Methods

    ) -> SlackResponse: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8103,7 +8177,7 @@

    Methods

    Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. -https://api.slack.com/methods/admin.users.session.clearSettings

    +https://docs.slack.dev/reference/methods/admin.users.session.clearSettings

    def admin_users_session_getSettings(self, *, user_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -8121,7 +8195,7 @@

    Methods

    ) -> SlackResponse: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8131,7 +8205,7 @@

    Methods

    Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. -https://api.slack.com/methods/admin.users.session.getSettings

    +https://docs.slack.dev/reference/methods/admin.users.session.getSettings

    def admin_users_session_invalidate(self, *, session_id: str, team_id: str, **kwargs) ‑> SlackResponse @@ -8149,13 +8223,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs)

    Invalidate a single session for a user by session_id. -https://api.slack.com/methods/admin.users.session.invalidate

    +https://docs.slack.dev/reference/methods/admin.users.session.invalidate

    def admin_users_session_list(self,
    *,
    cursor: str | None = None,
    limit: int | None = None,
    team_id: str | None = None,
    user_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -8175,7 +8249,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -8188,7 +8262,7 @@

    Methods

    return self.api_call("admin.users.session.list", params=kwargs)

    Lists all active user sessions for an organization -https://api.slack.com/methods/admin.users.session.list

    +https://docs.slack.dev/reference/methods/admin.users.session.list

    def admin_users_session_reset(self,
    *,
    user_id: str,
    mobile_only: bool | None = None,
    web_only: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -8207,7 +8281,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -8219,7 +8293,7 @@

    Methods

    return self.api_call("admin.users.session.reset", params=kwargs)

    Wipes all valid sessions on all devices for a given user. -https://api.slack.com/methods/admin.users.session.reset

    +https://docs.slack.dev/reference/methods/admin.users.session.reset

    def admin_users_session_resetBulk(self,
    *,
    user_ids: str | Sequence[str],
    mobile_only: bool | None = None,
    web_only: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -8238,7 +8312,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8253,7 +8327,7 @@

    Methods

    return self.api_call("admin.users.session.resetBulk", params=kwargs)

    Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users -https://api.slack.com/methods/admin.users.session.resetBulk

    +https://docs.slack.dev/reference/methods/admin.users.session.resetBulk

    def admin_users_session_setSettings(self,
    *,
    user_ids: str | Sequence[str],
    desktop_app_browser_quit: bool | None = None,
    duration: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -8273,7 +8347,7 @@

    Methods

    ) -> SlackResponse: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8289,7 +8363,7 @@

    Methods

    Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. -https://api.slack.com/methods/admin.users.session.setSettings

    +https://docs.slack.dev/reference/methods/admin.users.session.setSettings

    def admin_users_setAdmin(self, *, team_id: str, user_id: str, **kwargs) ‑> SlackResponse @@ -8307,13 +8381,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs)

    Set an existing guest, regular user, or owner to be an admin user. -https://api.slack.com/methods/admin.users.setAdmin

    +https://docs.slack.dev/reference/methods/admin.users.setAdmin

    def admin_users_setExpiration(self, *, expiration_ts: int, user_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -8332,13 +8406,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs)

    Set an expiration for a guest user. -https://api.slack.com/methods/admin.users.setExpiration

    +https://docs.slack.dev/reference/methods/admin.users.setExpiration

    def admin_users_setOwner(self, *, team_id: str, user_id: str, **kwargs) ‑> SlackResponse @@ -8356,13 +8430,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs)

    Set an existing guest, regular user, or admin user to be a workspace owner. -https://api.slack.com/methods/admin.users.setOwner

    +https://docs.slack.dev/reference/methods/admin.users.setOwner

    def admin_users_setRegular(self, *, team_id: str, user_id: str, **kwargs) ‑> SlackResponse @@ -8380,13 +8454,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs)

    Set an existing guest user, admin user, or owner to be a regular user. -https://api.slack.com/methods/admin.users.setRegular

    +https://docs.slack.dev/reference/methods/admin.users.setRegular

    def admin_users_unsupportedVersions_export(self,
    *,
    date_end_of_support: str | int | None = None,
    date_sessions_started: str | int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -8405,7 +8479,7 @@

    Methods

    ) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -8417,7 +8491,7 @@

    Methods

    Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. -https://api.slack.com/methods/admin.users.unsupportedVersions.export

    +https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export

    def admin_workflows_collaborators_add(self,
    *,
    collaborator_ids: str | Sequence[str],
    workflow_ids: str | Sequence[str],
    **kwargs) ‑> SlackResponse
    @@ -8435,7 +8509,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8448,7 +8522,7 @@

    Methods

    return self.api_call("admin.workflows.collaborators.add", params=kwargs)

    Add collaborators to workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.add

    +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add

    def admin_workflows_collaborators_remove(self,
    *,
    collaborator_ids: str | Sequence[str],
    workflow_ids: str | Sequence[str],
    **kwargs) ‑> SlackResponse
    @@ -8466,7 +8540,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8479,7 +8553,7 @@

    Methods

    return self.api_call("admin.workflows.collaborators.remove", params=kwargs)

    Remove collaborators from workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.remove

    +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove

    def admin_workflows_permissions_lookup(self,
    *,
    workflow_ids: str | Sequence[str],
    max_workflow_triggers: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -8497,7 +8571,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8511,7 +8585,7 @@

    Methods

    return self.api_call("admin.workflows.permissions.lookup", params=kwargs)

    Look up the permissions for a set of workflows -https://api.slack.com/methods/admin.workflows.permissions.lookup

    +https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup

    def admin_workflows_unpublish(self, *, workflow_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -8577,7 +8651,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8586,7 +8660,7 @@

    Methods

    return self.api_call("admin.workflows.unpublish", params=kwargs)

    Unpublish workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.unpublish

    +https://docs.slack.dev/reference/methods/admin.workflows.unpublish

    def api_test(self, *, error: str | None = None, **kwargs) ‑> SlackResponse @@ -8603,13 +8677,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs)

    Checks API calling code. -https://api.slack.com/methods/api.test

    +https://docs.slack.dev/reference/methods/api.test

    def apps_connections_open(self, *, app_token: str, **kwargs) ‑> SlackResponse @@ -8627,14 +8701,14 @@

    Methods

    ) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs)

    Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads -https://api.slack.com/methods/apps.connections.open

    +https://docs.slack.dev/reference/methods/apps.connections.open

    def apps_event_authorizations_list(self,
    *,
    event_context: str,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -8654,14 +8728,14 @@

    Methods

    ) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs)

    Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. -https://api.slack.com/methods/apps.event.authorizations.list

    +https://docs.slack.dev/reference/methods/apps.event.authorizations.list

    def apps_manifest_create(self, *, manifest: str | Dict[str, Any], **kwargs) ‑> SlackResponse @@ -8678,7 +8752,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8687,7 +8761,7 @@

    Methods

    return self.api_call("apps.manifest.create", params=kwargs)

    Create an app from an app manifest -https://api.slack.com/methods/apps.manifest.create

    +https://docs.slack.dev/reference/methods/apps.manifest.create

    def apps_manifest_delete(self, *, app_id: str, **kwargs) ‑> SlackResponse @@ -8704,13 +8778,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs)

    Permanently deletes an app created through app manifests -https://api.slack.com/methods/apps.manifest.delete

    +https://docs.slack.dev/reference/methods/apps.manifest.delete

    def apps_manifest_export(self, *, app_id: str, **kwargs) ‑> SlackResponse @@ -8727,13 +8801,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs)

    Export an app manifest from an existing app -https://api.slack.com/methods/apps.manifest.export

    +https://docs.slack.dev/reference/methods/apps.manifest.export

    def apps_manifest_update(self, *, app_id: str, manifest: str | Dict[str, Any], **kwargs) ‑> SlackResponse @@ -8751,7 +8825,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8761,7 +8835,7 @@

    Methods

    return self.api_call("apps.manifest.update", params=kwargs)

    Update an app from an app manifest -https://api.slack.com/methods/apps.manifest.update

    +https://docs.slack.dev/reference/methods/apps.manifest.update

    def apps_manifest_validate(self, *, manifest: str | Dict[str, Any], app_id: str | None = None, **kwargs) ‑> SlackResponse @@ -8779,7 +8853,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8789,7 +8863,7 @@

    Methods

    return self.api_call("apps.manifest.validate", params=kwargs)
    +https://docs.slack.dev/reference/methods/apps.manifest.validate

    def apps_uninstall(self, *, client_id: str, client_secret: str, **kwargs) ‑> SlackResponse @@ -8807,13 +8881,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs)

    Uninstalls your app from a workspace. -https://api.slack.com/methods/apps.uninstall

    +https://docs.slack.dev/reference/methods/apps.uninstall

    def assistant_threads_setStatus(self, *, channel_id: str, thread_ts: str, status: str, **kwargs) ‑> SlackResponse @@ -8832,13 +8906,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return self.api_call("assistant.threads.setStatus", params=kwargs)
    +https://docs.slack.dev/reference/methods/assistant.threads.setStatus

    def assistant_threads_setSuggestedPrompts(self,
    *,
    channel_id: str,
    thread_ts: str,
    title: str | None = None,
    prompts: List[Dict[str, str]],
    **kwargs) ‑> SlackResponse
    @@ -8858,7 +8932,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -8866,7 +8940,7 @@

    Methods

    return self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
    +https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

    def assistant_threads_setTitle(self, *, channel_id: str, thread_ts: str, title: str, **kwargs) ‑> SlackResponse @@ -8885,13 +8959,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs)
    +https://docs.slack.dev/reference/methods/assistant.threads.setTitle

    def auth_revoke(self, *, test: bool | None = None, **kwargs) ‑> SlackResponse @@ -8908,13 +8982,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/auth.revoke

    def auth_teams_list(self,
    cursor: str | None = None,
    limit: int | None = None,
    include_icon: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -8932,13 +9006,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs)

    List the workspaces a token can access. -https://api.slack.com/methods/auth.teams.list

    +https://docs.slack.dev/reference/methods/auth.teams.list

    def auth_test(self, **kwargs) ‑> SlackResponse @@ -8953,12 +9027,12 @@

    Methods

    **kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs)

    Checks authentication & identity. -https://api.slack.com/methods/auth.test

    +https://docs.slack.dev/reference/methods/auth.test

    def bookmarks_add(self,
    *,
    channel_id: str,
    title: str,
    type: str,
    emoji: str | None = None,
    entity_id: str | None = None,
    link: str | None = None,
    parent_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -8981,7 +9055,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -8997,7 +9071,7 @@

    Methods

    return self.api_call("bookmarks.add", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/bookmarks.add

    def bookmarks_edit(self,
    *,
    bookmark_id: str,
    channel_id: str,
    emoji: str | None = None,
    link: str | None = None,
    title: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -9018,7 +9092,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -9032,7 +9106,7 @@

    Methods

    return self.api_call("bookmarks.edit", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/bookmarks.edit

    def bookmarks_list(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -9049,13 +9123,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs)

    List bookmark for the channel. -https://api.slack.com/methods/bookmarks.list

    +https://docs.slack.dev/reference/methods/bookmarks.list

    def bookmarks_remove(self, *, bookmark_id: str, channel_id: str, **kwargs) ‑> SlackResponse @@ -9073,13 +9147,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs)

    Remove bookmark from the channel. -https://api.slack.com/methods/bookmarks.remove

    +https://docs.slack.dev/reference/methods/bookmarks.remove

    def bots_info(self, *, bot: str | None = None, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -9097,13 +9171,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs)

    Gets information about a bot user. -https://api.slack.com/methods/bots.info

    +https://docs.slack.dev/reference/methods/bots.info

    def calls_add(self,
    *,
    external_unique_id: str,
    join_url: str,
    created_by: str | None = None,
    date_start: int | None = None,
    desktop_app_join_url: str | None = None,
    external_display_id: str | None = None,
    title: str | None = None,
    users: str | Sequence[Dict[str, str]] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -9127,7 +9201,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -9147,7 +9221,7 @@

    Methods

    return self.api_call("calls.add", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/calls.add

    def calls_end(self, *, id: str, duration: int | None = None, **kwargs) ‑> SlackResponse @@ -9165,13 +9239,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/calls.end

    def calls_info(self, *, id: str, **kwargs) ‑> SlackResponse @@ -9188,13 +9262,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs)

    Returns information about a Call. -https://api.slack.com/methods/calls.info

    +https://docs.slack.dev/reference/methods/calls.info

    def calls_participants_add(self, *, id: str, users: str | Sequence[Dict[str, str]], **kwargs) ‑> SlackResponse @@ -9212,14 +9286,14 @@

    Methods

    **kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.add", http_verb="POST", params=kwargs)

    Registers new participants added to a Call. -https://api.slack.com/methods/calls.participants.add

    +https://docs.slack.dev/reference/methods/calls.participants.add

    def calls_participants_remove(self, *, id: str, users: str | Sequence[Dict[str, str]], **kwargs) ‑> SlackResponse @@ -9237,14 +9311,14 @@

    Methods

    **kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.remove", http_verb="POST", params=kwargs)

    Registers participants removed from a Call. -https://api.slack.com/methods/calls.participants.remove

    +https://docs.slack.dev/reference/methods/calls.participants.remove

    def calls_update(self,
    *,
    id: str,
    desktop_app_join_url: str | None = None,
    join_url: str | None = None,
    title: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -9264,7 +9338,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -9277,7 +9351,7 @@

    Methods

    return self.api_call("calls.update", http_verb="POST", params=kwargs)

    Updates information about a Call. -https://api.slack.com/methods/calls.update

    +https://docs.slack.dev/reference/methods/calls.update

    def canvases_access_delete(self,
    *,
    canvas_id: str,
    channel_ids: str | Sequence[str] | None = None,
    user_ids: str | Sequence[str] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -9296,7 +9370,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -9312,7 +9386,7 @@

    Methods

    return self.api_call("canvases.access.delete", params=kwargs)

    Create a Channel Canvas for a channel -https://api.slack.com/methods/canvases.access.delete

    +https://docs.slack.dev/reference/methods/canvases.access.delete

    def canvases_access_set(self,
    *,
    canvas_id: str,
    access_level: str,
    channel_ids: str | Sequence[str] | None = None,
    user_ids: str | Sequence[str] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -9332,7 +9406,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -9349,7 +9423,7 @@

    Methods

    return self.api_call("canvases.access.set", params=kwargs)

    Sets the access level to a canvas for specified entities -https://api.slack.com/methods/canvases.access.set

    +https://docs.slack.dev/reference/methods/canvases.access.set

    def canvases_create(self, *, title: str | None = None, document_content: Dict[str, str], **kwargs) ‑> SlackResponse @@ -9367,13 +9441,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs)
    +https://docs.slack.dev/reference/methods/canvases.create

    def canvases_delete(self, *, canvas_id: str, **kwargs) ‑> SlackResponse @@ -9390,13 +9464,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs)
    +https://docs.slack.dev/reference/methods/canvases.delete

    def canvases_edit(self, *, canvas_id: str, changes: Sequence[Dict[str, Any]], **kwargs) ‑> SlackResponse @@ -9414,13 +9488,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs)
    +https://docs.slack.dev/reference/methods/canvases.edit

    def canvases_sections_lookup(self, *, canvas_id: str, criteria: Dict[str, Any], **kwargs) ‑> SlackResponse @@ -9438,13 +9512,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs)

    Find sections matching the provided criteria -https://api.slack.com/methods/canvases.sections.lookup

    +https://docs.slack.dev/reference/methods/canvases.sections.lookup

    def channels_archive(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -9778,13 +9852,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs)
    +https://docs.slack.dev/reference/methods/chat.delete

    def chat_deleteScheduledMessage(self,
    *,
    channel: str,
    scheduled_message_id: str,
    as_user: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -9803,7 +9877,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -9815,7 +9889,7 @@

    Methods

    return self.api_call("chat.deleteScheduledMessage", params=kwargs)
    +https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage

    def chat_meMessage(self, *, channel: str, text: str, **kwargs) ‑> SlackResponse @@ -9857,16 +9931,16 @@

    Methods

    **kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs)

    Share a me message into a channel. -https://api.slack.com/methods/chat.meMessage

    +https://docs.slack.dev/reference/methods/chat.meMessage

    -def chat_postEphemeral(self,
    *,
    channel: str,
    user: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    **kwargs) ‑> SlackResponse
    +def chat_postEphemeral(self,
    *,
    channel: str,
    user: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -9888,10 +9962,11 @@

    Methods

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -9907,19 +9982,20 @@

    Methods

    "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs)

    Sends an ephemeral message to a user in a channel. -https://api.slack.com/methods/chat.postEphemeral

    +https://docs.slack.dev/reference/methods/chat.postEphemeral

    -def chat_postMessage(self,
    *,
    channel: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    container_id: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    mrkdwn: bool | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> SlackResponse
    +def chat_postMessage(self,
    *,
    channel: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    container_id: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    mrkdwn: bool | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -9946,10 +10022,11 @@

    Methods

    username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -9970,19 +10047,20 @@

    Methods

    "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs)

    Sends a message to a channel. -https://api.slack.com/methods/chat.postMessage

    +https://docs.slack.dev/reference/methods/chat.postMessage

    -def chat_scheduleMessage(self,
    *,
    channel: str,
    post_at: str | int,
    text: str,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    link_names: bool | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> SlackResponse
    +def chat_scheduleMessage(self,
    *,
    channel: str,
    post_at: str | int,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    link_names: bool | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -9994,7 +10072,7 @@

    Methods

    *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -10005,10 +10083,11 @@

    Methods

    unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -10025,16 +10104,17 @@

    Methods

    "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs)
    +https://docs.slack.dev/reference/methods/chat.scheduleMessage

    def chat_scheduledMessages_list(self,
    *,
    channel: str | None = None,
    cursor: str | None = None,
    latest: str | None = None,
    limit: int | None = None,
    oldest: str | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10056,7 +10136,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -10071,7 +10151,7 @@

    Methods

    return self.api_call("chat.scheduledMessages.list", params=kwargs)
    +https://docs.slack.dev/reference/methods/chat.scheduledMessages.list

    def chat_unfurl(self,
    *,
    channel: str | None = None,
    ts: str | None = None,
    source: str | None = None,
    unfurl_id: str | None = None,
    unfurls: Dict[str, Dict] | None = None,
    user_auth_blocks: str | Sequence[Dict | Block] | None = None,
    user_auth_message: str | None = None,
    user_auth_required: bool | None = None,
    user_auth_url: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10096,7 +10176,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -10117,10 +10197,10 @@

    Methods

    return self.api_call("chat.unfurl", json=kwargs)

    Provide custom unfurl behavior for user-posted URLs. -https://api.slack.com/methods/chat.unfurl

    +https://docs.slack.dev/reference/methods/chat.unfurl

    -def chat_update(self,
    *,
    channel: str,
    ts: str,
    text: str | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    as_user: bool | None = None,
    file_ids: str | Sequence[str] | None = None,
    link_names: bool | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> SlackResponse
    +def chat_update(self,
    *,
    channel: str,
    ts: str,
    text: str | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    as_user: bool | None = None,
    file_ids: str | Sequence[str] | None = None,
    link_names: bool | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10141,10 +10221,11 @@

    Methods

    parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -10158,6 +10239,7 @@

    Methods

    "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -10166,12 +10248,12 @@

    Methods

    kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs)

    Updates a message in a channel. -https://api.slack.com/methods/chat.update

    +https://docs.slack.dev/reference/methods/chat.update

    def conversations_acceptSharedInvite(self,
    *,
    channel_name: str,
    channel_id: str | None = None,
    invite_id: str | None = None,
    free_trial_accepted: bool | None = None,
    is_private: bool | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10193,7 +10275,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -10210,7 +10292,7 @@

    Methods

    return self.api_call("conversations.acceptSharedInvite", http_verb="POST", params=kwargs)

    Accepts an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.acceptSharedInvite

    +https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite

    def conversations_approveSharedInvite(self, *, invite_id: str, target_team: str | None = None, **kwargs) ‑> SlackResponse @@ -10228,13 +10310,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs)

    Approves an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.approveSharedInvite

    +https://docs.slack.dev/reference/methods/conversations.approveSharedInvite

    def conversations_archive(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10251,13 +10333,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs)
    +https://docs.slack.dev/reference/methods/conversations.archive

    def conversations_canvases_create(self, *, channel_id: str, document_content: Dict[str, str], **kwargs) ‑> SlackResponse @@ -10275,13 +10357,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs)
    +https://docs.slack.dev/reference/methods/conversations.canvases.create

    def conversations_close(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10298,13 +10380,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs)

    Closes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.close

    +https://docs.slack.dev/reference/methods/conversations.close

    def conversations_create(self,
    *,
    name: str,
    is_private: bool | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10323,13 +10405,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs)

    Initiates a public or private channel-based conversation -https://api.slack.com/methods/conversations.create

    +https://docs.slack.dev/reference/methods/conversations.create

    def conversations_declineSharedInvite(self, *, invite_id: str, target_team: str | None = None, **kwargs) ‑> SlackResponse @@ -10347,13 +10429,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs)

    Declines a Slack Connect channel invite. -https://api.slack.com/methods/conversations.declineSharedInvite

    +https://docs.slack.dev/reference/methods/conversations.declineSharedInvite

    def conversations_externalInvitePermissions_set(self, *, action: str, channel: str, target_team: str, **kwargs) ‑> SlackResponse @@ -10367,7 +10449,7 @@

    Methods

    self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -10379,7 +10461,7 @@

    Methods

    return self.api_call("conversations.externalInvitePermissions.set", params=kwargs)

    Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. -https://api.slack.com/methods/conversations.externalInvitePermissions.set

    +https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set

    def conversations_history(self,
    *,
    channel: str,
    cursor: str | None = None,
    inclusive: bool | None = None,
    include_all_metadata: bool | None = None,
    latest: str | None = None,
    limit: int | None = None,
    oldest: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10402,7 +10484,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -10418,7 +10500,7 @@

    Methods

    return self.api_call("conversations.history", http_verb="GET", params=kwargs)

    Fetches a conversation's history of messages and events. -https://api.slack.com/methods/conversations.history

    +https://docs.slack.dev/reference/methods/conversations.history

    def conversations_info(self,
    *,
    channel: str,
    include_locale: bool | None = None,
    include_num_members: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10437,7 +10519,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -10449,7 +10531,7 @@

    Methods

    return self.api_call("conversations.info", http_verb="GET", params=kwargs)

    Retrieve information about a conversation. -https://api.slack.com/methods/conversations.info

    +https://docs.slack.dev/reference/methods/conversations.info

    def conversations_invite(self,
    *,
    channel: str,
    users: str | Sequence[str],
    force: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10468,7 +10550,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -10483,7 +10565,7 @@

    Methods

    return self.api_call("conversations.invite", params=kwargs)
    +https://docs.slack.dev/reference/methods/conversations.invite

    def conversations_inviteShared(self,
    *,
    channel: str,
    emails: str | Sequence[str] | None = None,
    user_ids: str | Sequence[str] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10502,7 +10584,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -10518,7 +10600,7 @@

    Methods

    return self.api_call("conversations.inviteShared", http_verb="GET", params=kwargs)

    Sends an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.inviteShared

    +https://docs.slack.dev/reference/methods/conversations.inviteShared

    def conversations_join(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10535,13 +10617,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs)

    Joins an existing conversation. -https://api.slack.com/methods/conversations.join

    +https://docs.slack.dev/reference/methods/conversations.join

    def conversations_kick(self, *, channel: str, user: str, **kwargs) ‑> SlackResponse @@ -10559,13 +10641,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs)

    Removes a user from a conversation. -https://api.slack.com/methods/conversations.kick

    +https://docs.slack.dev/reference/methods/conversations.kick

    def conversations_leave(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10582,13 +10664,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs)
    +https://docs.slack.dev/reference/methods/conversations.leave

    def conversations_list(self,
    *,
    cursor: str | None = None,
    exclude_archived: bool | None = None,
    limit: int | None = None,
    team_id: str | None = None,
    types: str | Sequence[str] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10609,7 +10691,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -10626,7 +10708,7 @@

    Methods

    return self.api_call("conversations.list", http_verb="GET", params=kwargs)

    Lists all channels in a Slack team. -https://api.slack.com/methods/conversations.list

    +https://docs.slack.dev/reference/methods/conversations.list

    def conversations_listConnectInvites(self,
    *,
    count: int | None = None,
    cursor: str | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10646,14 +10728,14 @@

    Methods

    ) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs)

    List shared channel invites that have been generated or received but have not yet been approved by all parties. -https://api.slack.com/methods/conversations.listConnectInvites

    +https://docs.slack.dev/reference/methods/conversations.listConnectInvites

    def conversations_mark(self, *, channel: str, ts: str, **kwargs) ‑> SlackResponse @@ -10671,13 +10753,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs)

    Sets the read cursor in a channel. -https://api.slack.com/methods/conversations.mark

    +https://docs.slack.dev/reference/methods/conversations.mark

    def conversations_members(self, *, channel: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -10696,13 +10778,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs)

    Retrieve members of a conversation. -https://api.slack.com/methods/conversations.members

    +https://docs.slack.dev/reference/methods/conversations.members

    def conversations_open(self,
    *,
    channel: str | None = None,
    return_im: bool | None = None,
    users: str | Sequence[str] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10721,7 +10803,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -10733,7 +10815,7 @@

    Methods

    return self.api_call("conversations.open", params=kwargs)

    Opens or resumes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.open

    +https://docs.slack.dev/reference/methods/conversations.open

    def conversations_rename(self, *, channel: str, name: str, **kwargs) ‑> SlackResponse @@ -10751,13 +10833,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs)
    +https://docs.slack.dev/reference/methods/conversations.rename

    def conversations_replies(self,
    *,
    channel: str,
    ts: str,
    cursor: str | None = None,
    inclusive: bool | None = None,
    include_all_metadata: bool | None = None,
    latest: str | None = None,
    limit: int | None = None,
    oldest: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10781,7 +10863,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -10798,7 +10880,7 @@

    Methods

    return self.api_call("conversations.replies", http_verb="GET", params=kwargs)

    Retrieve a thread of messages posted to a conversation -https://api.slack.com/methods/conversations.replies

    +https://docs.slack.dev/reference/methods/conversations.replies

    def conversations_requestSharedInvite_approve(self,
    *,
    invite_id: str,
    channel_id: str | None = None,
    is_external_limited: str | None = None,
    message: Dict[str, Any] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10818,7 +10900,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -10832,7 +10914,7 @@

    Methods

    return self.api_call("conversations.requestSharedInvite.approve", params=kwargs)

    Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. -https://api.slack.com/methods/conversations.requestSharedInvite.approve

    +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve

    def conversations_requestSharedInvite_deny(self, *, invite_id: str, message: str | None = None, **kwargs) ‑> SlackResponse @@ -10850,13 +10932,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs)

    Deny a request to invite an external user to a channel. -https://api.slack.com/methods/conversations.requestSharedInvite.deny

    +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny

    def conversations_requestSharedInvite_list(self,
    *,
    cursor: str | None = None,
    include_approved: bool | None = None,
    include_denied: bool | None = None,
    include_expired: bool | None = None,
    invite_ids: str | Sequence[str] | None = None,
    limit: int | None = None,
    user_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10879,7 +10961,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -10899,7 +10981,7 @@

    Methods

    return self.api_call("conversations.requestSharedInvite.list", params=kwargs)

    Lists requests to add external users to channels with ability to filter. -https://api.slack.com/methods/conversations.requestSharedInvite.list

    +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list

    def conversations_setPurpose(self, *, channel: str, purpose: str, **kwargs) ‑> SlackResponse @@ -10917,13 +10999,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs)

    Sets the purpose for a conversation. -https://api.slack.com/methods/conversations.setPurpose

    +https://docs.slack.dev/reference/methods/conversations.setPurpose

    def conversations_setTopic(self, *, channel: str, topic: str, **kwargs) ‑> SlackResponse @@ -10941,13 +11023,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs)

    Sets the topic for a conversation. -https://api.slack.com/methods/conversations.setTopic

    +https://docs.slack.dev/reference/methods/conversations.setTopic

    def conversations_unarchive(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10964,13 +11046,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs)
    +https://docs.slack.dev/reference/methods/conversations.unarchive

    def dialog_open(self, *, dialog: Dict[str, Any], trigger_id: str, **kwargs) ‑> SlackResponse @@ -10988,7 +11070,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -10996,7 +11078,7 @@

    Methods

    return self.api_call("dialog.open", json=kwargs)

    Open a dialog with a user. -https://api.slack.com/methods/dialog.open

    +https://docs.slack.dev/reference/methods/dialog.open

    def dnd_endDnd(self, **kwargs) ‑> SlackResponse @@ -11011,12 +11093,12 @@

    Methods

    **kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs)

    Ends the current user's Do Not Disturb session immediately. -https://api.slack.com/methods/dnd.endDnd

    +https://docs.slack.dev/reference/methods/dnd.endDnd

    def dnd_endSnooze(self, **kwargs) ‑> SlackResponse @@ -11031,12 +11113,12 @@

    Methods

    **kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs)

    Ends the current user's snooze mode immediately. -https://api.slack.com/methods/dnd.endSnooze

    +https://docs.slack.dev/reference/methods/dnd.endSnooze

    def dnd_info(self, *, team_id: str | None = None, user: str | None = None, **kwargs) ‑> SlackResponse @@ -11054,13 +11136,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs)

    Retrieves a user's current Do Not Disturb status. -https://api.slack.com/methods/dnd.info

    +https://docs.slack.dev/reference/methods/dnd.info

    def dnd_setSnooze(self, *, num_minutes: str | int, **kwargs) ‑> SlackResponse @@ -11077,13 +11159,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs)

    Turns on Do Not Disturb mode for the current user, or changes its duration. -https://api.slack.com/methods/dnd.setSnooze

    +https://docs.slack.dev/reference/methods/dnd.setSnooze

    def dnd_teamInfo(self, users: str | Sequence[str], team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -11100,7 +11182,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -11110,7 +11192,7 @@

    Methods

    return self.api_call("dnd.teamInfo", http_verb="GET", params=kwargs)

    Retrieves the Do Not Disturb status for users on a team. -https://api.slack.com/methods/dnd.teamInfo

    +https://docs.slack.dev/reference/methods/dnd.teamInfo

    def emoji_list(self, include_categories: bool | None = None, **kwargs) ‑> SlackResponse @@ -11126,13 +11208,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs)

    Lists custom emoji for a team. -https://api.slack.com/methods/emoji.list

    +https://docs.slack.dev/reference/methods/emoji.list

    def files_comments_delete(self, *, file: str, id: str, **kwargs) ‑> SlackResponse @@ -11150,13 +11232,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs)

    Deletes an existing comment on a file. -https://api.slack.com/methods/files.comments.delete

    +https://docs.slack.dev/reference/methods/files.comments.delete

    def files_completeUploadExternal(self,
    *,
    files: List[Dict[str, str]],
    channel_id: str | None = None,
    channels: List[str] | None = None,
    initial_comment: str | None = None,
    thread_ts: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -11177,7 +11259,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -11193,7 +11275,7 @@

    Methods

    return self.api_call("files.completeUploadExternal", params=kwargs)

    Finishes an upload started with files.getUploadURLExternal. -https://api.slack.com/methods/files.completeUploadExternal

    +https://docs.slack.dev/reference/methods/files.completeUploadExternal

    def files_delete(self, *, file: str, **kwargs) ‑> SlackResponse @@ -11210,13 +11292,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs)
    +https://docs.slack.dev/reference/methods/files.delete

    def files_getUploadURLExternal(self,
    *,
    filename: str,
    length: int,
    alt_txt: str | None = None,
    snippet_type: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -11236,7 +11318,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -11249,7 +11331,7 @@

    Methods

    return self.api_call("files.getUploadURLExternal", params=kwargs)

    Gets a URL for an edge external upload. -https://api.slack.com/methods/files.getUploadURLExternal

    +https://docs.slack.dev/reference/methods/files.getUploadURLExternal

    def files_info(self,
    *,
    file: str,
    count: int | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    page: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -11270,7 +11352,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -11284,7 +11366,7 @@

    Methods

    return self.api_call("files.info", http_verb="GET", params=kwargs)

    Gets information about a team file. -https://api.slack.com/methods/files.info

    +https://docs.slack.dev/reference/methods/files.info

    def files_list(self,
    *,
    channel: str | None = None,
    count: int | None = None,
    page: int | None = None,
    show_files_hidden_by_limit: bool | None = None,
    team_id: str | None = None,
    ts_from: str | None = None,
    ts_to: str | None = None,
    types: str | Sequence[str] | None = None,
    user: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -11309,7 +11391,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -11330,7 +11412,7 @@

    Methods

    return self.api_call("files.list", http_verb="GET", params=kwargs)

    Lists & filters team files. -https://api.slack.com/methods/files.list

    +https://docs.slack.dev/reference/methods/files.list

    def files_remote_add(self,
    *,
    external_id: str,
    external_url: str,
    title: str,
    filetype: str | None = None,
    indexable_file_contents: str | bytes | io.IOBase | None = None,
    preview_image: str | bytes | io.IOBase | None = None,
    **kwargs) ‑> SlackResponse
    @@ -11352,7 +11434,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -11379,7 +11461,7 @@

    Methods

    )

    Adds a file from a remote service. -https://api.slack.com/methods/files.remote.add

    +https://docs.slack.dev/reference/methods/files.remote.add

    def files_remote_info(self, *, external_id: str | None = None, file: str | None = None, **kwargs) ‑> SlackResponse @@ -11397,13 +11479,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs)

    Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.info

    +https://docs.slack.dev/reference/methods/files.remote.info

    def files_remote_list(self,
    *,
    channel: str | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    ts_from: str | None = None,
    ts_to: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -11424,7 +11506,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -11438,7 +11520,7 @@

    Methods

    return self.api_call("files.remote.list", http_verb="GET", params=kwargs)

    Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.list

    +https://docs.slack.dev/reference/methods/files.remote.list

    def files_remote_remove(self, *, external_id: str | None = None, file: str | None = None, **kwargs) ‑> SlackResponse @@ -11456,13 +11538,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/files.remote.remove

    def files_remote_share(self,
    *,
    channels: str | Sequence[str],
    external_id: str | None = None,
    file: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -11481,7 +11563,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -11493,7 +11575,7 @@

    Methods

    return self.api_call("files.remote.share", http_verb="GET", params=kwargs)

    Share a remote file into a channel. -https://api.slack.com/methods/files.remote.share

    +https://docs.slack.dev/reference/methods/files.remote.share

    def files_remote_update(self,
    *,
    external_id: str | None = None,
    external_url: str | None = None,
    file: str | None = None,
    title: str | None = None,
    filetype: str | None = None,
    indexable_file_contents: str | None = None,
    preview_image: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -11516,7 +11598,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -11544,7 +11626,7 @@

    Methods

    )

    Updates an existing remote file. -https://api.slack.com/methods/files.remote.update

    +https://docs.slack.dev/reference/methods/files.remote.update

    def files_revokePublicURL(self, *, file: str, **kwargs) ‑> SlackResponse @@ -11561,13 +11643,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs)

    Revokes public/external sharing access for a file -https://api.slack.com/methods/files.revokePublicURL

    +https://docs.slack.dev/reference/methods/files.revokePublicURL

    def files_sharedPublicURL(self, *, file: str, **kwargs) ‑> SlackResponse @@ -11584,13 +11666,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs)

    Enables a file for public/external sharing. -https://api.slack.com/methods/files.sharedPublicURL

    +https://docs.slack.dev/reference/methods/files.sharedPublicURL

    def files_upload(self,
    *,
    file: str | bytes | io.IOBase | None = None,
    content: str | bytes | None = None,
    filename: str | None = None,
    filetype: str | None = None,
    initial_comment: str | None = None,
    thread_ts: str | None = None,
    title: str | None = None,
    channels: str | Sequence[str] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -11614,7 +11696,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -11647,7 +11729,7 @@

    Methods

    return self.api_call("files.upload", data=kwargs)

    Uploads or creates a file. -https://api.slack.com/methods/files.upload

    +https://docs.slack.dev/reference/methods/files.upload

    def files_upload_v2(self,
    *,
    filename: str | None = None,
    file: str | bytes | io.IOBase | os.PathLike | None = None,
    content: str | bytes | None = None,
    title: str | None = None,
    alt_txt: str | None = None,
    snippet_type: str | None = None,
    file_uploads: List[Dict[str, Any]] | None = None,
    channel: str | None = None,
    channels: List[str] | None = None,
    initial_comment: str | None = None,
    thread_ts: str | None = None,
    request_file_info: bool = True,
    **kwargs) ‑> SlackResponse
    @@ -11678,12 +11760,12 @@

    Methods

    ) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -11762,14 +11844,14 @@

    Methods

    This wrapper method provides an easy way to upload files using the following endpoints:

    @@ -11789,13 +11871,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs)

    Signal the failure to execute a function -https://api.slack.com/methods/functions.completeError

    +https://docs.slack.dev/reference/methods/functions.completeError

    def functions_completeSuccess(self, *, function_execution_id: str, outputs: Dict[str, Any], **kwargs) ‑> SlackResponse @@ -11813,13 +11895,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs)

    Signal the successful completion of a function -https://api.slack.com/methods/functions.completeSuccess

    +https://docs.slack.dev/reference/methods/functions.completeSuccess

    def groups_archive(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -12295,7 +12377,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -12305,7 +12387,7 @@

    Methods

    return self.api_call("migration.exchange", http_verb="GET", params=kwargs)

    For Enterprise Grid workspaces, map local user IDs to global user IDs -https://api.slack.com/methods/migration.exchange

    +https://docs.slack.dev/reference/methods/migration.exchange

    def mpim_close(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -12452,7 +12534,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12464,7 +12546,7 @@

    Methods

    )

    Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.access

    +https://docs.slack.dev/reference/methods/oauth.access

    def oauth_v2_access(self,
    *,
    client_id: str,
    client_secret: str,
    code: str | None = None,
    redirect_uri: str | None = None,
    grant_type: str | None = None,
    refresh_token: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -12490,7 +12572,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12507,7 +12589,7 @@

    Methods

    )

    Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.v2.access

    +https://docs.slack.dev/reference/methods/oauth.v2.access

    def oauth_v2_exchange(self, *, token: str, client_id: str, client_secret: str, **kwargs) ‑> SlackResponse @@ -12526,13 +12608,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs)

    Exchanges a legacy access token for a new expiring access token and refresh token -https://api.slack.com/methods/oauth.v2.exchange

    +https://docs.slack.dev/reference/methods/oauth.v2.exchange

    def openid_connect_token(self,
    client_id: str,
    client_secret: str,
    code: str | None = None,
    redirect_uri: str | None = None,
    grant_type: str | None = None,
    refresh_token: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -12553,7 +12635,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12570,7 +12652,7 @@

    Methods

    )

    Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. -https://api.slack.com/methods/openid.connect.token

    +https://docs.slack.dev/reference/methods/openid.connect.token

    def openid_connect_userInfo(self, **kwargs) ‑> SlackResponse @@ -12585,12 +12667,12 @@

    Methods

    **kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs)

    Get the identity of a user who has authorized Sign in with Slack. -https://api.slack.com/methods/openid.connect.userInfo

    +https://docs.slack.dev/reference/methods/openid.connect.userInfo

    def pins_add(self, *, channel: str, timestamp: str | None = None, **kwargs) ‑> SlackResponse @@ -12608,13 +12690,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs)

    Pins an item to a channel. -https://api.slack.com/methods/pins.add

    +https://docs.slack.dev/reference/methods/pins.add

    def pins_list(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -12631,13 +12713,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs)

    Lists items pinned to a channel. -https://api.slack.com/methods/pins.list

    +https://docs.slack.dev/reference/methods/pins.list

    def pins_remove(self, *, channel: str, timestamp: str | None = None, **kwargs) ‑> SlackResponse @@ -12655,13 +12737,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs)

    Un-pins an item from a channel. -https://api.slack.com/methods/pins.remove

    +https://docs.slack.dev/reference/methods/pins.remove

    def reactions_add(self, *, channel: str, name: str, timestamp: str, **kwargs) ‑> SlackResponse @@ -12680,13 +12762,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs)

    Adds a reaction to an item. -https://api.slack.com/methods/reactions.add

    +https://docs.slack.dev/reference/methods/reactions.add

    def reactions_get(self,
    *,
    channel: str | None = None,
    file: str | None = None,
    file_comment: str | None = None,
    full: bool | None = None,
    timestamp: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -12707,7 +12789,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -12721,7 +12803,7 @@

    Methods

    return self.api_call("reactions.get", http_verb="GET", params=kwargs)

    Gets reactions for an item. -https://api.slack.com/methods/reactions.get

    +https://docs.slack.dev/reference/methods/reactions.get

    def reactions_list(self,
    *,
    count: int | None = None,
    cursor: str | None = None,
    full: bool | None = None,
    limit: int | None = None,
    page: int | None = None,
    team_id: str | None = None,
    user: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -12744,7 +12826,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -12760,7 +12842,7 @@

    Methods

    return self.api_call("reactions.list", http_verb="GET", params=kwargs)

    Lists reactions made by a user. -https://api.slack.com/methods/reactions.list

    +https://docs.slack.dev/reference/methods/reactions.list

    def reactions_remove(self,
    *,
    name: str,
    channel: str | None = None,
    file: str | None = None,
    file_comment: str | None = None,
    timestamp: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -12781,7 +12863,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -12795,7 +12877,7 @@

    Methods

    return self.api_call("reactions.remove", params=kwargs)

    Removes a reaction from an item. -https://api.slack.com/methods/reactions.remove

    +https://docs.slack.dev/reference/methods/reactions.remove

    def reminders_add(self,
    *,
    text: str,
    time: str,
    team_id: str | None = None,
    user: str | None = None,
    recurrence: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -12816,7 +12898,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -12830,7 +12912,7 @@

    Methods

    return self.api_call("reminders.add", params=kwargs)
    +https://docs.slack.dev/reference/methods/reminders.add

    def reminders_complete(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -12848,13 +12930,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs)
    +https://docs.slack.dev/reference/methods/reminders.complete

    def reminders_delete(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -12872,13 +12954,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs)
    +https://docs.slack.dev/reference/methods/reminders.delete

    def reminders_info(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -12896,13 +12978,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs)

    Gets information about a reminder. -https://api.slack.com/methods/reminders.info

    +https://docs.slack.dev/reference/methods/reminders.info

    def reminders_list(self, *, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -12919,13 +13001,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs)

    Lists all reminders created by or for a given user. -https://api.slack.com/methods/reminders.list

    +https://docs.slack.dev/reference/methods/reminders.list

    def rtm_connect(self,
    *,
    batch_presence_aware: bool | None = None,
    presence_sub: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -12943,13 +13025,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs)

    Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.connect

    +https://docs.slack.dev/reference/methods/rtm.connect

    def rtm_start(self,
    *,
    batch_presence_aware: bool | None = None,
    include_locale: bool | None = None,
    mpim_aware: bool | None = None,
    no_latest: bool | None = None,
    no_unreads: bool | None = None,
    presence_sub: bool | None = None,
    simple_latest: bool | None = None,
    **kwargs) ‑> SlackResponse
    @@ -12972,7 +13054,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -12988,7 +13070,7 @@

    Methods

    return self.api_call("rtm.start", http_verb="GET", params=kwargs)

    Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.start

    +https://docs.slack.dev/reference/methods/rtm.start

    def search_all(self,
    *,
    query: str,
    count: int | None = None,
    highlight: bool | None = None,
    page: int | None = None,
    sort: str | None = None,
    sort_dir: str | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13011,7 +13093,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -13027,7 +13109,7 @@

    Methods

    return self.api_call("search.all", http_verb="GET", params=kwargs)

    Searches for messages and files matching a query. -https://api.slack.com/methods/search.all

    +https://docs.slack.dev/reference/methods/search.all

    def search_files(self,
    *,
    query: str,
    count: int | None = None,
    highlight: bool | None = None,
    page: int | None = None,
    sort: str | None = None,
    sort_dir: str | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13050,7 +13132,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -13066,7 +13148,7 @@

    Methods

    return self.api_call("search.files", http_verb="GET", params=kwargs)

    Searches for files matching a query. -https://api.slack.com/methods/search.files

    +https://docs.slack.dev/reference/methods/search.files

    def search_messages(self,
    *,
    query: str,
    count: int | None = None,
    cursor: str | None = None,
    highlight: bool | None = None,
    page: int | None = None,
    sort: str | None = None,
    sort_dir: str | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13090,7 +13172,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -13107,7 +13189,7 @@

    Methods

    return self.api_call("search.messages", http_verb="GET", params=kwargs)

    Searches for messages matching a query. -https://api.slack.com/methods/search.messages

    +https://docs.slack.dev/reference/methods/search.messages

    def stars_add(self,
    *,
    channel: str | None = None,
    file: str | None = None,
    file_comment: str | None = None,
    timestamp: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13127,7 +13209,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -13140,7 +13222,7 @@

    Methods

    return self.api_call("stars.add", params=kwargs)
    +https://docs.slack.dev/reference/methods/stars.add

    def stars_list(self,
    *,
    count: int | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    page: int | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13161,7 +13243,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -13175,7 +13257,7 @@

    Methods

    return self.api_call("stars.list", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/stars.list

    def stars_remove(self,
    *,
    channel: str | None = None,
    file: str | None = None,
    file_comment: str | None = None,
    timestamp: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13195,7 +13277,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -13208,7 +13290,7 @@

    Methods

    return self.api_call("stars.remove", params=kwargs)

    Removes a star from an item. -https://api.slack.com/methods/stars.remove

    +https://docs.slack.dev/reference/methods/stars.remove

    def team_accessLogs(self,
    *,
    before: str | int | None = None,
    count: str | int | None = None,
    page: str | int | None = None,
    team_id: str | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13230,7 +13312,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -13245,7 +13327,7 @@

    Methods

    return self.api_call("team.accessLogs", http_verb="GET", params=kwargs)

    Gets the access logs for the current team. -https://api.slack.com/methods/team.accessLogs

    +https://docs.slack.dev/reference/methods/team.accessLogs

    def team_billableInfo(self, *, team_id: str | None = None, user: str | None = None, **kwargs) ‑> SlackResponse @@ -13263,13 +13345,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs)

    Gets billable users information for the current team. -https://api.slack.com/methods/team.billableInfo

    +https://docs.slack.dev/reference/methods/team.billableInfo

    def team_billing_info(self, **kwargs) ‑> SlackResponse @@ -13284,12 +13366,12 @@

    Methods

    **kwargs, ) -> SlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs)

    Reads a workspace's billing plan information. -https://api.slack.com/methods/team.billing.info

    +https://docs.slack.dev/reference/methods/team.billing.info

    def team_externalTeams_disconnect(self, *, target_team: str, **kwargs) ‑> SlackResponse @@ -13306,7 +13388,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -13316,7 +13398,7 @@

    Methods

    return self.api_call("team.externalTeams.disconnect", params=kwargs)
    +https://docs.slack.dev/reference/methods/team.externalTeams.disconnect

    def team_externalTeams_list(self,
    *,
    connection_status_filter: str | None = None,
    slack_connect_pref_filter: Sequence[str] | None = None,
    sort_direction: str | None = None,
    sort_field: str | None = None,
    workspace_filter: Sequence[str] | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13339,7 +13421,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -13363,7 +13445,7 @@

    Methods

    return self.api_call("team.externalTeams.list", http_verb="GET", params=kwargs)

    Returns a list of all the external teams connected and details about the connection. -https://api.slack.com/methods/team.externalTeams.list

    +https://docs.slack.dev/reference/methods/team.externalTeams.list

    def team_info(self, *, team: str | None = None, domain: str | None = None, **kwargs) ‑> SlackResponse @@ -13381,13 +13463,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs)

    Gets information about the current team. -https://api.slack.com/methods/team.info

    +https://docs.slack.dev/reference/methods/team.info

    def team_integrationLogs(self,
    *,
    app_id: str | None = None,
    change_type: str | None = None,
    count: str | int | None = None,
    page: str | int | None = None,
    service_id: str | None = None,
    team_id: str | None = None,
    user: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13410,7 +13492,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -13426,7 +13508,7 @@

    Methods

    return self.api_call("team.integrationLogs", http_verb="GET", params=kwargs)

    Gets the integration logs for the current team. -https://api.slack.com/methods/team.integrationLogs

    +https://docs.slack.dev/reference/methods/team.integrationLogs

    def team_preferences_list(self, **kwargs) ‑> SlackResponse @@ -13441,12 +13523,12 @@

    Methods

    **kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs)

    Retrieve a list of a workspace's team preferences. -https://api.slack.com/methods/team.preferences.list

    +https://docs.slack.dev/reference/methods/team.preferences.list

    def team_profile_get(self, *, visibility: str | None = None, **kwargs) ‑> SlackResponse @@ -13463,13 +13545,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/team.profile.get

    def tooling_tokens_rotate(self, *, refresh_token: str, **kwargs) ‑> SlackResponse @@ -13486,13 +13568,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs)

    Exchanges a refresh token for a new app configuration token -https://api.slack.com/methods/tooling.tokens.rotate

    +https://docs.slack.dev/reference/methods/tooling.tokens.rotate

    def usergroups_create(self,
    *,
    name: str,
    channels: str | Sequence[str] | None = None,
    description: str | None = None,
    handle: str | None = None,
    include_count: bool | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13514,7 +13596,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -13532,7 +13614,7 @@

    Methods

    return self.api_call("usergroups.create", params=kwargs)
    +https://docs.slack.dev/reference/methods/usergroups.create

    def usergroups_disable(self,
    *,
    usergroup: str,
    include_count: bool | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13551,13 +13633,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs)

    Disable an existing User Group -https://api.slack.com/methods/usergroups.disable

    +https://docs.slack.dev/reference/methods/usergroups.disable

    def usergroups_enable(self,
    *,
    usergroup: str,
    include_count: bool | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13576,13 +13658,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs)
    +https://docs.slack.dev/reference/methods/usergroups.enable

    def usergroups_list(self,
    *,
    include_count: bool | None = None,
    include_disabled: bool | None = None,
    include_users: bool | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13602,7 +13684,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -13615,7 +13697,7 @@

    Methods

    return self.api_call("usergroups.list", http_verb="GET", params=kwargs)

    List all User Groups for a team -https://api.slack.com/methods/usergroups.list

    +https://docs.slack.dev/reference/methods/usergroups.list

    def usergroups_update(self,
    *,
    usergroup: str,
    channels: str | Sequence[str] | None = None,
    description: str | None = None,
    handle: str | None = None,
    include_count: bool | None = None,
    name: str | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13638,7 +13720,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -13657,7 +13739,7 @@

    Methods

    return self.api_call("usergroups.update", params=kwargs)
    +https://docs.slack.dev/reference/methods/usergroups.update

    def usergroups_users_list(self,
    *,
    usergroup: str,
    include_disabled: bool | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13676,7 +13758,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -13688,7 +13770,7 @@

    Methods

    return self.api_call("usergroups.users.list", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/usergroups.users.list

    def usergroups_users_update(self,
    *,
    usergroup: str,
    users: str | Sequence[str],
    include_count: bool | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13708,7 +13790,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -13724,7 +13806,7 @@

    Methods

    return self.api_call("usergroups.users.update", params=kwargs)

    Update the list of users for a User Group -https://api.slack.com/methods/usergroups.users.update

    +https://docs.slack.dev/reference/methods/usergroups.users.update

    def users_conversations(self,
    *,
    cursor: str | None = None,
    exclude_archived: bool | None = None,
    limit: int | None = None,
    team_id: str | None = None,
    types: str | Sequence[str] | None = None,
    user: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13746,7 +13828,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -13764,7 +13846,7 @@

    Methods

    return self.api_call("users.conversations", http_verb="GET", params=kwargs)

    List conversations the calling user may access. -https://api.slack.com/methods/users.conversations

    +https://docs.slack.dev/reference/methods/users.conversations

    def users_deletePhoto(self, **kwargs) ‑> SlackResponse @@ -13779,12 +13861,12 @@

    Methods

    **kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/users.deletePhoto

    def users_discoverableContacts_lookup(self, email: str, **kwargs) ‑> SlackResponse @@ -13800,13 +13882,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs)

    Lookup an email address to see if someone is on Slack -https://api.slack.com/methods/users.discoverableContacts.lookup

    +https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup

    def users_getPresence(self, *, user: str, **kwargs) ‑> SlackResponse @@ -13823,13 +13905,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs)

    Gets user presence information. -https://api.slack.com/methods/users.getPresence

    +https://docs.slack.dev/reference/methods/users.getPresence

    def users_identity(self, **kwargs) ‑> SlackResponse @@ -13844,12 +13926,12 @@

    Methods

    **kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/users.identity

    def users_info(self, *, user: str, include_locale: bool | None = None, **kwargs) ‑> SlackResponse @@ -13867,13 +13949,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs)

    Gets information about a user. -https://api.slack.com/methods/users.info

    +https://docs.slack.dev/reference/methods/users.info

    def users_list(self,
    *,
    cursor: str | None = None,
    include_locale: bool | None = None,
    limit: int | None = None,
    team_id: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13893,7 +13975,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -13906,7 +13988,7 @@

    Methods

    return self.api_call("users.list", http_verb="GET", params=kwargs)

    Lists all users in a Slack team. -https://api.slack.com/methods/users.list

    +https://docs.slack.dev/reference/methods/users.list

    def users_lookupByEmail(self, *, email: str, **kwargs) ‑> SlackResponse @@ -13923,13 +14005,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs)

    Find a user with an email address. -https://api.slack.com/methods/users.lookupByEmail

    +https://docs.slack.dev/reference/methods/users.lookupByEmail

    def users_profile_get(self, *, user: str | None = None, include_labels: bool | None = None, **kwargs) ‑> SlackResponse @@ -13947,13 +14029,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs)

    Retrieves a user's profile information. -https://api.slack.com/methods/users.profile.get

    +https://docs.slack.dev/reference/methods/users.profile.get

    def users_profile_set(self,
    *,
    name: str | None = None,
    value: str | None = None,
    user: str | None = None,
    profile: Dict | None = None,
    **kwargs) ‑> SlackResponse
    @@ -13973,7 +14055,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -13988,7 +14070,7 @@

    Methods

    return self.api_call("users.profile.set", json=kwargs)

    Set the profile information for a user. -https://api.slack.com/methods/users.profile.set

    +https://docs.slack.dev/reference/methods/users.profile.set

    def users_setPhoto(self,
    *,
    image: str | io.IOBase,
    crop_w: str | int | None = None,
    crop_x: str | int | None = None,
    crop_y: str | int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -14008,13 +14090,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs)
    +https://docs.slack.dev/reference/methods/users.setPhoto

    def users_setPresence(self, *, presence: str, **kwargs) ‑> SlackResponse @@ -14031,13 +14113,13 @@

    Methods

    **kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs)
    +https://docs.slack.dev/reference/methods/users.setPresence

    def views_open(self,
    *,
    trigger_id: str | None = None,
    interactivity_pointer: str | None = None,
    view: dict | View,
    **kwargs) ‑> SlackResponse
    @@ -14056,8 +14138,8 @@

    Methods

    **kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -14069,8 +14151,8 @@

    Methods

    return self.api_call("views.open", json=kwargs)
    +https://docs.slack.dev/reference/methods/views.open +See https://docs.slack.dev/surfaces/modals/ for details.

    def views_publish(self,
    *,
    user_id: str,
    view: dict | View,
    hash: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -14090,8 +14172,8 @@

    Methods

    ) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -14104,8 +14186,8 @@

    Methods

    Publish a static view for a User. Create or update the view that comprises an -app's Home tab (https://api.slack.com/surfaces/tabs) -https://api.slack.com/methods/views.publish

    +app's Home tab (https://docs.slack.dev/surfaces/app-home/) +https://docs.slack.dev/reference/methods/views.publish

    def views_push(self,
    *,
    trigger_id: str | None = None,
    interactivity_pointer: str | None = None,
    view: dict | View,
    **kwargs) ‑> SlackResponse
    @@ -14127,9 +14209,9 @@

    Methods

    Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -14144,9 +14226,9 @@

    Methods

    Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. -Read the modals documentation (https://api.slack.com/surfaces/modals) +Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. -https://api.slack.com/methods/views.push

    +https://docs.slack.dev/reference/methods/views.push

    def views_update(self,
    *,
    view: dict | View,
    external_id: str | None = None,
    view_id: str | None = None,
    hash: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -14168,9 +14250,9 @@

    Methods

    """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -14190,9 +14272,119 @@

    Methods

    Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. -See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) +See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. -https://api.slack.com/methods/views.update

    +https://docs.slack.dev/reference/methods/views.update

    + +
    +
    +
    + +Expand source code + +
    def workflows_featured_add(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> SlackResponse:
    +    """Add featured workflows to a channel.
    +    https://docs.slack.dev/reference/methods/workflows.featured.add
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.add", params=kwargs)
    +
    + +
    + +
    +
    + +Expand source code + +
    def workflows_featured_list(
    +    self,
    +    *,
    +    channel_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> SlackResponse:
    +    """List the featured workflows for specified channels.
    +    https://docs.slack.dev/reference/methods/workflows.featured.list
    +    """
    +    if isinstance(channel_ids, (list, tuple)):
    +        kwargs.update({"channel_ids": ",".join(channel_ids)})
    +    else:
    +        kwargs.update({"channel_ids": channel_ids})
    +    return self.api_call("workflows.featured.list", params=kwargs)
    +
    +

    List the featured workflows for specified channels. +https://docs.slack.dev/reference/methods/workflows.featured.list

    +
    + +
    +
    + +Expand source code + +
    def workflows_featured_remove(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> SlackResponse:
    +    """Remove featured workflows from a channel.
    +    https://docs.slack.dev/reference/methods/workflows.featured.remove
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.remove", params=kwargs)
    +
    + +
    + +
    +
    + +Expand source code + +
    def workflows_featured_set(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> SlackResponse:
    +    """Set featured workflows for a channel.
    +    https://docs.slack.dev/reference/methods/workflows.featured.set
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.set", params=kwargs)
    +
    +
    def workflows_stepCompleted(self, *, workflow_step_execute_id: str, outputs: dict | None = None, **kwargs) ‑> SlackResponse @@ -14210,7 +14402,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -14220,7 +14412,7 @@

    Methods

    return self.api_call("workflows.stepCompleted", json=kwargs)

    Indicate a successful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepCompleted

    +https://docs.slack.dev/reference/methods/workflows.stepCompleted

    def workflows_stepFailed(self, *, workflow_step_execute_id: str, error: Dict[str, str], **kwargs) ‑> SlackResponse @@ -14238,7 +14430,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -14251,7 +14443,7 @@

    Methods

    return self.api_call("workflows.stepFailed", json=kwargs)

    Indicate an unsuccessful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepFailed

    +https://docs.slack.dev/reference/methods/workflows.stepFailed

    def workflows_updateStep(self,
    *,
    workflow_step_edit_id: str,
    inputs: Dict[str, Any] | None = None,
    outputs: List[Dict[str, str]] | None = None,
    **kwargs) ‑> SlackResponse
    @@ -14270,7 +14462,7 @@

    Methods

    **kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -14282,7 +14474,7 @@

    Methods

    return self.api_call("workflows.updateStep", json=kwargs)

    Update the configuration for a workflow extension step. -https://api.slack.com/methods/workflows.updateStep

    +https://docs.slack.dev/reference/methods/workflows.updateStep

    Inherited members

    @@ -14335,7 +14527,7 @@

    Inherited members

    ): """API client for Incoming Webhooks and `response_url` - https://api.slack.com/messaging/webhooks + https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/ Args: url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`) @@ -14554,19 +14746,19 @@

    Inherited members

    http_resp = opener.open(req, timeout=self.timeout) else: http_resp = urlopen(req, context=self.ssl, timeout=self.timeout) - charset: str = http_resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] - response_body: str = http_resp.read().decode(charset) # type: ignore[union-attr] + charset: str = http_resp.headers.get_content_charset() or "utf-8" + response_body: str = http_resp.read().decode(charset) resp = WebhookResponse( url=url, - status_code=http_resp.status, # type: ignore[union-attr] + status_code=http_resp.status, body=response_body, - headers=http_resp.headers, # type: ignore[arg-type, union-attr] + headers=http_resp.headers, # type: ignore[arg-type] ) _debug_log_response(self.logger, resp) return resp

    Ancestors

    • Action
    • @@ -161,8 +161,8 @@

      Inherited members

      class Action(JsonObject):
           """Action in attachments
      -    https://api.slack.com/messaging/composing/layouts#attachments
      -    https://api.slack.com/legacy/interactive-message-field-guide#message_action_fields
      +    https://docs.slack.dev/messaging/formatting-message-text/#rich-layouts
      +    https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#message_action_fields
           """
       
           attributes = {"name", "text", "url"}
      @@ -190,8 +190,8 @@ 

      Inherited members

      return json
      +https://docs.slack.dev/messaging/formatting-message-text/#rich-layouts +https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#message_action_fields

      Ancestors

      Class variables

      -
      var attributes
      +
      var attributes : Set[str]

      The type of the None singleton.

      @@ -990,7 +990,7 @@

      Inherited members

      def __init__(self, *, text: str, emoji: Optional[bool] = None): """A plain text object, meaning markdown characters will not be parsed as formatting information. - https://api.slack.com/reference/block-kit/composition-objects#text + https://docs.slack.dev/reference/block-kit/composition-objects/text-object Args: text (required): The text for the block. This field accepts any of the standard text formatting markup @@ -1013,7 +1013,7 @@

      Inherited members

      plain_text typed text object

      A plain text object, meaning markdown characters will not be parsed as formatting information. -https://api.slack.com/reference/block-kit/composition-objects#text

      +https://docs.slack.dev/reference/block-kit/composition-objects/text-object

      Args

      text : required
      @@ -1114,7 +1114,7 @@

      Inherited members

      url: Optional[str] = None, ): """An object containing Slack file information to be used in an image block or image element. - https://api.slack.com/reference/block-kit/composition-objects#slack_file + https://docs.slack.dev/reference/block-kit/composition-objects/slack-file-object Args: id: Slack ID of the file. @@ -1134,7 +1134,7 @@

      Inherited members

      The base class for JSON serializable class objects

      An object containing Slack file information to be used in an image block or image element. -https://api.slack.com/reference/block-kit/composition-objects#slack_file

      +https://docs.slack.dev/reference/block-kit/composition-objects/slack-file-object

      Args

      id
      diff --git a/docs/reference/models/blocks/block_elements.html b/docs/reference/models/blocks/block_elements.html index 1bdb0fb82..0e14eb433 100644 --- a/docs/reference/models/blocks/block_elements.html +++ b/docs/reference/models/blocks/block_elements.html @@ -57,7 +57,7 @@

      Classes

      class BlockElement(JsonObject, metaclass=ABCMeta):
           """Block Elements are things that exists inside of your Blocks.
      -    https://api.slack.com/reference/block-kit/block-elements
      +    https://docs.slack.dev/reference/block-kit/block-elements/
           """
       
           attributes = {"type"}
      @@ -119,7 +119,7 @@ 

      Classes

      yield from subclass._get_sub_block_elements()

      Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

      +https://docs.slack.dev/reference/block-kit/block-elements/

      Ancestors

      var UserGroup

      Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

      +https://docs.slack.dev/reference/block-kit/block-elements/

      @@ -5366,7 +5476,7 @@

      Class variables

      self.dispatch_action_config = dispatch_action_config

      Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

      +https://docs.slack.dev/reference/block-kit/block-elements/

      InteractiveElement that is usable in input blocks

      We generally recommend using the concrete subclasses for better supports of available properties.

      Ancestors

      @@ -5453,7 +5563,7 @@

      Inherited members

      self.border = border

      Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

      +https://docs.slack.dev/reference/block-kit/block-elements/

      Ancestors

      • RichTextElement
      • @@ -5524,7 +5634,7 @@

        Inherited members

        self.border = border

        Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

        +https://docs.slack.dev/reference/block-kit/block-elements/

        Ancestors

        • RichTextElement
        • @@ -5593,7 +5703,7 @@

          Inherited members

          self.elements = BlockElement.parse_all(elements)

          Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

          +https://docs.slack.dev/reference/block-kit/block-elements/

          Ancestors

          • RichTextElement
          • @@ -5662,7 +5772,7 @@

            Inherited members

            self.elements = BlockElement.parse_all(elements)

            Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

            +https://docs.slack.dev/reference/block-kit/block-elements/

            Ancestors

            • RichTextElement
            • @@ -5733,7 +5843,7 @@

              Inherited members

              **others: dict, ): """A section is one of the most flexible blocks available. - https://api.slack.com/reference/block-kit/blocks#section + https://docs.slack.dev/reference/block-kit/blocks/section-block Args: block_id (required): A string acting as a unique identifier for a block. @@ -5792,9 +5902,9 @@

              Inherited members

              Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. -https://api.slack.com/reference/block-kit/blocks

              +https://docs.slack.dev/reference/block-kit/blocks

              A section is one of the most flexible blocks available. -https://api.slack.com/reference/block-kit/blocks#section

              +https://docs.slack.dev/reference/block-kit/blocks/section-block

              Args

              block_id : required
              @@ -5901,7 +6011,7 @@

              Inherited members

              **others: dict, ): """This is the simplest form of select menu, with a static list of options passed in when defining the element. - https://api.slack.com/reference/block-kit/block-elements#static_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#static_select Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -5953,9 +6063,9 @@

              Inherited members

              return self.options is not None or self.option_groups is not None

              Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

              +https://docs.slack.dev/reference/block-kit/block-elements/

              This is the simplest form of select menu, with a static list of options passed in when defining the element. -https://api.slack.com/reference/block-kit/block-elements#static_select

              +https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#static_select

              Args

              action_id : required
              @@ -6069,7 +6179,7 @@

              Inherited members

              ): """ This is the simplest form of select menu, with a static list of options passed in when defining the element. - https://api.slack.com/reference/block-kit/block-elements#static_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#static_multi_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -6124,9 +6234,9 @@

              Inherited members

              return self.options is not None or self.option_groups is not None

              Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

              +https://docs.slack.dev/reference/block-kit/block-elements/

              This is the simplest form of select menu, with a static list of options passed in when defining the element. -https://api.slack.com/reference/block-kit/block-elements#static_multi_select

              +https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#static_multi_select

              Args

              placeholder : required
              @@ -6241,7 +6351,7 @@

              Inherited members

              **others: dict, ): """This is the simplest form of select menu, with a static list of options passed in when defining the element. - https://api.slack.com/reference/block-kit/block-elements#static_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#static_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -6293,9 +6403,9 @@

              Inherited members

              return self.options is not None or self.option_groups is not None

              Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

              +https://docs.slack.dev/reference/block-kit/block-elements/

              This is the simplest form of select menu, with a static list of options passed in when defining the element. -https://api.slack.com/reference/block-kit/block-elements#static_select

              +https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#static_select

              Args

              placeholder : required
              @@ -6533,7 +6643,7 @@

              Inherited members

              On desktop clients, this time picker will take the form of a dropdown list with free-text entry for precise choices. On mobile clients, the time picker will use native time picker UIs. - https://api.slack.com/reference/block-kit/block-elements#timepicker + https://docs.slack.dev/reference/block-kit/block-elements/time-picker-element Args: action_id (required): An identifier for the action triggered when a time is selected. @@ -6568,12 +6678,12 @@

              Inherited members

              return self.initial_time is None or re.match(r"([0-1][0-9]|2[0-3]):([0-5][0-9])", self.initial_time) is not None

              Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

              +https://docs.slack.dev/reference/block-kit/block-elements/

              An element which allows selection of a time of day. On desktop clients, this time picker will take the form of a dropdown list with free-text entry for precise choices. On mobile clients, the time picker will use native time picker UIs. -https://api.slack.com/reference/block-kit/block-elements#timepicker

              +https://docs.slack.dev/reference/block-kit/block-elements/time-picker-element

              Args

              action_id : required
              @@ -6675,7 +6785,7 @@

              Inherited members

              """ A URL input element, similar to the Plain-text input element, creates a single line field where a user can enter URL-encoded data. - https://api.slack.com/reference/block-kit/block-elements#url + https://docs.slack.dev/reference/block-kit/block-elements/url-input-element Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -6702,10 +6812,10 @@

              Inherited members

              self.dispatch_action_config = dispatch_action_config

              Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

              +https://docs.slack.dev/reference/block-kit/block-elements/

              A URL input element, similar to the Plain-text input element, creates a single line field where a user can enter URL-encoded data. -https://api.slack.com/reference/block-kit/block-elements#url

              +https://docs.slack.dev/reference/block-kit/block-elements/url-input-element

              Args

              action_id : required
              @@ -6804,7 +6914,7 @@

              Inherited members

              """ This select menu will populate its options with a list of Slack users visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#users_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#users_multi_select Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -6834,10 +6944,10 @@

              Inherited members

              self.max_selected_items = max_selected_items

              Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

              +https://docs.slack.dev/reference/block-kit/block-elements/

              This select menu will populate its options with a list of Slack users visible to the current user in the active workspace. -https://api.slack.com/reference/block-kit/block-elements#users_multi_select

              +https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#users_multi_select

              Args

              action_id : required
              @@ -6933,7 +7043,7 @@

              Inherited members

              """ This select menu will populate its options with a list of Slack users visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#users_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#users_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -6960,10 +7070,10 @@

              Inherited members

              self.initial_user = initial_user

              Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

              +https://docs.slack.dev/reference/block-kit/block-elements/

              This select menu will populate its options with a list of Slack users visible to the current user in the active workspace. -https://api.slack.com/reference/block-kit/block-elements#users_select

              +https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#users_select

              Args

              placeholder : required
              @@ -7076,7 +7186,7 @@

              Inherited members

              (e.g. link unfurls, messages, modals, App Home) — anywhere you can put blocks! To use the video block within your app, you must have the links.embed:write scope. - https://api.slack.com/reference/block-kit/blocks#video + https://docs.slack.dev/reference/block-kit/blocks/video-block Args: block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. @@ -7134,12 +7244,12 @@

              Inherited members

              Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. -https://api.slack.com/reference/block-kit/blocks

              +https://docs.slack.dev/reference/block-kit/blocks

              A video block is designed to embed videos in all app surfaces (e.g. link unfurls, messages, modals, App Home) — anywhere you can put blocks! To use the video block within your app, you must have the links.embed:write scope. -https://api.slack.com/reference/block-kit/blocks#video

              +https://docs.slack.dev/reference/block-kit/blocks/video-block

              Args

              block_id
              @@ -7465,6 +7575,14 @@

              LinkButtonElement

            • +

              MarkdownBlock

              + +
            • +
            • MarkdownTextObject

              • attributes
              • diff --git a/docs/reference/models/dialoags.html b/docs/reference/models/dialoags.html index 2657bdbe8..cc2ff46a2 100644 --- a/docs/reference/models/dialoags.html +++ b/docs/reference/models/dialoags.html @@ -247,7 +247,7 @@

                Inherited members

                Expand source code
                class DialogBuilder(JsonObject):
                -    attributes = {}  # type: ignore[assignment] # no attributes because to_dict has unique implementation
                +    attributes: Set[str] = set()
                 
                     _callback_id: Optional[str]
                     _elements: List[Union[DialogTextComponent, AbstractDialogSelector]]
                @@ -348,7 +348,7 @@ 

                Inherited members

                """ Text elements are single-line plain text fields. - https://api.slack.com/dialogs#attributes_text_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -403,7 +403,7 @@

                Inherited members

                character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#attributes_textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -456,7 +456,7 @@

                Inherited members

                A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -499,7 +499,7 @@

                Inherited members

                A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -542,7 +542,7 @@

                Inherited members

                assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -577,7 +577,7 @@

                Inherited members

                You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -613,7 +613,7 @@

                Inherited members

                private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -687,7 +687,7 @@

                Ancestors

              Class variables

              -
              var attributes
              +
              var attributes : Set[str]

              The type of the None singleton.

              @@ -772,7 +772,7 @@

              Args

              You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -796,7 +796,7 @@

              Args

              You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels

              -

              https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

              Args

              name
              @@ -835,7 +835,7 @@

              Args

              private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -860,7 +860,7 @@

              Args

              You can also provide a select menu with a list of conversations - including private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing.

              -

              https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

              Args

              name
              @@ -917,7 +917,7 @@

              Args

              A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -950,7 +950,7 @@

              Args

              a dropdown menu.

              A list of options can be loaded from an external URL and used in your dialog menus.

              -

              https://api.slack.com/dialogs#dynamic_select_elements_external

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external

              Args

              name
              @@ -1074,7 +1074,7 @@

              Args

              A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1104,7 +1104,7 @@

              Args

              a dropdown menu.

              A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects

              -

              https://api.slack.com/dialogs#attributes_select_elements

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements

              Args

              name
              @@ -1209,7 +1209,7 @@

              Args

              character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#attributes_textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1249,7 +1249,7 @@

              Args

              relatively long answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000.

              -

              https://api.slack.com/dialogs#attributes_textarea_elements

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements

              Args

              name
              @@ -1303,7 +1303,7 @@

              Args

              """ Text elements are single-line plain text fields. - https://api.slack.com/dialogs#attributes_text_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1339,7 +1339,7 @@

              Args

              return self

              Text elements are single-line plain text fields.

              -

              https://api.slack.com/dialogs#attributes_text_elements

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements

              Args

              name
              @@ -1445,7 +1445,7 @@

              Args

              assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -1471,7 +1471,7 @@

              Args

              when you are creating a bug tracking app, you want to include a field for an assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope.

              -

              https://api.slack.com/dialogs#dynamic_select_elements_users

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users

              Args

              name
              @@ -1525,7 +1525,7 @@

              Inherited members

              You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -1547,7 +1547,7 @@

              Inherited members

              The base class for JSON serializable class objects

              You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels

              -

              https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

              Args

              name
              @@ -1618,7 +1618,7 @@

              Inherited members

              private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -1641,7 +1641,7 @@

              Inherited members

              You can also provide a select menu with a list of conversations - including private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing.

              -

              https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

              Args

              name
              @@ -1720,7 +1720,7 @@

              Inherited members

              A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -1750,7 +1750,7 @@

              Inherited members

              a dropdown menu.

              A list of options can be loaded from an external URL and used in your dialog menus.

              -

              https://api.slack.com/dialogs#dynamic_select_elements_external

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external

              Args

              name
              @@ -1829,7 +1829,7 @@

              Inherited members

              single item from a list. True to web roots, this selection is displayed as a dropdown menu. - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements """ data_source = "static" @@ -1854,7 +1854,7 @@

              Inherited members

              A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1891,13 +1891,13 @@

              Inherited members

              Use the select element for multiple choice selections allowing users to pick a single item from a list. True to web roots, this selection is displayed as a dropdown menu.

              -

              https://api.slack.com/dialogs#select_elements

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#select_elements

              Use the select element for multiple choice selections allowing users to pick a single item from a list. True to web roots, this selection is displayed as a dropdown menu.

              A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects

              -

              https://api.slack.com/dialogs#attributes_select_elements

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements

              Args

              name
              @@ -1982,7 +1982,7 @@

              Inherited members

              answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#textarea_elements """ type = "textarea" @@ -1992,7 +1992,7 @@

              Inherited members

              these on the world wide web. Use this element if you want a relatively long answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000.

              -

              https://api.slack.com/dialogs#textarea_elements

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#textarea_elements

              Ancestors

              Ancestors

              • DialogTextComponent
              • @@ -2443,7 +2443,7 @@

                Inherited members

                assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -2467,7 +2467,7 @@

                Inherited members

                when you are creating a bug tracking app, you want to include a field for an assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope.

                -

                https://api.slack.com/dialogs#dynamic_select_elements_users

                +

                https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users

                Args

                name
                diff --git a/docs/reference/models/dialogs/index.html b/docs/reference/models/dialogs/index.html index d077673e1..e0c6fe457 100644 --- a/docs/reference/models/dialogs/index.html +++ b/docs/reference/models/dialogs/index.html @@ -247,7 +247,7 @@

                Inherited members

                Expand source code
                class DialogBuilder(JsonObject):
                -    attributes = {}  # type: ignore[assignment] # no attributes because to_dict has unique implementation
                +    attributes: Set[str] = set()
                 
                     _callback_id: Optional[str]
                     _elements: List[Union[DialogTextComponent, AbstractDialogSelector]]
                @@ -348,7 +348,7 @@ 

                Inherited members

                """ Text elements are single-line plain text fields. - https://api.slack.com/dialogs#attributes_text_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -403,7 +403,7 @@

                Inherited members

                character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#attributes_textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -456,7 +456,7 @@

                Inherited members

                A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -499,7 +499,7 @@

                Inherited members

                A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -542,7 +542,7 @@

                Inherited members

                assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -577,7 +577,7 @@

                Inherited members

                You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -613,7 +613,7 @@

                Inherited members

                private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -687,7 +687,7 @@

                Ancestors

              Class variables

              -
              var attributes
              +
              var attributes : Set[str]

              The type of the None singleton.

              @@ -772,7 +772,7 @@

              Args

              You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -796,7 +796,7 @@

              Args

              You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels

              -

              https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

              Args

              name
              @@ -835,7 +835,7 @@

              Args

              private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -860,7 +860,7 @@

              Args

              You can also provide a select menu with a list of conversations - including private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing.

              -

              https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

              Args

              name
              @@ -917,7 +917,7 @@

              Args

              A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -950,7 +950,7 @@

              Args

              a dropdown menu.

              A list of options can be loaded from an external URL and used in your dialog menus.

              -

              https://api.slack.com/dialogs#dynamic_select_elements_external

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external

              Args

              name
              @@ -1074,7 +1074,7 @@

              Args

              A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1104,7 +1104,7 @@

              Args

              a dropdown menu.

              A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects

              -

              https://api.slack.com/dialogs#attributes_select_elements

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements

              Args

              name
              @@ -1209,7 +1209,7 @@

              Args

              character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#attributes_textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1249,7 +1249,7 @@

              Args

              relatively long answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000.

              -

              https://api.slack.com/dialogs#attributes_textarea_elements

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements

              Args

              name
              @@ -1303,7 +1303,7 @@

              Args

              """ Text elements are single-line plain text fields. - https://api.slack.com/dialogs#attributes_text_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1339,7 +1339,7 @@

              Args

              return self

              Text elements are single-line plain text fields.

              -

              https://api.slack.com/dialogs#attributes_text_elements

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements

              Args

              name
              @@ -1445,7 +1445,7 @@

              Args

              assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -1471,7 +1471,7 @@

              Args

              when you are creating a bug tracking app, you want to include a field for an assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope.

              -

              https://api.slack.com/dialogs#dynamic_select_elements_users

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users

              Args

              name
              @@ -1525,7 +1525,7 @@

              Inherited members

              You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -1547,7 +1547,7 @@

              Inherited members

              The base class for JSON serializable class objects

              You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels

              -

              https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

              Args

              name
              @@ -1618,7 +1618,7 @@

              Inherited members

              private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -1641,7 +1641,7 @@

              Inherited members

              You can also provide a select menu with a list of conversations - including private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing.

              -

              https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

              Args

              name
              @@ -1720,7 +1720,7 @@

              Inherited members

              A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -1750,7 +1750,7 @@

              Inherited members

              a dropdown menu.

              A list of options can be loaded from an external URL and used in your dialog menus.

              -

              https://api.slack.com/dialogs#dynamic_select_elements_external

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external

              Args

              name
              @@ -1829,7 +1829,7 @@

              Inherited members

              single item from a list. True to web roots, this selection is displayed as a dropdown menu. - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements """ data_source = "static" @@ -1854,7 +1854,7 @@

              Inherited members

              A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1891,13 +1891,13 @@

              Inherited members

              Use the select element for multiple choice selections allowing users to pick a single item from a list. True to web roots, this selection is displayed as a dropdown menu.

              -

              https://api.slack.com/dialogs#select_elements

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#select_elements

              Use the select element for multiple choice selections allowing users to pick a single item from a list. True to web roots, this selection is displayed as a dropdown menu.

              A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects

              -

              https://api.slack.com/dialogs#attributes_select_elements

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements

              Args

              name
              @@ -1982,7 +1982,7 @@

              Inherited members

              answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#textarea_elements """ type = "textarea" @@ -1992,7 +1992,7 @@

              Inherited members

              these on the world wide web. Use this element if you want a relatively long answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000.

              -

              https://api.slack.com/dialogs#textarea_elements

              +

              https://docs.slack.dev/legacy/legacy-dialogs/#textarea_elements

              Ancestors

              Ancestors

              • DialogTextComponent
              • @@ -2443,7 +2443,7 @@

                Inherited members

                assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -2467,7 +2467,7 @@

                Inherited members

                when you are creating a bug tracking app, you want to include a field for an assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope.

                -

                https://api.slack.com/dialogs#dynamic_select_elements_users

                +

                https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users

                Args

                name
                diff --git a/docs/reference/models/messages/index.html b/docs/reference/models/messages/index.html index b741a9eb7..5d10ced1c 100644 --- a/docs/reference/models/messages/index.html +++ b/docs/reference/models/messages/index.html @@ -64,13 +64,13 @@

                Classes

                class ChannelLink(Link):
                     def __init__(self):
                         """Represents an @channel link, which notifies everyone present in this channel.
                -        https://api.slack.com/reference/surfaces/formatting
                +        https://docs.slack.dev/messaging/formatting-message-text/
                         """
                         super().__init__(url="!channel", text="channel")

                The base class for all model objects in this module

                Represents an @channel link, which notifies everyone present in this channel. -https://api.slack.com/reference/surfaces/formatting

                +https://docs.slack.dev/messaging/formatting-message-text/

              Ancestors

              • Link
              • @@ -96,7 +96,7 @@

                Ancestors

                link: Optional[str] = None, ): """Text containing a date or time should display that date in the local timezone of the person seeing the text. - https://api.slack.com/reference/surfaces/formatting#date-formatting + https://docs.slack.dev/messaging/formatting-message-text/#date-formatting """ if isinstance(date, datetime): epoch = int(date.timestamp()) @@ -110,7 +110,7 @@

                Ancestors

                The base class for all model objects in this module

                Text containing a date or time should display that date in the local timezone of the person seeing the text. -https://api.slack.com/reference/surfaces/formatting#date-formatting

                +https://docs.slack.dev/messaging/formatting-message-text/#date-formatting

              Ancestors

              • Link
              • @@ -128,13 +128,13 @@

                Ancestors

                class EveryoneLink(Link):
                     def __init__(self):
                         """Represents an @everyone link, which notifies all users of this workspace.
                -        https://api.slack.com/reference/surfaces/formatting
                +        https://docs.slack.dev/messaging/formatting-message-text/
                         """
                         super().__init__(url="!everyone", text="everyone")

                The base class for all model objects in this module

                Represents an @everyone link, which notifies all users of this workspace. -https://api.slack.com/reference/surfaces/formatting

                +https://docs.slack.dev/messaging/formatting-message-text/

              Ancestors

              Ancestors

            • Ancestors

              Ancestors

              • Link
              • diff --git a/docs/reference/models/messages/message.html b/docs/reference/models/messages/message.html index d32a7d02d..6a7e7a85a 100644 --- a/docs/reference/models/messages/message.html +++ b/docs/reference/models/messages/message.html @@ -71,7 +71,7 @@

                Classes

                """ Create a message. - https://api.slack.com/messaging/composing#message-structure + https://docs.slack.dev/messaging/#message-structure Args: text: Plain or Slack Markdown-like text to display in the message. @@ -114,7 +114,7 @@

                Classes

                The base class for JSON serializable class objects

                Create a message.

                -

                https://api.slack.com/messaging/composing#message-structure

                +

                https://docs.slack.dev/messaging/#message-structure

                Args

                text
                diff --git a/docs/reference/models/metadata/index.html b/docs/reference/models/metadata/index.html index 3d09686bb..14663e790 100644 --- a/docs/reference/models/metadata/index.html +++ b/docs/reference/models/metadata/index.html @@ -58,7 +58,7 @@

                Classes

                class Metadata(JsonObject):
                     """Message metadata
                 
                -    https://api.slack.com/metadata
                +    https://docs.slack.dev/messaging/message-metadata/
                     """
                 
                     attributes = {
                @@ -83,7 +83,7 @@ 

                Classes

                return self.__str__()
                +

                https://docs.slack.dev/messaging/message-metadata/

                Ancestors

                • JsonObject
                • diff --git a/docs/reference/models/views/index.html b/docs/reference/models/views/index.html index e384f561f..d9e60359b 100644 --- a/docs/reference/models/views/index.html +++ b/docs/reference/models/views/index.html @@ -58,7 +58,7 @@

                  Classes

                  class View(JsonObject):
                       """View object for modals and Home tabs.
                   
                  -    https://api.slack.com/reference/surfaces/views
                  +    https://docs.slack.dev/reference/views/
                       """
                   
                       types = ["modal", "home", "workflow_step"]
                  @@ -175,7 +175,7 @@ 

                  Classes

                  return self.__str__()

                  View object for modals and Home tabs.

                  -

                  https://api.slack.com/reference/surfaces/views

                  +

                  https://docs.slack.dev/reference/views/

              Ancestors

              • JsonObject
              • diff --git a/docs/reference/oauth/index.html b/docs/reference/oauth/index.html index be3e64d78..8fe69e5d0 100644 --- a/docs/reference/oauth/index.html +++ b/docs/reference/oauth/index.html @@ -37,7 +37,7 @@

                Module slack_sdk.oauth

                Modules for implementing the Slack OAuth flow

                -

                https://slack.dev/python-slack-sdk/oauth/

                +

                https://docs.slack.dev/tools/python-slack-sdk/oauth

                Sub-modules

                diff --git a/docs/reference/oauth/installation_store/async_cacheable_installation_store.html b/docs/reference/oauth/installation_store/async_cacheable_installation_store.html index 100c62c4a..a38205174 100644 --- a/docs/reference/oauth/installation_store/async_cacheable_installation_store.html +++ b/docs/reference/oauth/installation_store/async_cacheable_installation_store.html @@ -74,7 +74,7 @@

                Classes

                def logger(self) -> Logger: return self.underlying.logger - async def async_save(self, installation: Installation): # type: ignore[explicit-override] + async def async_save(self, installation: Installation): # Invalidate cache data for update operations key = f"{installation.enterprise_id or ''}-{installation.team_id or ''}" if key in self.cached_bots: @@ -84,14 +84,14 @@

                Classes

                self.cached_installations.pop(key) return await self.underlying.async_save(installation) - async def async_save_bot(self, bot: Bot): # type: ignore[explicit-override] + async def async_save_bot(self, bot: Bot): # Invalidate cache data for update operations key = f"{bot.enterprise_id or ''}-{bot.team_id or ''}" if key in self.cached_bots: self.cached_bots.pop(key) return await self.underlying.async_save_bot(bot) - async def async_find_bot( # type: ignore[explicit-override] + async def async_find_bot( self, *, enterprise_id: Optional[str], @@ -112,7 +112,7 @@

                Classes

                self.cached_bots[key] = bot return bot - async def async_find_installation( # type: ignore[explicit-override] + async def async_find_installation( self, *, enterprise_id: Optional[str], diff --git a/docs/reference/oauth/installation_store/cacheable_installation_store.html b/docs/reference/oauth/installation_store/cacheable_installation_store.html index 5e2802f11..54bb7662d 100644 --- a/docs/reference/oauth/installation_store/cacheable_installation_store.html +++ b/docs/reference/oauth/installation_store/cacheable_installation_store.html @@ -74,7 +74,7 @@

                Classes

                def logger(self) -> Logger: return self.underlying.logger - def save(self, installation: Installation): # type: ignore[explicit-override] + def save(self, installation: Installation): # Invalidate cache data for update operations key = f"{installation.enterprise_id or ''}-{installation.team_id or ''}" if key in self.cached_bots: @@ -85,14 +85,14 @@

                Classes

                return self.underlying.save(installation) - def save_bot(self, bot: Bot): # type: ignore[explicit-override] + def save_bot(self, bot: Bot): # Invalidate cache data for update operations key = f"{bot.enterprise_id or ''}-{bot.team_id or ''}" if key in self.cached_bots: self.cached_bots.pop(key) return self.underlying.save_bot(bot) - def find_bot( # type: ignore[explicit-override] + def find_bot( self, *, enterprise_id: Optional[str], @@ -113,7 +113,7 @@

                Classes

                self.cached_bots[key] = bot return bot - def find_installation( # type: ignore[explicit-override] + def find_installation( self, *, enterprise_id: Optional[str], diff --git a/docs/reference/oauth/installation_store/installation_store.html b/docs/reference/oauth/installation_store/installation_store.html index 0ecdef730..86533f424 100644 --- a/docs/reference/oauth/installation_store/installation_store.html +++ b/docs/reference/oauth/installation_store/installation_store.html @@ -37,7 +37,7 @@

                Module slack_sdk.oauth.installation_store.installation_s

                Slack installation data store

                -

                Refer to https://slack.dev/python-slack-sdk/oauth/ for details.

                +

                Refer to https://docs.slack.dev/tools/python-slack-sdk/oauth for details.

                diff --git a/docs/reference/oauth/state_store/index.html b/docs/reference/oauth/state_store/index.html index efb7d1cfe..3f0c18327 100644 --- a/docs/reference/oauth/state_store/index.html +++ b/docs/reference/oauth/state_store/index.html @@ -37,7 +37,7 @@

                Module slack_sdk.oauth.state_store

                OAuth state parameter data store

                -

                Refer to https://slack.dev/python-slack-sdk/oauth/ for details.

                +

                Refer to https://docs.slack.dev/tools/python-slack-sdk/oauth for details.

                Sub-modules

                diff --git a/docs/reference/scim/async_client.html b/docs/reference/scim/async_client.html index b4d0f3fd4..426ca9299 100644 --- a/docs/reference/scim/async_client.html +++ b/docs/reference/scim/async_client.html @@ -87,7 +87,7 @@

                Classes

                retry_handlers: Optional[List[AsyncRetryHandler]] = None, ): """API client for SCIM API - See https://api.slack.com/scim for more details + See https://docs.slack.dev/admins/scim-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -416,7 +416,7 @@

                Classes

                return resp

                API client for SCIM API -See https://api.slack.com/scim for more details

                +See https://docs.slack.dev/admins/scim-api/ for more details

                Args

                token
                diff --git a/docs/reference/scim/index.html b/docs/reference/scim/index.html index 150a46b70..1e6e1e228 100644 --- a/docs/reference/scim/index.html +++ b/docs/reference/scim/index.html @@ -40,7 +40,7 @@

                Module slack_sdk.scim

                SCIM API is a set of APIs for provisioning and managing user accounts and groups. SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack.

                -

                Refer to https://slack.dev/python-slack-sdk/scim/ for details.

                +

                Refer to https://docs.slack.dev/tools/python-slack-sdk/scim for details.

                Sub-modules

                @@ -301,7 +301,7 @@

                Inherited members

                retry_handlers: Optional[List[RetryHandler]] = None, ): """API client for SCIM API - See https://api.slack.com/scim for more details + See https://docs.slack.dev/admins/scim-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -646,7 +646,7 @@

                Inherited members

                return resp

                API client for SCIM API -See https://api.slack.com/scim for more details

                +See https://docs.slack.dev/admins/scim-api/ for more details

                Args

                token
                diff --git a/docs/reference/scim/v1/async_client.html b/docs/reference/scim/v1/async_client.html index b8b9b9b5b..59fb723f3 100644 --- a/docs/reference/scim/v1/async_client.html +++ b/docs/reference/scim/v1/async_client.html @@ -87,7 +87,7 @@

                Classes

                retry_handlers: Optional[List[AsyncRetryHandler]] = None, ): """API client for SCIM API - See https://api.slack.com/scim for more details + See https://docs.slack.dev/admins/scim-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -416,7 +416,7 @@

                Classes

                return resp

                API client for SCIM API -See https://api.slack.com/scim for more details

                +See https://docs.slack.dev/admins/scim-api/ for more details

                Args

                token
                diff --git a/docs/reference/scim/v1/client.html b/docs/reference/scim/v1/client.html index 2c51a0776..4317f2394 100644 --- a/docs/reference/scim/v1/client.html +++ b/docs/reference/scim/v1/client.html @@ -40,7 +40,7 @@

                Module slack_sdk.scim.v1.client

                SCIM API is a set of APIs for provisioning and managing user accounts and groups. SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack.

                -

                Refer to https://slack.dev/python-slack-sdk/scim/ for details.

                +

                Refer to https://docs.slack.dev/tools/python-slack-sdk/scim/ for details.

                @@ -86,7 +86,7 @@

                Classes

                retry_handlers: Optional[List[RetryHandler]] = None, ): """API client for SCIM API - See https://api.slack.com/scim for more details + See https://docs.slack.dev/admins/scim-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -431,7 +431,7 @@

                Classes

                return resp

                API client for SCIM API -See https://api.slack.com/scim for more details

                +See https://docs.slack.dev/admins/scim-api/ for more details

                Args

                token
                diff --git a/docs/reference/scim/v1/index.html b/docs/reference/scim/v1/index.html index 5ce46dba3..2cbda3da0 100644 --- a/docs/reference/scim/v1/index.html +++ b/docs/reference/scim/v1/index.html @@ -40,7 +40,7 @@

                Module slack_sdk.scim.v1

                SCIM API is a set of APIs for provisioning and managing user accounts and groups. SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack.

                -

                Refer to https://slack.dev/python-slack-sdk/scim/ for details.

                +

                Refer to https://docs.slack.dev/tools/python-slack-sdk/scim for details.

                Sub-modules

                diff --git a/docs/reference/signature/index.html b/docs/reference/signature/index.html index 690f66ae0..ecc1f0831 100644 --- a/docs/reference/signature/index.html +++ b/docs/reference/signature/index.html @@ -93,7 +93,7 @@

                Methods

                Slack signs its requests using a secret that's unique to your app. With the help of signing secrets, your app can more confidently verify whether requests from us are authentic. - https://api.slack.com/authentication/verifying-requests-from-slack + https://docs.slack.dev/authentication/verifying-requests-from-slack/ """ self.signing_secret = signing_secret self.clock = clock @@ -150,7 +150,7 @@

                Methods

                Slack signs its requests using a secret that's unique to your app. With the help of signing secrets, your app can more confidently verify whether requests from us are authentic. -https://api.slack.com/authentication/verifying-requests-from-slack

              +https://docs.slack.dev/authentication/verifying-requests-from-slack/

              Methods

              diff --git a/docs/reference/socket_mode/aiohttp/index.html b/docs/reference/socket_mode/aiohttp/index.html index e2a12fde4..92c6225c1 100644 --- a/docs/reference/socket_mode/aiohttp/index.html +++ b/docs/reference/socket_mode/aiohttp/index.html @@ -38,8 +38,8 @@

              Module slack_sdk.socket_mode.aiohttp

              aiohttp based Socket Mode client

              diff --git a/docs/reference/socket_mode/builtin/client.html b/docs/reference/socket_mode/builtin/client.html index fbf3f7525..8e55f2347 100644 --- a/docs/reference/socket_mode/builtin/client.html +++ b/docs/reference/socket_mode/builtin/client.html @@ -38,8 +38,8 @@

              Module slack_sdk.socket_mode.builtin.client

              The built-in Socket Mode client

              diff --git a/docs/reference/socket_mode/client.html b/docs/reference/socket_mode/client.html index dda047bd6..3c8c615f9 100644 --- a/docs/reference/socket_mode/client.html +++ b/docs/reference/socket_mode/client.html @@ -167,7 +167,7 @@

              Classes

              for listener in self.message_listeners: try: - listener(self, message, raw_message) # type: ignore[call-arg, arg-type] + listener(self, message, raw_message) # type: ignore[call-arg, arg-type, misc] except Exception as e: self.logger.exception(f"Failed to run a message listener: {e}") @@ -431,7 +431,7 @@

              Methods

              for listener in self.message_listeners: try: - listener(self, message, raw_message) # type: ignore[call-arg, arg-type] + listener(self, message, raw_message) # type: ignore[call-arg, arg-type, misc] except Exception as e: self.logger.exception(f"Failed to run a message listener: {e}") diff --git a/docs/reference/socket_mode/index.html b/docs/reference/socket_mode/index.html index a9bffd89e..381e969e5 100644 --- a/docs/reference/socket_mode/index.html +++ b/docs/reference/socket_mode/index.html @@ -40,7 +40,7 @@

              Module slack_sdk.socket_mode

              Socket Mode is a method of connecting your app to Slack’s APIs using WebSockets instead of HTTP. You can use slack_sdk.socket_mode.SocketModeClient for managing Socket Mode connections and performing interactions with Slack.

              -

              https://api.slack.com/apis/connections/socket

              +

              https://docs.slack.dev/apis/events-api/using-socket-mode/

              Sub-modules

              diff --git a/docs/reference/socket_mode/websocket_client/index.html b/docs/reference/socket_mode/websocket_client/index.html index 20a1f0ac5..fe43e29b1 100644 --- a/docs/reference/socket_mode/websocket_client/index.html +++ b/docs/reference/socket_mode/websocket_client/index.html @@ -38,8 +38,8 @@

              Module slack_sdk.socket_mode.websocket_client

              websocket-client bassd Socket Mode client

              @@ -91,7 +91,7 @@

              Classes

              auto_reconnect_enabled: bool default_auto_reconnect_enabled: bool - close: bool # type: ignore[assignment] + closed: bool connect_operation_lock: Lock on_open_listeners: List[Callable[[WebSocketApp], None]] @@ -258,7 +258,7 @@

              Classes

              ) raise e - def close(self) -> None: # type: ignore[explicit-override, no-redef] + def close(self) -> None: self.closed = True self.auto_reconnect_enabled = False self.disconnect() @@ -384,7 +384,7 @@

              Methods

              Expand source code -
              def close(self) -> None:  # type: ignore[explicit-override, no-redef]
              +
              def close(self) -> None:
                   self.closed = True
                   self.auto_reconnect_enabled = False
                   self.disconnect()
              diff --git a/docs/reference/socket_mode/websockets/index.html b/docs/reference/socket_mode/websockets/index.html
              index 792c28fb5..e38594eee 100644
              --- a/docs/reference/socket_mode/websockets/index.html
              +++ b/docs/reference/socket_mode/websockets/index.html
              @@ -38,8 +38,8 @@ 

              Module slack_sdk.socket_mode.websockets

              websockets bassd Socket Mode client

              diff --git a/docs/reference/web/async_client.html b/docs/reference/web/async_client.html index 86403ce5d..430319ea6 100644 --- a/docs/reference/web/async_client.html +++ b/docs/reference/web/async_client.html @@ -59,7 +59,7 @@

              Classes

              class AsyncWebClient(AsyncBaseClient):
                   """A WebClient allows apps to communicate with the Slack Platform's Web API.
               
              -    https://api.slack.com/methods
              +    https://docs.slack.dev/reference/methods
               
                   The Slack Web API is an interface for querying information from
                   and enacting change in a Slack workspace.
              @@ -130,7 +130,7 @@ 

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -152,7 +152,7 @@

              Classes

              Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -179,7 +179,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -200,7 +200,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -220,7 +220,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -240,7 +240,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -264,7 +264,7 @@

              Classes

              Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -291,7 +291,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -313,7 +313,7 @@

              Classes

              ) -> AsyncSlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -344,7 +344,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -372,7 +372,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -389,7 +389,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -411,7 +411,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -431,7 +431,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -450,7 +450,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -469,7 +469,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -485,7 +485,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -504,7 +504,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -523,7 +523,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -543,7 +543,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return await self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -558,7 +558,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -579,7 +579,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -599,7 +599,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -619,7 +619,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.delete", params=kwargs) @@ -632,7 +632,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -649,7 +649,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.archive", params=kwargs) @@ -661,7 +661,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.unarchive", params=kwargs) @@ -674,7 +674,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return await self.api_call("admin.conversations.rename", params=kwargs) @@ -692,7 +692,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -723,7 +723,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -735,7 +735,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -748,7 +748,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -764,7 +764,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -777,7 +777,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -797,7 +797,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -825,7 +825,7 @@

              Classes

              """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -852,7 +852,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -875,7 +875,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -898,7 +898,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -923,7 +923,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -947,7 +947,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -965,7 +965,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -977,7 +977,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -990,7 +990,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return await self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -1002,7 +1002,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return await self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -1027,7 +1027,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -1045,7 +1045,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return await self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1058,7 +1058,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return await self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1071,7 +1071,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return await self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1083,7 +1083,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return await self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1096,7 +1096,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return await self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1111,7 +1111,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1134,7 +1134,7 @@

              Classes

              ) -> AsyncSlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1152,7 +1152,7 @@

              Classes

              ) -> AsyncSlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1176,7 +1176,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1201,7 +1201,7 @@

              Classes

              ) -> AsyncSlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1223,7 +1223,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1245,7 +1245,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1265,7 +1265,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1287,7 +1287,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return await self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1302,7 +1302,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1322,7 +1322,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1339,7 +1339,7 @@

              Classes

              ) -> AsyncSlackResponse: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1357,7 +1357,7 @@

              Classes

              ) -> AsyncSlackResponse: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1379,7 +1379,7 @@

              Classes

              ) -> AsyncSlackResponse: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1396,7 +1396,7 @@

              Classes

              ) -> AsyncSlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1414,7 +1414,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return await self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1428,7 +1428,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1448,7 +1448,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1467,7 +1467,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return await self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1488,7 +1488,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1509,7 +1509,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1529,7 +1529,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return await self.api_call("admin.teams.list", params=kwargs) @@ -1543,7 +1543,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return await self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1555,7 +1555,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return await self.api_call("admin.teams.settings.info", params=kwargs) @@ -1568,7 +1568,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return await self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1581,7 +1581,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return await self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1594,7 +1594,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return await self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1607,7 +1607,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return await self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1621,7 +1621,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1639,7 +1639,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1657,7 +1657,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1676,7 +1676,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1696,7 +1696,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1728,7 +1728,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1752,7 +1752,7 @@

              Classes

              async def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -1760,7 +1760,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1781,7 +1781,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.remove", params=kwargs) @@ -1794,7 +1794,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setAdmin", params=kwargs) @@ -1808,7 +1808,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setExpiration", params=kwargs) @@ -1821,7 +1821,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setOwner", params=kwargs) @@ -1834,7 +1834,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setRegular", params=kwargs) @@ -1855,7 +1855,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1885,7 +1885,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1906,7 +1906,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1926,7 +1926,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1945,7 +1945,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1960,7 +1960,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return await self.api_call("api.test", params=kwargs) @@ -1973,7 +1973,7 @@

              Classes

              ) -> AsyncSlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return await self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -1988,7 +1988,7 @@

              Classes

              ) -> AsyncSlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return await self.api_call("apps.event.authorizations.list", params=kwargs) @@ -2001,7 +2001,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return await self.api_call("apps.uninstall", params=kwargs) @@ -2013,7 +2013,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2028,7 +2028,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return await self.api_call("apps.manifest.delete", params=kwargs) @@ -2040,7 +2040,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return await self.api_call("apps.manifest.export", params=kwargs) @@ -2053,7 +2053,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2070,7 +2070,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2086,7 +2086,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return await self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2100,7 +2100,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return await self.api_call("assistant.threads.setStatus", params=kwargs) @@ -2114,7 +2114,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return await self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2129,7 +2129,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2143,7 +2143,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return await self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2153,7 +2153,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return await self.api_call("auth.test", params=kwargs) @@ -2165,7 +2165,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return await self.api_call("auth.teams.list", params=kwargs) @@ -2183,7 +2183,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2209,7 +2209,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2229,7 +2229,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return await self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2242,7 +2242,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return await self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2255,7 +2255,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return await self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2274,7 +2274,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2301,7 +2301,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return await self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2313,7 +2313,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return await self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2326,7 +2326,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2340,7 +2340,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2356,7 +2356,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2376,7 +2376,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return await self.api_call("canvases.create", json=kwargs) @@ -2389,7 +2389,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return await self.api_call("canvases.edit", json=kwargs) @@ -2401,7 +2401,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return await self.api_call("canvases.delete", params=kwargs) @@ -2416,7 +2416,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2441,7 +2441,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2464,7 +2464,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return await self.api_call("canvases.sections.lookup", params=kwargs) @@ -2472,7 +2472,7 @@

              Classes

              # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def channels_archive( @@ -2651,7 +2651,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return await self.api_call("chat.delete", params=kwargs) @@ -2665,7 +2665,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2684,7 +2684,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return await self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2697,7 +2697,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return await self.api_call("chat.meMessage", params=kwargs) @@ -2717,10 +2717,11 @@

              Classes

              link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2736,11 +2737,12 @@

              Classes

              "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postEphemeral", json=kwargs) @@ -2764,10 +2766,11 @@

              Classes

              username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2788,11 +2791,12 @@

              Classes

              "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postMessage", json=kwargs) @@ -2801,7 +2805,7 @@

              Classes

              *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2812,10 +2816,11 @@

              Classes

              unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2832,11 +2837,12 @@

              Classes

              "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.scheduleMessage", json=kwargs) @@ -2855,7 +2861,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2889,10 +2895,11 @@

              Classes

              parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2906,6 +2913,7 @@

              Classes

              "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2914,7 +2922,7 @@

              Classes

              kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return await self.api_call("chat.update", json=kwargs) @@ -2930,7 +2938,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -2956,7 +2964,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -2980,7 +2988,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return await self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -2992,7 +3000,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return await self.api_call("conversations.archive", params=kwargs) @@ -3004,7 +3012,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return await self.api_call("conversations.close", params=kwargs) @@ -3018,7 +3026,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return await self.api_call("conversations.create", params=kwargs) @@ -3031,7 +3039,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return await self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -3040,7 +3048,7 @@

              Classes

              self, *, action: str, channel: str, target_team: str, **kwargs ) -> AsyncSlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3064,7 +3072,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3088,7 +3096,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3108,7 +3116,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3131,7 +3139,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3153,7 +3161,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return await self.api_call("conversations.join", params=kwargs) @@ -3166,7 +3174,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return await self.api_call("conversations.kick", params=kwargs) @@ -3178,7 +3186,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return await self.api_call("conversations.leave", params=kwargs) @@ -3194,7 +3202,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3220,7 +3228,7 @@

              Classes

              ) -> AsyncSlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return await self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3233,7 +3241,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return await self.api_call("conversations.mark", params=kwargs) @@ -3247,7 +3255,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return await self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3261,7 +3269,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3280,7 +3288,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return await self.api_call("conversations.rename", params=kwargs) @@ -3299,7 +3307,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3325,7 +3333,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3346,7 +3354,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return await self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3364,7 +3372,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3391,7 +3399,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return await self.api_call("conversations.setPurpose", params=kwargs) @@ -3404,7 +3412,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return await self.api_call("conversations.setTopic", params=kwargs) @@ -3416,7 +3424,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return await self.api_call("conversations.unarchive", params=kwargs) @@ -3429,7 +3437,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return await self.api_call("conversations.canvases.create", json=kwargs) @@ -3442,7 +3450,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3454,7 +3462,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return await self.api_call("dnd.endDnd", params=kwargs) @@ -3463,7 +3471,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return await self.api_call("dnd.endSnooze", params=kwargs) @@ -3475,7 +3483,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return await self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3487,7 +3495,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return await self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3499,7 +3507,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3514,7 +3522,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return await self.api_call("emoji.list", http_verb="GET", params=kwargs) @@ -3527,7 +3535,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return await self.api_call("files.comments.delete", params=kwargs) @@ -3539,7 +3547,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return await self.api_call("files.delete", params=kwargs) @@ -3555,7 +3563,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3583,7 +3591,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3611,7 +3619,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return await self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3627,7 +3635,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3652,7 +3660,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3691,7 +3699,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3726,7 +3734,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return await self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3740,7 +3748,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3758,7 +3766,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return await self.api_call("files.revokePublicURL", params=kwargs) @@ -3770,7 +3778,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return await self.api_call("files.sharedPublicURL", params=kwargs) @@ -3789,7 +3797,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3842,12 +3850,12 @@

              Classes

              ) -> AsyncSlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3933,7 +3941,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -3956,7 +3964,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -3979,7 +3987,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return await self.api_call("functions.completeSuccess", params=kwargs) @@ -3992,7 +4000,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return await self.api_call("functions.completeError", params=kwargs) @@ -4000,7 +4008,7 @@

              Classes

              # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def groups_archive( @@ -4181,7 +4189,7 @@

              Classes

              # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def im_close( @@ -4257,7 +4265,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4269,7 +4277,7 @@

              Classes

              # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def mpim_close( @@ -4356,7 +4364,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4382,7 +4390,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4402,7 +4410,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return await self.api_call("oauth.v2.exchange", params=kwargs) @@ -4418,7 +4426,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4439,7 +4447,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return await self.api_call("openid.connect.userInfo", params=kwargs) @@ -4451,7 +4459,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return await self.api_call("pins.add", params=kwargs) @@ -4463,7 +4471,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return await self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4476,7 +4484,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return await self.api_call("pins.remove", params=kwargs) @@ -4490,7 +4498,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return await self.api_call("reactions.add", params=kwargs) @@ -4506,7 +4514,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4532,7 +4540,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4558,7 +4566,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4582,7 +4590,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4603,7 +4611,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.complete", params=kwargs) @@ -4616,7 +4624,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.delete", params=kwargs) @@ -4629,7 +4637,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4641,7 +4649,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return await self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4654,7 +4662,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return await self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4672,7 +4680,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4700,7 +4708,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4728,7 +4736,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4757,7 +4765,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4783,7 +4791,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -4806,7 +4814,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -4829,7 +4837,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -4853,7 +4861,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -4875,7 +4883,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return await self.api_call("team.billableInfo", http_verb="GET", params=kwargs) @@ -4885,7 +4893,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return await self.api_call("team.billing.info", params=kwargs) @@ -4896,7 +4904,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -4918,7 +4926,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4949,7 +4957,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return await self.api_call("team.info", http_verb="GET", params=kwargs) @@ -4967,7 +4975,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -4989,7 +4997,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return await self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -4999,7 +5007,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return await self.api_call("team.preferences.list", params=kwargs) @@ -5015,7 +5023,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -5041,7 +5049,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return await self.api_call("usergroups.disable", params=kwargs) @@ -5055,7 +5063,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return await self.api_call("usergroups.enable", params=kwargs) @@ -5070,7 +5078,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5095,7 +5103,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5122,7 +5130,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5143,7 +5151,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5170,7 +5178,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5192,7 +5200,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return await self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5203,7 +5211,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return await self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5213,7 +5221,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return await self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5225,7 +5233,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return await self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5240,7 +5248,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5259,7 +5267,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return await self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5274,7 +5282,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return await self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5286,7 +5294,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return await self.api_call("users.setPresence", params=kwargs) @@ -5297,7 +5305,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return await self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5310,7 +5318,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return await self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5325,7 +5333,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5348,8 +5356,8 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5372,9 +5380,9 @@

              Classes

              Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5397,9 +5405,9 @@

              Classes

              """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5426,8 +5434,8 @@

              Classes

              ) -> AsyncSlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5438,6 +5446,72 @@

              Classes

              # NOTE: Intentionally using json for the "view" parameter return await self.api_call("views.publish", json=kwargs) + async def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.add", params=kwargs) + + async def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return await self.api_call("workflows.featured.list", params=kwargs) + + async def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.remove", params=kwargs) + + async def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.set", params=kwargs) + async def workflows_stepCompleted( self, *, @@ -5446,7 +5520,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5463,7 +5537,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5484,7 +5558,7 @@

              Classes

              **kwargs, ) -> AsyncSlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -5496,7 +5570,7 @@

              Classes

              return await self.api_call("workflows.updateStep", json=kwargs)

              A WebClient allows apps to communicate with the Slack Platform's Web API.

              -

              https://api.slack.com/methods

              +

              https://docs.slack.dev/reference/methods

              The Slack Web API is an interface for querying information from and enacting change in a Slack workspace.

              This client handles constructing and sending HTTP requests to Slack @@ -5576,7 +5650,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -5586,7 +5660,7 @@

              Methods

              return await self.api_call("admin.analytics.getFile", params=kwargs)

              Retrieve analytics data for a given date, presented as a compressed JSON file -https://api.slack.com/methods/admin.analytics.getFile

              +https://docs.slack.dev/reference/methods/admin.analytics.getFile

              async def admin_apps_activities_list(self,
              *,
              app_id: str | None = None,
              component_id: str | None = None,
              component_type: str | None = None,
              log_event_type: str | None = None,
              max_date_created: int | None = None,
              min_date_created: int | None = None,
              min_log_level: str | None = None,
              sort_direction: str | None = None,
              source: str | None = None,
              team_id: str | None = None,
              trace_id: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -5615,7 +5689,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -5637,7 +5711,7 @@

              Methods

              return await self.api_call("admin.apps.activities.list", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.apps.activities.list

              async def admin_apps_approve(self,
              *,
              app_id: str | None = None,
              request_id: str | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -5660,7 +5734,7 @@

              Methods

              Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -5681,7 +5755,7 @@

              Methods

              Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.approve

              +https://docs.slack.dev/reference/methods/admin.apps.approve

              async def admin_apps_approved_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -5701,7 +5775,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -5714,7 +5788,7 @@

              Methods

              return await self.api_call("admin.apps.approved.list", http_verb="GET", params=kwargs)

              List approved apps for an org or workspace. -https://api.slack.com/methods/admin.apps.approved.list

              +https://docs.slack.dev/reference/methods/admin.apps.approved.list

              async def admin_apps_clearResolution(self,
              *,
              app_id: str,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -5733,7 +5807,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -5745,7 +5819,7 @@

              Methods

              return await self.api_call("admin.apps.clearResolution", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.apps.clearResolution

              async def admin_apps_config_lookup(self, *, app_ids: str | Sequence[str], **kwargs) ‑> AsyncSlackResponse @@ -5762,7 +5836,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -5771,7 +5845,7 @@

              Methods

              return await self.api_call("admin.apps.config.lookup", params=kwargs)

              Look up the app config for connectors by their IDs -https://api.slack.com/methods/admin.apps.config.lookup

              +https://docs.slack.dev/reference/methods/admin.apps.config.lookup

              async def admin_apps_config_set(self,
              *,
              app_id: str,
              domain_restrictions: Dict[str, Any] | None = None,
              workflow_auth_strategy: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -5790,7 +5864,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -5803,7 +5877,7 @@

              Methods

              return await self.api_call("admin.apps.config.set", params=kwargs)

              Set the app config for a connector -https://api.slack.com/methods/admin.apps.config.set

              +https://docs.slack.dev/reference/methods/admin.apps.config.set

              async def admin_apps_requests_cancel(self,
              *,
              request_id: str,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -5822,7 +5896,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -5834,7 +5908,7 @@

              Methods

              return await self.api_call("admin.apps.requests.cancel", http_verb="POST", params=kwargs)

              List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.cancel

              +https://docs.slack.dev/reference/methods/admin.apps.requests.cancel

              async def admin_apps_requests_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -5853,7 +5927,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -5865,7 +5939,7 @@

              Methods

              return await self.api_call("admin.apps.requests.list", http_verb="GET", params=kwargs)

              List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.list

              +https://docs.slack.dev/reference/methods/admin.apps.requests.list

              async def admin_apps_restrict(self,
              *,
              app_id: str | None = None,
              request_id: str | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -5888,7 +5962,7 @@

              Methods

              Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -5909,7 +5983,7 @@

              Methods

              Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.restrict

              +https://docs.slack.dev/reference/methods/admin.apps.restrict

              async def admin_apps_restricted_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -5929,7 +6003,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -5942,7 +6016,7 @@

              Methods

              return await self.api_call("admin.apps.restricted.list", http_verb="GET", params=kwargs)

              List restricted apps for an org or workspace. -https://api.slack.com/methods/admin.apps.restricted.list

              +https://docs.slack.dev/reference/methods/admin.apps.restricted.list

              async def admin_apps_uninstall(self,
              *,
              app_id: str,
              enterprise_id: str | None = None,
              team_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -5962,7 +6036,7 @@

              Methods

              ) -> AsyncSlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -5976,7 +6050,7 @@

              Methods

              Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. -https://api.slack.com/methods/admin.apps.uninstall

              +https://docs.slack.dev/reference/methods/admin.apps.uninstall

              async def admin_auth_policy_assignEntities(self,
              *,
              entity_ids: str | Sequence[str],
              policy_name: str,
              entity_type: str,
              **kwargs) ‑> AsyncSlackResponse
              @@ -5995,7 +6069,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6006,7 +6080,7 @@

              Methods

              return await self.api_call("admin.auth.policy.assignEntities", http_verb="POST", params=kwargs)

              Assign entities to a particular authentication policy. -https://api.slack.com/methods/admin.auth.policy.assignEntities

              +https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities

              async def admin_auth_policy_getEntities(self,
              *,
              policy_name: str,
              cursor: str | None = None,
              entity_type: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -6026,7 +6100,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -6038,7 +6112,7 @@

              Methods

              return await self.api_call("admin.auth.policy.getEntities", http_verb="POST", params=kwargs)

              Fetch all the entities assigned to a particular authentication policy by name. -https://api.slack.com/methods/admin.auth.policy.getEntities

              +https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities

              async def admin_auth_policy_removeEntities(self,
              *,
              entity_ids: str | Sequence[str],
              policy_name: str,
              entity_type: str,
              **kwargs) ‑> AsyncSlackResponse
              @@ -6057,7 +6131,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6068,7 +6142,7 @@

              Methods

              return await self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs)

              Remove specified entities from a specified authentication policy. -https://api.slack.com/methods/admin.auth.policy.removeEntities

              +https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities

              async def admin_barriers_create(self,
              *,
              barriered_from_usergroup_ids: str | Sequence[str],
              primary_usergroup_id: str,
              restricted_subjects: str | Sequence[str],
              **kwargs) ‑> AsyncSlackResponse
              @@ -6087,7 +6161,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6101,7 +6175,7 @@

              Methods

              return await self.api_call("admin.barriers.create", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.barriers.create

              async def admin_barriers_delete(self, *, barrier_id: str, **kwargs) ‑> AsyncSlackResponse @@ -6118,13 +6192,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return await self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs)

              Delete an existing Information Barrier -https://api.slack.com/methods/admin.barriers.delete

              +https://docs.slack.dev/reference/methods/admin.barriers.delete

              async def admin_barriers_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> AsyncSlackResponse @@ -6142,7 +6216,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -6152,7 +6226,7 @@

              Methods

              return await self.api_call("admin.barriers.list", http_verb="GET", params=kwargs)

              Get all Information Barriers for your organization -https://api.slack.com/methods/admin.barriers.list

              +https://docs.slack.dev/reference/methods/admin.barriers.list

              async def admin_barriers_update(self,
              *,
              barrier_id: str,
              barriered_from_usergroup_ids: str | Sequence[str],
              primary_usergroup_id: str,
              restricted_subjects: str | Sequence[str],
              **kwargs) ‑> AsyncSlackResponse
              @@ -6172,7 +6246,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6186,7 +6260,7 @@

              Methods

              return await self.api_call("admin.barriers.update", http_verb="POST", params=kwargs)

              Update an existing Information Barrier -https://api.slack.com/methods/admin.barriers.update

              +https://docs.slack.dev/reference/methods/admin.barriers.update

              async def admin_conversations_archive(self, *, channel_id: str, **kwargs) ‑> AsyncSlackResponse @@ -6203,13 +6277,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.archive", params=kwargs)

              Archive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

              +https://docs.slack.dev/reference/methods/admin.conversations.archive

              async def admin_conversations_bulkArchive(self, *, channel_ids: str | Sequence[str], **kwargs) ‑> AsyncSlackResponse @@ -6226,13 +6300,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return await self.api_call("admin.conversations.bulkArchive", params=kwargs)

              Archive public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkArchive

              +https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive

              async def admin_conversations_bulkDelete(self, *, channel_ids: str | Sequence[str], **kwargs) ‑> AsyncSlackResponse @@ -6273,7 +6347,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -6284,7 +6358,7 @@

              Methods

              return await self.api_call("admin.conversations.bulkMove", params=kwargs)

              Move public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkMove

              +https://docs.slack.dev/reference/methods/admin.conversations.bulkMove

              async def admin_conversations_convertToPrivate(self, *, channel_id: str, **kwargs) ‑> AsyncSlackResponse @@ -6301,13 +6375,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.convertToPrivate", params=kwargs)

              Convert a public channel to a private channel. -https://api.slack.com/methods/admin.conversations.convertToPrivate

              +https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate

              async def admin_conversations_convertToPublic(self, *, channel_id: str, **kwargs) ‑> AsyncSlackResponse @@ -6324,13 +6398,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.convertToPublic", params=kwargs)

              Convert a privte channel to a public channel. -https://api.slack.com/methods/admin.conversations.convertToPublic

              +https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic

              async def admin_conversations_create(self,
              *,
              is_private: bool,
              name: str,
              description: str | None = None,
              org_wide: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -6351,7 +6425,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -6365,7 +6439,7 @@

              Methods

              return await self.api_call("admin.conversations.create", params=kwargs)

              Create a public or private channel-based conversation. -https://api.slack.com/methods/admin.conversations.create

              +https://docs.slack.dev/reference/methods/admin.conversations.create

              async def admin_conversations_createForObjects(self,
              *,
              object_id: str,
              salesforce_org_id: str,
              invite_object_team: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -6384,7 +6458,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -6392,7 +6466,7 @@

              Methods

              return await self.api_call("admin.conversations.createForObjects", params=kwargs)

              Create a Salesforce channel for the corresponding object provided. -https://api.slack.com/methods/admin.conversations.createForObjects

              +https://docs.slack.dev/reference/methods/admin.conversations.createForObjects

              async def admin_conversations_delete(self, *, channel_id: str, **kwargs) ‑> AsyncSlackResponse @@ -6409,13 +6483,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.delete

              async def admin_conversations_disconnectShared(self,
              *,
              channel_id: str,
              leaving_team_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -6433,7 +6507,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -6443,7 +6517,7 @@

              Methods

              return await self.api_call("admin.conversations.disconnectShared", params=kwargs)

              Disconnect a connected channel from one or more workspaces. -https://api.slack.com/methods/admin.conversations.disconnectShared

              +https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared

              async def admin_conversations_ekm_listOriginalConnectedChannelInfo(self,
              *,
              channel_ids: str | Sequence[str] | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              team_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -6465,7 +6539,7 @@

              Methods

              """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -6486,7 +6560,7 @@

              Methods

              List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. -https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

              +https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

              async def admin_conversations_getConversationPrefs(self, *, channel_id: str, **kwargs) ‑> AsyncSlackResponse @@ -6503,13 +6577,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.getConversationPrefs", params=kwargs)

              Get conversation preferences for a public or private channel. -https://api.slack.com/methods/admin.conversations.getConversationPrefs

              +https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs

              async def admin_conversations_getCustomRetention(self, *, channel_id: str, **kwargs) ‑> AsyncSlackResponse @@ -6526,13 +6600,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.getCustomRetention", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention

              async def admin_conversations_getTeams(self,
              *,
              channel_id: str,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -6551,7 +6625,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -6563,7 +6637,7 @@

              Methods

              return await self.api_call("admin.conversations.getTeams", params=kwargs)

              Set the workspaces in an Enterprise grid org that connect to a channel. -https://api.slack.com/methods/admin.conversations.getTeams

              +https://docs.slack.dev/reference/methods/admin.conversations.getTeams

              async def admin_conversations_invite(self, *, channel_id: str, user_ids: str | Sequence[str], **kwargs) ‑> AsyncSlackResponse @@ -6581,7 +6655,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -6592,7 +6666,7 @@

              Methods

              return await self.api_call("admin.conversations.invite", params=kwargs)

              Invite a user to a public or private channel. -https://api.slack.com/methods/admin.conversations.invite

              +https://docs.slack.dev/reference/methods/admin.conversations.invite

              async def admin_conversations_linkObjects(self, *, channel: str, record_id: str, salesforce_org_id: str, **kwargs) ‑> AsyncSlackResponse @@ -6611,7 +6685,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -6623,7 +6697,7 @@

              Methods

              return await self.api_call("admin.conversations.linkObjects", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.linkObjects

              async def admin_conversations_lookup(self,
              *,
              last_message_activity_before: int,
              team_ids: str | Sequence[str],
              cursor: str | None = None,
              limit: int | None = None,
              max_member_count: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -6644,7 +6718,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -6661,7 +6735,7 @@

              Methods

              return await self.api_call("admin.conversations.lookup", params=kwargs)

              Returns channels on the given team using the filters. -https://api.slack.com/methods/admin.conversations.lookup

              +https://docs.slack.dev/reference/methods/admin.conversations.lookup

              async def admin_conversations_removeCustomRetention(self, *, channel_id: str, **kwargs) ‑> AsyncSlackResponse @@ -6678,13 +6752,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.removeCustomRetention", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention

              async def admin_conversations_rename(self, *, channel_id: str, name: str, **kwargs) ‑> AsyncSlackResponse @@ -6702,13 +6776,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return await self.api_call("admin.conversations.rename", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.rename

              async def admin_conversations_restrictAccess_addGroup(self, *, channel_id: str, group_id: str, team_id: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -6727,7 +6801,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -6743,7 +6817,7 @@

              Methods

              )

              Add an allowlist of IDP groups for accessing a channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup

              +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup

              async def admin_conversations_restrictAccess_listGroups(self, *, channel_id: str, team_id: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -6761,7 +6835,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -6776,7 +6850,7 @@

              Methods

              )
              +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups

              async def admin_conversations_restrictAccess_removeGroup(self, *, channel_id: str, group_id: str, team_id: str, **kwargs) ‑> AsyncSlackResponse @@ -6795,7 +6869,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -6811,7 +6885,7 @@

              Methods

              )

              Remove a linked IDP group linked from a private channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup

              +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup

              async def admin_conversations_setConversationPrefs(self, *, channel_id: str, prefs: str | Dict[str, str], **kwargs) ‑> AsyncSlackResponse @@ -6877,7 +6951,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -6887,7 +6961,7 @@

              Methods

              return await self.api_call("admin.conversations.setConversationPrefs", params=kwargs)

              Set the posting permissions for a public or private channel. -https://api.slack.com/methods/admin.conversations.setConversationPrefs

              +https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs

              async def admin_conversations_setCustomRetention(self, *, channel_id: str, duration_days: int, **kwargs) ‑> AsyncSlackResponse @@ -6905,13 +6979,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return await self.api_call("admin.conversations.setCustomRetention", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention

              async def admin_conversations_setTeams(self,
              *,
              channel_id: str,
              org_channel: bool | None = None,
              target_team_ids: str | Sequence[str] | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -6931,7 +7005,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -6947,7 +7021,7 @@

              Methods

              return await self.api_call("admin.conversations.setTeams", params=kwargs)

              Set the workspaces in an Enterprise grid org that connect to a public or private channel. -https://api.slack.com/methods/admin.conversations.setTeams

              +https://docs.slack.dev/reference/methods/admin.conversations.setTeams

              async def admin_conversations_unarchive(self, *, channel_id: str, **kwargs) ‑> AsyncSlackResponse @@ -6964,13 +7038,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.unarchive", params=kwargs)

              Unarchive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

              +https://docs.slack.dev/reference/methods/admin.conversations.archive

              async def admin_conversations_unlinkObjects(self, *, channel: str, new_name: str, **kwargs) ‑> AsyncSlackResponse @@ -6988,7 +7062,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -6999,7 +7073,7 @@

              Methods

              return await self.api_call("admin.conversations.unlinkObjects", params=kwargs)

              Unlink a Salesforce record from a channel. -https://api.slack.com/methods/admin.conversations.unlinkObjects

              +https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects

              async def admin_emoji_add(self, *, name: str, url: str, **kwargs) ‑> AsyncSlackResponse @@ -7017,13 +7091,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return await self.api_call("admin.emoji.add", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.emoji.add

              async def admin_emoji_addAlias(self, *, alias_for: str, name: str, **kwargs) ‑> AsyncSlackResponse @@ -7041,13 +7115,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return await self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.emoji.addAlias

              async def admin_emoji_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> AsyncSlackResponse @@ -7065,13 +7139,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return await self.api_call("admin.emoji.list", http_verb="GET", params=kwargs)

              List emoji for an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.list

              +https://docs.slack.dev/reference/methods/admin.emoji.list

              async def admin_emoji_remove(self, *, name: str, **kwargs) ‑> AsyncSlackResponse @@ -7088,13 +7162,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return await self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs)

              Remove an emoji across an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.remove

              +https://docs.slack.dev/reference/methods/admin.emoji.remove

              async def admin_emoji_rename(self, *, name: str, new_name: str, **kwargs) ‑> AsyncSlackResponse @@ -7112,13 +7186,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return await self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.emoji.rename

              async def admin_functions_list(self,
              *,
              app_ids: str | Sequence[str],
              team_id: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -7138,7 +7212,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -7154,7 +7228,7 @@

              Methods

              return await self.api_call("admin.functions.list", params=kwargs)

              Look up functions by a set of apps -https://api.slack.com/methods/admin.functions.list

              +https://docs.slack.dev/reference/methods/admin.functions.list

              async def admin_functions_permissions_lookup(self, *, function_ids: str | Sequence[str], **kwargs) ‑> AsyncSlackResponse @@ -7172,7 +7246,7 @@

              Methods

              ) -> AsyncSlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -7182,7 +7256,7 @@

              Methods

              Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. -https://api.slack.com/methods/admin.functions.permissions.lookup

              +https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup

              async def admin_functions_permissions_set(self,
              *,
              function_id: str,
              visibility: str,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -7202,7 +7276,7 @@

              Methods

              ) -> AsyncSlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -7219,7 +7293,7 @@

              Methods

              Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities -https://api.slack.com/methods/admin.functions.permissions.set

              +https://docs.slack.dev/reference/methods/admin.functions.permissions.set

              async def admin_inviteRequests_approve(self, *, invite_request_id: str, team_id: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -7237,13 +7311,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return await self.api_call("admin.inviteRequests.approve", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.inviteRequests.approve

              async def admin_inviteRequests_approved_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -7262,7 +7336,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -7274,7 +7348,7 @@

              Methods

              return await self.api_call("admin.inviteRequests.approved.list", params=kwargs)

              List all approved workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.approved.list

              +https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list

              async def admin_inviteRequests_denied_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -7293,7 +7367,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -7305,7 +7379,7 @@

              Methods

              return await self.api_call("admin.inviteRequests.denied.list", params=kwargs)

              List all denied workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.denied.list

              +https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list

              async def admin_inviteRequests_deny(self, *, invite_request_id: str, team_id: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -7323,13 +7397,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return await self.api_call("admin.inviteRequests.deny", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.inviteRequests.deny

              async def admin_inviteRequests_list(self, **kwargs) ‑> AsyncSlackResponse @@ -7365,7 +7439,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7379,7 +7453,7 @@

              Methods

              return await self.api_call("admin.roles.addAssignments", params=kwargs)

              Adds members to the specified role with the specified scopes -https://api.slack.com/methods/admin.roles.addAssignments

              +https://docs.slack.dev/reference/methods/admin.roles.addAssignments

              async def admin_roles_listAssignments(self,
              *,
              role_ids: str | Sequence[str] | None = None,
              entity_ids: str | Sequence[str] | None = None,
              cursor: str | None = None,
              limit: str | int | None = None,
              sort_dir: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -7401,7 +7475,7 @@

              Methods

              ) -> AsyncSlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -7416,7 +7490,7 @@

              Methods

              Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities -https://api.slack.com/methods/admin.roles.listAssignments

              +https://docs.slack.dev/reference/methods/admin.roles.listAssignments

              async def admin_roles_removeAssignments(self,
              *,
              role_id: str,
              entity_ids: str | Sequence[str],
              user_ids: str | Sequence[str],
              **kwargs) ‑> AsyncSlackResponse
              @@ -7435,7 +7509,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7449,7 +7523,7 @@

              Methods

              return await self.api_call("admin.roles.removeAssignments", params=kwargs)

              Removes a set of users from a role for the given scopes and entities -https://api.slack.com/methods/admin.roles.removeAssignments

              +https://docs.slack.dev/reference/methods/admin.roles.removeAssignments

              async def admin_teams_admins_list(self, *, team_id: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> AsyncSlackResponse @@ -7468,7 +7542,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -7480,7 +7554,7 @@

              Methods

              return await self.api_call("admin.teams.admins.list", http_verb="GET", params=kwargs)

              List all of the admins on a given workspace. -https://api.slack.com/methods/admin.inviteRequests.list

              +https://docs.slack.dev/reference/methods/admin.inviteRequests.list

              async def admin_teams_create(self,
              *,
              team_domain: str,
              team_name: str,
              team_description: str | None = None,
              team_discoverability: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -7500,7 +7574,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -7513,7 +7587,7 @@

              Methods

              return await self.api_call("admin.teams.create", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.create

              async def admin_teams_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> AsyncSlackResponse @@ -7531,13 +7605,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return await self.api_call("admin.teams.list", params=kwargs)

              List all teams on an Enterprise organization. -https://api.slack.com/methods/admin.teams.list

              +https://docs.slack.dev/reference/methods/admin.teams.list

              async def admin_teams_owners_list(self, *, team_id: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> AsyncSlackResponse @@ -7556,13 +7630,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return await self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs)

              List all of the admins on a given workspace. -https://api.slack.com/methods/admin.teams.owners.list

              +https://docs.slack.dev/reference/methods/admin.teams.owners.list

              async def admin_teams_settings_info(self, *, team_id: str, **kwargs) ‑> AsyncSlackResponse @@ -7579,13 +7653,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return await self.api_call("admin.teams.settings.info", params=kwargs)

              Fetch information about settings in a workspace -https://api.slack.com/methods/admin.teams.settings.info

              +https://docs.slack.dev/reference/methods/admin.teams.settings.info

              async def admin_teams_settings_setDefaultChannels(self, *, team_id: str, channel_ids: str | Sequence[str], **kwargs) ‑> AsyncSlackResponse @@ -7603,7 +7677,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -7613,7 +7687,7 @@

              Methods

              return await self.api_call("admin.teams.settings.setDefaultChannels", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels

              async def admin_teams_settings_setDescription(self, *, team_id: str, description: str, **kwargs) ‑> AsyncSlackResponse @@ -7631,13 +7705,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return await self.api_call("admin.teams.settings.setDescription", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription

              async def admin_teams_settings_setDiscoverability(self, *, team_id: str, discoverability: str, **kwargs) ‑> AsyncSlackResponse @@ -7655,13 +7729,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return await self.api_call("admin.teams.settings.setDiscoverability", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability

              async def admin_teams_settings_setIcon(self, *, team_id: str, image_url: str, **kwargs) ‑> AsyncSlackResponse @@ -7679,13 +7753,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return await self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon

              async def admin_teams_settings_setName(self, *, team_id: str, name: str, **kwargs) ‑> AsyncSlackResponse @@ -7703,13 +7777,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return await self.api_call("admin.teams.settings.setName", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setName

              async def admin_usergroups_addChannels(self,
              *,
              channel_ids: str | Sequence[str],
              usergroup_id: str,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -7728,7 +7802,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7738,7 +7812,7 @@

              Methods

              return await self.api_call("admin.usergroups.addChannels", params=kwargs)

              Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.addChannels

              +https://docs.slack.dev/reference/methods/admin.usergroups.addChannels

              async def admin_usergroups_addTeams(self,
              *,
              usergroup_id: str,
              team_ids: str | Sequence[str],
              auto_provision: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -7757,7 +7831,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -7767,7 +7841,7 @@

              Methods

              return await self.api_call("admin.usergroups.addTeams", params=kwargs)

              Associate one or more default workspaces with an organization-wide IDP group. -https://api.slack.com/methods/admin.usergroups.addTeams

              +https://docs.slack.dev/reference/methods/admin.usergroups.addTeams

              async def admin_usergroups_listChannels(self,
              *,
              usergroup_id: str,
              include_num_members: bool | None = None,
              team_id: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -7786,7 +7860,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -7798,7 +7872,7 @@

              Methods

              return await self.api_call("admin.usergroups.listChannels", params=kwargs)

              Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.listChannels

              +https://docs.slack.dev/reference/methods/admin.usergroups.listChannels

              async def admin_usergroups_removeChannels(self, *, usergroup_id: str, channel_ids: str | Sequence[str], **kwargs) ‑> AsyncSlackResponse @@ -7816,7 +7890,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7826,7 +7900,7 @@

              Methods

              return await self.api_call("admin.usergroups.removeChannels", params=kwargs)

              Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.removeChannels

              +https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels

              async def admin_users_assign(self,
              *,
              team_id: str,
              user_id: str,
              channel_ids: str | Sequence[str] | None = None,
              is_restricted: bool | None = None,
              is_ultra_restricted: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -7847,7 +7921,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -7864,7 +7938,7 @@

              Methods

              return await self.api_call("admin.users.assign", params=kwargs)

              Add an Enterprise user to a workspace. -https://api.slack.com/methods/admin.users.assign

              +https://docs.slack.dev/reference/methods/admin.users.assign

              async def admin_users_invite(self,
              *,
              team_id: str,
              email: str,
              channel_ids: str | Sequence[str],
              custom_message: str | None = None,
              email_password_policy_enabled: bool | None = None,
              guest_expiration_ts: str | float | None = None,
              is_restricted: bool | None = None,
              is_ultra_restricted: bool | None = None,
              real_name: str | None = None,
              resend: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -7890,7 +7964,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -7912,10 +7986,10 @@

              Methods

              return await self.api_call("admin.users.invite", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.users.invite

              -async def admin_users_list(self,
              *,
              team_id: str,
              include_deactivated_user_workspaces: bool | None = None,
              is_active: bool | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              +async def admin_users_list(self,
              *,
              team_id: str | None = None,
              include_deactivated_user_workspaces: bool | None = None,
              is_active: bool | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -7925,7 +7999,7 @@

              Methods

              async def admin_users_list(
                   self,
                   *,
              -    team_id: str,
              +    team_id: Optional[str] = None,
                   include_deactivated_user_workspaces: Optional[bool] = None,
                   is_active: Optional[bool] = None,
                   cursor: Optional[str] = None,
              @@ -7933,7 +8007,7 @@ 

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -7947,7 +8021,7 @@

              Methods

              return await self.api_call("admin.users.list", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.users.list

              async def admin_users_remove(self, *, team_id: str, user_id: str, **kwargs) ‑> AsyncSlackResponse @@ -7965,13 +8039,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.remove", params=kwargs)

              Remove a user from a workspace. -https://api.slack.com/methods/admin.users.remove

              +https://docs.slack.dev/reference/methods/admin.users.remove

              async def admin_users_session_clearSettings(self, *, user_ids: str | Sequence[str], **kwargs) ‑> AsyncSlackResponse @@ -7989,7 +8063,7 @@

              Methods

              ) -> AsyncSlackResponse: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -7999,7 +8073,7 @@

              Methods

              Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. -https://api.slack.com/methods/admin.users.session.clearSettings

              +https://docs.slack.dev/reference/methods/admin.users.session.clearSettings

              async def admin_users_session_getSettings(self, *, user_ids: str | Sequence[str], **kwargs) ‑> AsyncSlackResponse @@ -8017,7 +8091,7 @@

              Methods

              ) -> AsyncSlackResponse: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8027,7 +8101,7 @@

              Methods

              Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. -https://api.slack.com/methods/admin.users.session.getSettings

              +https://docs.slack.dev/reference/methods/admin.users.session.getSettings

              async def admin_users_session_invalidate(self, *, session_id: str, team_id: str, **kwargs) ‑> AsyncSlackResponse @@ -8045,13 +8119,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return await self.api_call("admin.users.session.invalidate", params=kwargs)

              Invalidate a single session for a user by session_id. -https://api.slack.com/methods/admin.users.session.invalidate

              +https://docs.slack.dev/reference/methods/admin.users.session.invalidate

              async def admin_users_session_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              user_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -8071,7 +8145,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -8084,7 +8158,7 @@

              Methods

              return await self.api_call("admin.users.session.list", params=kwargs)

              Lists all active user sessions for an organization -https://api.slack.com/methods/admin.users.session.list

              +https://docs.slack.dev/reference/methods/admin.users.session.list

              async def admin_users_session_reset(self,
              *,
              user_id: str,
              mobile_only: bool | None = None,
              web_only: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -8103,7 +8177,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -8115,7 +8189,7 @@

              Methods

              return await self.api_call("admin.users.session.reset", params=kwargs)

              Wipes all valid sessions on all devices for a given user. -https://api.slack.com/methods/admin.users.session.reset

              +https://docs.slack.dev/reference/methods/admin.users.session.reset

              async def admin_users_session_resetBulk(self,
              *,
              user_ids: str | Sequence[str],
              mobile_only: bool | None = None,
              web_only: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -8134,7 +8208,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8149,7 +8223,7 @@

              Methods

              return await self.api_call("admin.users.session.resetBulk", params=kwargs)

              Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users -https://api.slack.com/methods/admin.users.session.resetBulk

              +https://docs.slack.dev/reference/methods/admin.users.session.resetBulk

              async def admin_users_session_setSettings(self,
              *,
              user_ids: str | Sequence[str],
              desktop_app_browser_quit: bool | None = None,
              duration: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -8169,7 +8243,7 @@

              Methods

              ) -> AsyncSlackResponse: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8185,7 +8259,7 @@

              Methods

              Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. -https://api.slack.com/methods/admin.users.session.setSettings

              +https://docs.slack.dev/reference/methods/admin.users.session.setSettings

              async def admin_users_setAdmin(self, *, team_id: str, user_id: str, **kwargs) ‑> AsyncSlackResponse @@ -8203,13 +8277,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setAdmin", params=kwargs)

              Set an existing guest, regular user, or owner to be an admin user. -https://api.slack.com/methods/admin.users.setAdmin

              +https://docs.slack.dev/reference/methods/admin.users.setAdmin

              async def admin_users_setExpiration(self, *, expiration_ts: int, user_id: str, team_id: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -8228,13 +8302,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setExpiration", params=kwargs)

              Set an expiration for a guest user. -https://api.slack.com/methods/admin.users.setExpiration

              +https://docs.slack.dev/reference/methods/admin.users.setExpiration

              async def admin_users_setOwner(self, *, team_id: str, user_id: str, **kwargs) ‑> AsyncSlackResponse @@ -8252,13 +8326,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setOwner", params=kwargs)

              Set an existing guest, regular user, or admin user to be a workspace owner. -https://api.slack.com/methods/admin.users.setOwner

              +https://docs.slack.dev/reference/methods/admin.users.setOwner

              async def admin_users_setRegular(self, *, team_id: str, user_id: str, **kwargs) ‑> AsyncSlackResponse @@ -8276,13 +8350,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setRegular", params=kwargs)

              Set an existing guest user, admin user, or owner to be a regular user. -https://api.slack.com/methods/admin.users.setRegular

              +https://docs.slack.dev/reference/methods/admin.users.setRegular

              async def admin_users_unsupportedVersions_export(self,
              *,
              date_end_of_support: str | int | None = None,
              date_sessions_started: str | int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -8301,7 +8375,7 @@

              Methods

              ) -> AsyncSlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -8313,7 +8387,7 @@

              Methods

              Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. -https://api.slack.com/methods/admin.users.unsupportedVersions.export

              +https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export

              async def admin_workflows_collaborators_add(self,
              *,
              collaborator_ids: str | Sequence[str],
              workflow_ids: str | Sequence[str],
              **kwargs) ‑> AsyncSlackResponse
              @@ -8331,7 +8405,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8344,7 +8418,7 @@

              Methods

              return await self.api_call("admin.workflows.collaborators.add", params=kwargs)

              Add collaborators to workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.add

              +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add

              async def admin_workflows_collaborators_remove(self,
              *,
              collaborator_ids: str | Sequence[str],
              workflow_ids: str | Sequence[str],
              **kwargs) ‑> AsyncSlackResponse
              @@ -8362,7 +8436,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8375,7 +8449,7 @@

              Methods

              return await self.api_call("admin.workflows.collaborators.remove", params=kwargs)

              Remove collaborators from workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.remove

              +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove

              async def admin_workflows_permissions_lookup(self,
              *,
              workflow_ids: str | Sequence[str],
              max_workflow_triggers: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -8393,7 +8467,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8407,7 +8481,7 @@

              Methods

              return await self.api_call("admin.workflows.permissions.lookup", params=kwargs)

              Look up the permissions for a set of workflows -https://api.slack.com/methods/admin.workflows.permissions.lookup

              +https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup

              async def admin_workflows_unpublish(self, *, workflow_ids: str | Sequence[str], **kwargs) ‑> AsyncSlackResponse @@ -8473,7 +8547,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8482,7 +8556,7 @@

              Methods

              return await self.api_call("admin.workflows.unpublish", params=kwargs)

              Unpublish workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.unpublish

              +https://docs.slack.dev/reference/methods/admin.workflows.unpublish

              async def api_test(self, *, error: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -8499,13 +8573,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return await self.api_call("api.test", params=kwargs)

              Checks API calling code. -https://api.slack.com/methods/api.test

              +https://docs.slack.dev/reference/methods/api.test

              async def apps_connections_open(self, *, app_token: str, **kwargs) ‑> AsyncSlackResponse @@ -8523,14 +8597,14 @@

              Methods

              ) -> AsyncSlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return await self.api_call("apps.connections.open", http_verb="POST", params=kwargs)

              Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads -https://api.slack.com/methods/apps.connections.open

              +https://docs.slack.dev/reference/methods/apps.connections.open

              async def apps_event_authorizations_list(self,
              *,
              event_context: str,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -8550,14 +8624,14 @@

              Methods

              ) -> AsyncSlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return await self.api_call("apps.event.authorizations.list", params=kwargs)

              Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. -https://api.slack.com/methods/apps.event.authorizations.list

              +https://docs.slack.dev/reference/methods/apps.event.authorizations.list

              async def apps_manifest_create(self, *, manifest: str | Dict[str, Any], **kwargs) ‑> AsyncSlackResponse @@ -8574,7 +8648,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8583,7 +8657,7 @@

              Methods

              return await self.api_call("apps.manifest.create", params=kwargs)

              Create an app from an app manifest -https://api.slack.com/methods/apps.manifest.create

              +https://docs.slack.dev/reference/methods/apps.manifest.create

              async def apps_manifest_delete(self, *, app_id: str, **kwargs) ‑> AsyncSlackResponse @@ -8600,13 +8674,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return await self.api_call("apps.manifest.delete", params=kwargs)

              Permanently deletes an app created through app manifests -https://api.slack.com/methods/apps.manifest.delete

              +https://docs.slack.dev/reference/methods/apps.manifest.delete

              async def apps_manifest_export(self, *, app_id: str, **kwargs) ‑> AsyncSlackResponse @@ -8623,13 +8697,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return await self.api_call("apps.manifest.export", params=kwargs)

              Export an app manifest from an existing app -https://api.slack.com/methods/apps.manifest.export

              +https://docs.slack.dev/reference/methods/apps.manifest.export

              async def apps_manifest_update(self, *, app_id: str, manifest: str | Dict[str, Any], **kwargs) ‑> AsyncSlackResponse @@ -8647,7 +8721,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8657,7 +8731,7 @@

              Methods

              return await self.api_call("apps.manifest.update", params=kwargs)

              Update an app from an app manifest -https://api.slack.com/methods/apps.manifest.update

              +https://docs.slack.dev/reference/methods/apps.manifest.update

              async def apps_manifest_validate(self, *, manifest: str | Dict[str, Any], app_id: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -8675,7 +8749,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8685,7 +8759,7 @@

              Methods

              return await self.api_call("apps.manifest.validate", params=kwargs)
              +https://docs.slack.dev/reference/methods/apps.manifest.validate

              async def apps_uninstall(self, *, client_id: str, client_secret: str, **kwargs) ‑> AsyncSlackResponse @@ -8703,13 +8777,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return await self.api_call("apps.uninstall", params=kwargs)

              Uninstalls your app from a workspace. -https://api.slack.com/methods/apps.uninstall

              +https://docs.slack.dev/reference/methods/apps.uninstall

              async def assistant_threads_setStatus(self, *, channel_id: str, thread_ts: str, status: str, **kwargs) ‑> AsyncSlackResponse @@ -8728,13 +8802,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return await self.api_call("assistant.threads.setStatus", params=kwargs)
              +https://docs.slack.dev/reference/methods/assistant.threads.setStatus

              async def assistant_threads_setSuggestedPrompts(self,
              *,
              channel_id: str,
              thread_ts: str,
              title: str | None = None,
              prompts: List[Dict[str, str]],
              **kwargs) ‑> AsyncSlackResponse
              @@ -8754,7 +8828,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -8762,7 +8836,7 @@

              Methods

              return await self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
              +https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

              async def assistant_threads_setTitle(self, *, channel_id: str, thread_ts: str, title: str, **kwargs) ‑> AsyncSlackResponse @@ -8781,13 +8855,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return await self.api_call("assistant.threads.setTitle", params=kwargs)
              +https://docs.slack.dev/reference/methods/assistant.threads.setTitle

              async def auth_revoke(self, *, test: bool | None = None, **kwargs) ‑> AsyncSlackResponse @@ -8804,13 +8878,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return await self.api_call("auth.revoke", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/auth.revoke

              async def auth_teams_list(self,
              cursor: str | None = None,
              limit: int | None = None,
              include_icon: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -8828,13 +8902,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return await self.api_call("auth.teams.list", params=kwargs)

              List the workspaces a token can access. -https://api.slack.com/methods/auth.teams.list

              +https://docs.slack.dev/reference/methods/auth.teams.list

              async def auth_test(self, **kwargs) ‑> AsyncSlackResponse @@ -8849,12 +8923,12 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return await self.api_call("auth.test", params=kwargs)

              Checks authentication & identity. -https://api.slack.com/methods/auth.test

              +https://docs.slack.dev/reference/methods/auth.test

              async def bookmarks_add(self,
              *,
              channel_id: str,
              title: str,
              type: str,
              emoji: str | None = None,
              entity_id: str | None = None,
              link: str | None = None,
              parent_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -8877,7 +8951,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -8893,7 +8967,7 @@

              Methods

              return await self.api_call("bookmarks.add", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/bookmarks.add

              async def bookmarks_edit(self,
              *,
              bookmark_id: str,
              channel_id: str,
              emoji: str | None = None,
              link: str | None = None,
              title: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -8914,7 +8988,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -8928,7 +9002,7 @@

              Methods

              return await self.api_call("bookmarks.edit", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/bookmarks.edit

              async def bookmarks_list(self, *, channel_id: str, **kwargs) ‑> AsyncSlackResponse @@ -8945,13 +9019,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return await self.api_call("bookmarks.list", http_verb="POST", params=kwargs)

              List bookmark for the channel. -https://api.slack.com/methods/bookmarks.list

              +https://docs.slack.dev/reference/methods/bookmarks.list

              async def bookmarks_remove(self, *, bookmark_id: str, channel_id: str, **kwargs) ‑> AsyncSlackResponse @@ -8969,13 +9043,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return await self.api_call("bookmarks.remove", http_verb="POST", params=kwargs)

              Remove bookmark from the channel. -https://api.slack.com/methods/bookmarks.remove

              +https://docs.slack.dev/reference/methods/bookmarks.remove

              async def bots_info(self, *, bot: str | None = None, team_id: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -8993,13 +9067,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return await self.api_call("bots.info", http_verb="GET", params=kwargs)

              Gets information about a bot user. -https://api.slack.com/methods/bots.info

              +https://docs.slack.dev/reference/methods/bots.info

              async def calls_add(self,
              *,
              external_unique_id: str,
              join_url: str,
              created_by: str | None = None,
              date_start: int | None = None,
              desktop_app_join_url: str | None = None,
              external_display_id: str | None = None,
              title: str | None = None,
              users: str | Sequence[Dict[str, str]] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -9023,7 +9097,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -9043,7 +9117,7 @@

              Methods

              return await self.api_call("calls.add", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/calls.add

              async def calls_end(self, *, id: str, duration: int | None = None, **kwargs) ‑> AsyncSlackResponse @@ -9061,13 +9135,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return await self.api_call("calls.end", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/calls.end

              async def calls_info(self, *, id: str, **kwargs) ‑> AsyncSlackResponse @@ -9084,13 +9158,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return await self.api_call("calls.info", http_verb="POST", params=kwargs)

              Returns information about a Call. -https://api.slack.com/methods/calls.info

              +https://docs.slack.dev/reference/methods/calls.info

              async def calls_participants_add(self, *, id: str, users: str | Sequence[Dict[str, str]], **kwargs) ‑> AsyncSlackResponse @@ -9108,14 +9182,14 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return await self.api_call("calls.participants.add", http_verb="POST", params=kwargs)

              Registers new participants added to a Call. -https://api.slack.com/methods/calls.participants.add

              +https://docs.slack.dev/reference/methods/calls.participants.add

              async def calls_participants_remove(self, *, id: str, users: str | Sequence[Dict[str, str]], **kwargs) ‑> AsyncSlackResponse @@ -9133,14 +9207,14 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return await self.api_call("calls.participants.remove", http_verb="POST", params=kwargs)

              Registers participants removed from a Call. -https://api.slack.com/methods/calls.participants.remove

              +https://docs.slack.dev/reference/methods/calls.participants.remove

              async def calls_update(self,
              *,
              id: str,
              desktop_app_join_url: str | None = None,
              join_url: str | None = None,
              title: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -9160,7 +9234,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -9173,7 +9247,7 @@

              Methods

              return await self.api_call("calls.update", http_verb="POST", params=kwargs)

              Updates information about a Call. -https://api.slack.com/methods/calls.update

              +https://docs.slack.dev/reference/methods/calls.update

              async def canvases_access_delete(self,
              *,
              canvas_id: str,
              channel_ids: str | Sequence[str] | None = None,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -9192,7 +9266,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -9208,7 +9282,7 @@

              Methods

              return await self.api_call("canvases.access.delete", params=kwargs)

              Create a Channel Canvas for a channel -https://api.slack.com/methods/canvases.access.delete

              +https://docs.slack.dev/reference/methods/canvases.access.delete

              async def canvases_access_set(self,
              *,
              canvas_id: str,
              access_level: str,
              channel_ids: str | Sequence[str] | None = None,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -9228,7 +9302,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -9245,7 +9319,7 @@

              Methods

              return await self.api_call("canvases.access.set", params=kwargs)

              Sets the access level to a canvas for specified entities -https://api.slack.com/methods/canvases.access.set

              +https://docs.slack.dev/reference/methods/canvases.access.set

              async def canvases_create(self, *, title: str | None = None, document_content: Dict[str, str], **kwargs) ‑> AsyncSlackResponse @@ -9263,13 +9337,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return await self.api_call("canvases.create", json=kwargs)
              +https://docs.slack.dev/reference/methods/canvases.create

              async def canvases_delete(self, *, canvas_id: str, **kwargs) ‑> AsyncSlackResponse @@ -9286,13 +9360,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return await self.api_call("canvases.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/canvases.delete

              async def canvases_edit(self, *, canvas_id: str, changes: Sequence[Dict[str, Any]], **kwargs) ‑> AsyncSlackResponse @@ -9310,13 +9384,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return await self.api_call("canvases.edit", json=kwargs)
              +https://docs.slack.dev/reference/methods/canvases.edit

              async def canvases_sections_lookup(self, *, canvas_id: str, criteria: Dict[str, Any], **kwargs) ‑> AsyncSlackResponse @@ -9334,13 +9408,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return await self.api_call("canvases.sections.lookup", params=kwargs)

              Find sections matching the provided criteria -https://api.slack.com/methods/canvases.sections.lookup

              +https://docs.slack.dev/reference/methods/canvases.sections.lookup

              async def channels_archive(self, *, channel: str, **kwargs) ‑> AsyncSlackResponse @@ -9674,13 +9748,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return await self.api_call("chat.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/chat.delete

              async def chat_deleteScheduledMessage(self,
              *,
              channel: str,
              scheduled_message_id: str,
              as_user: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -9699,7 +9773,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -9711,7 +9785,7 @@

              Methods

              return await self.api_call("chat.deleteScheduledMessage", params=kwargs)
              +https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage

              async def chat_meMessage(self, *, channel: str, text: str, **kwargs) ‑> AsyncSlackResponse @@ -9753,16 +9827,16 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return await self.api_call("chat.meMessage", params=kwargs)

              Share a me message into a channel. -https://api.slack.com/methods/chat.meMessage

              +https://docs.slack.dev/reference/methods/chat.meMessage

              -async def chat_postEphemeral(self,
              *,
              channel: str,
              user: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              +async def chat_postEphemeral(self,
              *,
              channel: str,
              user: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -9784,10 +9858,11 @@

              Methods

              link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -9803,19 +9878,20 @@

              Methods

              "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postEphemeral", json=kwargs)

              Sends an ephemeral message to a user in a channel. -https://api.slack.com/methods/chat.postEphemeral

              +https://docs.slack.dev/reference/methods/chat.postEphemeral

              -async def chat_postMessage(self,
              *,
              channel: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              container_id: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              mrkdwn: bool | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> AsyncSlackResponse
              +async def chat_postMessage(self,
              *,
              channel: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              container_id: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              mrkdwn: bool | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              metadata: Dict | Metadata | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -9842,10 +9918,11 @@

              Methods

              username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -9866,19 +9943,20 @@

              Methods

              "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postMessage", json=kwargs)

              Sends a message to a channel. -https://api.slack.com/methods/chat.postMessage

              +https://docs.slack.dev/reference/methods/chat.postMessage

              -async def chat_scheduleMessage(self,
              *,
              channel: str,
              post_at: str | int,
              text: str,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              link_names: bool | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> AsyncSlackResponse
              +async def chat_scheduleMessage(self,
              *,
              channel: str,
              post_at: str | int,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              link_names: bool | None = None,
              metadata: Dict | Metadata | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -9890,7 +9968,7 @@

              Methods

              *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -9901,10 +9979,11 @@

              Methods

              unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -9921,16 +10000,17 @@

              Methods

              "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.scheduleMessage", json=kwargs)
              +https://docs.slack.dev/reference/methods/chat.scheduleMessage

              async def chat_scheduledMessages_list(self,
              *,
              channel: str | None = None,
              cursor: str | None = None,
              latest: str | None = None,
              limit: int | None = None,
              oldest: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -9952,7 +10032,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -9967,7 +10047,7 @@

              Methods

              return await self.api_call("chat.scheduledMessages.list", params=kwargs)
              +https://docs.slack.dev/reference/methods/chat.scheduledMessages.list

              async def chat_unfurl(self,
              *,
              channel: str | None = None,
              ts: str | None = None,
              source: str | None = None,
              unfurl_id: str | None = None,
              unfurls: Dict[str, Dict] | None = None,
              user_auth_blocks: str | Sequence[Dict | Block] | None = None,
              user_auth_message: str | None = None,
              user_auth_required: bool | None = None,
              user_auth_url: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -9992,7 +10072,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -10013,10 +10093,10 @@

              Methods

              return await self.api_call("chat.unfurl", json=kwargs)

              Provide custom unfurl behavior for user-posted URLs. -https://api.slack.com/methods/chat.unfurl

              +https://docs.slack.dev/reference/methods/chat.unfurl

              -async def chat_update(self,
              *,
              channel: str,
              ts: str,
              text: str | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              as_user: bool | None = None,
              file_ids: str | Sequence[str] | None = None,
              link_names: bool | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> AsyncSlackResponse
              +async def chat_update(self,
              *,
              channel: str,
              ts: str,
              text: str | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              as_user: bool | None = None,
              file_ids: str | Sequence[str] | None = None,
              link_names: bool | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              metadata: Dict | Metadata | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10037,10 +10117,11 @@

              Methods

              parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -10054,6 +10135,7 @@

              Methods

              "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -10062,12 +10144,12 @@

              Methods

              kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return await self.api_call("chat.update", json=kwargs)

              Updates a message in a channel. -https://api.slack.com/methods/chat.update

              +https://docs.slack.dev/reference/methods/chat.update

              async def conversations_acceptSharedInvite(self,
              *,
              channel_name: str,
              channel_id: str | None = None,
              invite_id: str | None = None,
              free_trial_accepted: bool | None = None,
              is_private: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10089,7 +10171,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -10106,7 +10188,7 @@

              Methods

              return await self.api_call("conversations.acceptSharedInvite", http_verb="POST", params=kwargs)

              Accepts an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.acceptSharedInvite

              +https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite

              async def conversations_approveSharedInvite(self, *, invite_id: str, target_team: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -10124,13 +10206,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return await self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs)

              Approves an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.approveSharedInvite

              +https://docs.slack.dev/reference/methods/conversations.approveSharedInvite

              async def conversations_archive(self, *, channel: str, **kwargs) ‑> AsyncSlackResponse @@ -10147,13 +10229,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return await self.api_call("conversations.archive", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.archive

              async def conversations_canvases_create(self, *, channel_id: str, document_content: Dict[str, str], **kwargs) ‑> AsyncSlackResponse @@ -10171,13 +10253,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return await self.api_call("conversations.canvases.create", json=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.canvases.create

              async def conversations_close(self, *, channel: str, **kwargs) ‑> AsyncSlackResponse @@ -10194,13 +10276,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return await self.api_call("conversations.close", params=kwargs)

              Closes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.close

              +https://docs.slack.dev/reference/methods/conversations.close

              async def conversations_create(self,
              *,
              name: str,
              is_private: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10219,13 +10301,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return await self.api_call("conversations.create", params=kwargs)

              Initiates a public or private channel-based conversation -https://api.slack.com/methods/conversations.create

              +https://docs.slack.dev/reference/methods/conversations.create

              async def conversations_declineSharedInvite(self, *, invite_id: str, target_team: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -10243,13 +10325,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return await self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs)

              Declines a Slack Connect channel invite. -https://api.slack.com/methods/conversations.declineSharedInvite

              +https://docs.slack.dev/reference/methods/conversations.declineSharedInvite

              async def conversations_externalInvitePermissions_set(self, *, action: str, channel: str, target_team: str, **kwargs) ‑> AsyncSlackResponse @@ -10263,7 +10345,7 @@

              Methods

              self, *, action: str, channel: str, target_team: str, **kwargs ) -> AsyncSlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -10275,7 +10357,7 @@

              Methods

              return await self.api_call("conversations.externalInvitePermissions.set", params=kwargs)

              Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. -https://api.slack.com/methods/conversations.externalInvitePermissions.set

              +https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set

              async def conversations_history(self,
              *,
              channel: str,
              cursor: str | None = None,
              inclusive: bool | None = None,
              include_all_metadata: bool | None = None,
              latest: str | None = None,
              limit: int | None = None,
              oldest: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10298,7 +10380,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -10314,7 +10396,7 @@

              Methods

              return await self.api_call("conversations.history", http_verb="GET", params=kwargs)

              Fetches a conversation's history of messages and events. -https://api.slack.com/methods/conversations.history

              +https://docs.slack.dev/reference/methods/conversations.history

              async def conversations_info(self,
              *,
              channel: str,
              include_locale: bool | None = None,
              include_num_members: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10333,7 +10415,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -10345,7 +10427,7 @@

              Methods

              return await self.api_call("conversations.info", http_verb="GET", params=kwargs)

              Retrieve information about a conversation. -https://api.slack.com/methods/conversations.info

              +https://docs.slack.dev/reference/methods/conversations.info

              async def conversations_invite(self,
              *,
              channel: str,
              users: str | Sequence[str],
              force: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10364,7 +10446,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -10379,7 +10461,7 @@

              Methods

              return await self.api_call("conversations.invite", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.invite

              async def conversations_inviteShared(self,
              *,
              channel: str,
              emails: str | Sequence[str] | None = None,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10398,7 +10480,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -10414,7 +10496,7 @@

              Methods

              return await self.api_call("conversations.inviteShared", http_verb="GET", params=kwargs)

              Sends an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.inviteShared

              +https://docs.slack.dev/reference/methods/conversations.inviteShared

              async def conversations_join(self, *, channel: str, **kwargs) ‑> AsyncSlackResponse @@ -10431,13 +10513,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return await self.api_call("conversations.join", params=kwargs)

              Joins an existing conversation. -https://api.slack.com/methods/conversations.join

              +https://docs.slack.dev/reference/methods/conversations.join

              async def conversations_kick(self, *, channel: str, user: str, **kwargs) ‑> AsyncSlackResponse @@ -10455,13 +10537,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return await self.api_call("conversations.kick", params=kwargs)

              Removes a user from a conversation. -https://api.slack.com/methods/conversations.kick

              +https://docs.slack.dev/reference/methods/conversations.kick

              async def conversations_leave(self, *, channel: str, **kwargs) ‑> AsyncSlackResponse @@ -10478,13 +10560,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return await self.api_call("conversations.leave", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.leave

              async def conversations_list(self,
              *,
              cursor: str | None = None,
              exclude_archived: bool | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              types: str | Sequence[str] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10505,7 +10587,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -10522,7 +10604,7 @@

              Methods

              return await self.api_call("conversations.list", http_verb="GET", params=kwargs)

              Lists all channels in a Slack team. -https://api.slack.com/methods/conversations.list

              +https://docs.slack.dev/reference/methods/conversations.list

              async def conversations_listConnectInvites(self,
              *,
              count: int | None = None,
              cursor: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10542,14 +10624,14 @@

              Methods

              ) -> AsyncSlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return await self.api_call("conversations.listConnectInvites", params=kwargs)

              List shared channel invites that have been generated or received but have not yet been approved by all parties. -https://api.slack.com/methods/conversations.listConnectInvites

              +https://docs.slack.dev/reference/methods/conversations.listConnectInvites

              async def conversations_mark(self, *, channel: str, ts: str, **kwargs) ‑> AsyncSlackResponse @@ -10567,13 +10649,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return await self.api_call("conversations.mark", params=kwargs)

              Sets the read cursor in a channel. -https://api.slack.com/methods/conversations.mark

              +https://docs.slack.dev/reference/methods/conversations.mark

              async def conversations_members(self, *, channel: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> AsyncSlackResponse @@ -10592,13 +10674,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return await self.api_call("conversations.members", http_verb="GET", params=kwargs)

              Retrieve members of a conversation. -https://api.slack.com/methods/conversations.members

              +https://docs.slack.dev/reference/methods/conversations.members

              async def conversations_open(self,
              *,
              channel: str | None = None,
              return_im: bool | None = None,
              users: str | Sequence[str] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10617,7 +10699,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -10629,7 +10711,7 @@

              Methods

              return await self.api_call("conversations.open", params=kwargs)

              Opens or resumes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.open

              +https://docs.slack.dev/reference/methods/conversations.open

              async def conversations_rename(self, *, channel: str, name: str, **kwargs) ‑> AsyncSlackResponse @@ -10647,13 +10729,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return await self.api_call("conversations.rename", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.rename

              async def conversations_replies(self,
              *,
              channel: str,
              ts: str,
              cursor: str | None = None,
              inclusive: bool | None = None,
              include_all_metadata: bool | None = None,
              latest: str | None = None,
              limit: int | None = None,
              oldest: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10677,7 +10759,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -10694,7 +10776,7 @@

              Methods

              return await self.api_call("conversations.replies", http_verb="GET", params=kwargs)

              Retrieve a thread of messages posted to a conversation -https://api.slack.com/methods/conversations.replies

              +https://docs.slack.dev/reference/methods/conversations.replies

              async def conversations_requestSharedInvite_approve(self,
              *,
              invite_id: str,
              channel_id: str | None = None,
              is_external_limited: str | None = None,
              message: Dict[str, Any] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10714,7 +10796,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -10728,7 +10810,7 @@

              Methods

              return await self.api_call("conversations.requestSharedInvite.approve", params=kwargs)

              Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. -https://api.slack.com/methods/conversations.requestSharedInvite.approve

              +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve

              async def conversations_requestSharedInvite_deny(self, *, invite_id: str, message: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -10746,13 +10828,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return await self.api_call("conversations.requestSharedInvite.deny", params=kwargs)

              Deny a request to invite an external user to a channel. -https://api.slack.com/methods/conversations.requestSharedInvite.deny

              +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny

              async def conversations_requestSharedInvite_list(self,
              *,
              cursor: str | None = None,
              include_approved: bool | None = None,
              include_denied: bool | None = None,
              include_expired: bool | None = None,
              invite_ids: str | Sequence[str] | None = None,
              limit: int | None = None,
              user_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -10775,7 +10857,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -10795,7 +10877,7 @@

              Methods

              return await self.api_call("conversations.requestSharedInvite.list", params=kwargs)

              Lists requests to add external users to channels with ability to filter. -https://api.slack.com/methods/conversations.requestSharedInvite.list

              +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list

              async def conversations_setPurpose(self, *, channel: str, purpose: str, **kwargs) ‑> AsyncSlackResponse @@ -10813,13 +10895,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return await self.api_call("conversations.setPurpose", params=kwargs)

              Sets the purpose for a conversation. -https://api.slack.com/methods/conversations.setPurpose

              +https://docs.slack.dev/reference/methods/conversations.setPurpose

              async def conversations_setTopic(self, *, channel: str, topic: str, **kwargs) ‑> AsyncSlackResponse @@ -10837,13 +10919,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return await self.api_call("conversations.setTopic", params=kwargs)

              Sets the topic for a conversation. -https://api.slack.com/methods/conversations.setTopic

              +https://docs.slack.dev/reference/methods/conversations.setTopic

              async def conversations_unarchive(self, *, channel: str, **kwargs) ‑> AsyncSlackResponse @@ -10860,13 +10942,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return await self.api_call("conversations.unarchive", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.unarchive

              async def dialog_open(self, *, dialog: Dict[str, Any], trigger_id: str, **kwargs) ‑> AsyncSlackResponse @@ -10884,7 +10966,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -10892,7 +10974,7 @@

              Methods

              return await self.api_call("dialog.open", json=kwargs)

              Open a dialog with a user. -https://api.slack.com/methods/dialog.open

              +https://docs.slack.dev/reference/methods/dialog.open

              async def dnd_endDnd(self, **kwargs) ‑> AsyncSlackResponse @@ -10907,12 +10989,12 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return await self.api_call("dnd.endDnd", params=kwargs)

              Ends the current user's Do Not Disturb session immediately. -https://api.slack.com/methods/dnd.endDnd

              +https://docs.slack.dev/reference/methods/dnd.endDnd

              async def dnd_endSnooze(self, **kwargs) ‑> AsyncSlackResponse @@ -10927,12 +11009,12 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return await self.api_call("dnd.endSnooze", params=kwargs)

              Ends the current user's snooze mode immediately. -https://api.slack.com/methods/dnd.endSnooze

              +https://docs.slack.dev/reference/methods/dnd.endSnooze

              async def dnd_info(self, *, team_id: str | None = None, user: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -10950,13 +11032,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return await self.api_call("dnd.info", http_verb="GET", params=kwargs)

              Retrieves a user's current Do Not Disturb status. -https://api.slack.com/methods/dnd.info

              +https://docs.slack.dev/reference/methods/dnd.info

              async def dnd_setSnooze(self, *, num_minutes: str | int, **kwargs) ‑> AsyncSlackResponse @@ -10973,13 +11055,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return await self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs)

              Turns on Do Not Disturb mode for the current user, or changes its duration. -https://api.slack.com/methods/dnd.setSnooze

              +https://docs.slack.dev/reference/methods/dnd.setSnooze

              async def dnd_teamInfo(self, users: str | Sequence[str], team_id: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -10996,7 +11078,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -11006,7 +11088,7 @@

              Methods

              return await self.api_call("dnd.teamInfo", http_verb="GET", params=kwargs)

              Retrieves the Do Not Disturb status for users on a team. -https://api.slack.com/methods/dnd.teamInfo

              +https://docs.slack.dev/reference/methods/dnd.teamInfo

              async def emoji_list(self, include_categories: bool | None = None, **kwargs) ‑> AsyncSlackResponse @@ -11022,13 +11104,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return await self.api_call("emoji.list", http_verb="GET", params=kwargs)

              Lists custom emoji for a team. -https://api.slack.com/methods/emoji.list

              +https://docs.slack.dev/reference/methods/emoji.list

              async def files_comments_delete(self, *, file: str, id: str, **kwargs) ‑> AsyncSlackResponse @@ -11046,13 +11128,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return await self.api_call("files.comments.delete", params=kwargs)

              Deletes an existing comment on a file. -https://api.slack.com/methods/files.comments.delete

              +https://docs.slack.dev/reference/methods/files.comments.delete

              async def files_completeUploadExternal(self,
              *,
              files: List[Dict[str, str]],
              channel_id: str | None = None,
              channels: List[str] | None = None,
              initial_comment: str | None = None,
              thread_ts: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -11073,7 +11155,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -11089,7 +11171,7 @@

              Methods

              return await self.api_call("files.completeUploadExternal", params=kwargs)

              Finishes an upload started with files.getUploadURLExternal. -https://api.slack.com/methods/files.completeUploadExternal

              +https://docs.slack.dev/reference/methods/files.completeUploadExternal

              async def files_delete(self, *, file: str, **kwargs) ‑> AsyncSlackResponse @@ -11106,13 +11188,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return await self.api_call("files.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/files.delete

              async def files_getUploadURLExternal(self,
              *,
              filename: str,
              length: int,
              alt_txt: str | None = None,
              snippet_type: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -11132,7 +11214,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -11145,7 +11227,7 @@

              Methods

              return await self.api_call("files.getUploadURLExternal", params=kwargs)

              Gets a URL for an edge external upload. -https://api.slack.com/methods/files.getUploadURLExternal

              +https://docs.slack.dev/reference/methods/files.getUploadURLExternal

              async def files_info(self,
              *,
              file: str,
              count: int | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              page: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -11166,7 +11248,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -11180,7 +11262,7 @@

              Methods

              return await self.api_call("files.info", http_verb="GET", params=kwargs)

              Gets information about a team file. -https://api.slack.com/methods/files.info

              +https://docs.slack.dev/reference/methods/files.info

              async def files_list(self,
              *,
              channel: str | None = None,
              count: int | None = None,
              page: int | None = None,
              show_files_hidden_by_limit: bool | None = None,
              team_id: str | None = None,
              ts_from: str | None = None,
              ts_to: str | None = None,
              types: str | Sequence[str] | None = None,
              user: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -11205,7 +11287,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -11226,7 +11308,7 @@

              Methods

              return await self.api_call("files.list", http_verb="GET", params=kwargs)

              Lists & filters team files. -https://api.slack.com/methods/files.list

              +https://docs.slack.dev/reference/methods/files.list

              async def files_remote_add(self,
              *,
              external_id: str,
              external_url: str,
              title: str,
              filetype: str | None = None,
              indexable_file_contents: str | bytes | io.IOBase | None = None,
              preview_image: str | bytes | io.IOBase | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -11248,7 +11330,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -11275,7 +11357,7 @@

              Methods

              )

              Adds a file from a remote service. -https://api.slack.com/methods/files.remote.add

              +https://docs.slack.dev/reference/methods/files.remote.add

              async def files_remote_info(self, *, external_id: str | None = None, file: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -11293,13 +11375,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return await self.api_call("files.remote.info", http_verb="GET", params=kwargs)

              Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.info

              +https://docs.slack.dev/reference/methods/files.remote.info

              async def files_remote_list(self,
              *,
              channel: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              ts_from: str | None = None,
              ts_to: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -11320,7 +11402,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -11334,7 +11416,7 @@

              Methods

              return await self.api_call("files.remote.list", http_verb="GET", params=kwargs)

              Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.list

              +https://docs.slack.dev/reference/methods/files.remote.list

              async def files_remote_remove(self, *, external_id: str | None = None, file: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -11352,13 +11434,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return await self.api_call("files.remote.remove", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/files.remote.remove

              async def files_remote_share(self,
              *,
              channels: str | Sequence[str],
              external_id: str | None = None,
              file: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -11377,7 +11459,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -11389,7 +11471,7 @@

              Methods

              return await self.api_call("files.remote.share", http_verb="GET", params=kwargs)

              Share a remote file into a channel. -https://api.slack.com/methods/files.remote.share

              +https://docs.slack.dev/reference/methods/files.remote.share

              async def files_remote_update(self,
              *,
              external_id: str | None = None,
              external_url: str | None = None,
              file: str | None = None,
              title: str | None = None,
              filetype: str | None = None,
              indexable_file_contents: str | None = None,
              preview_image: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -11412,7 +11494,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -11440,7 +11522,7 @@

              Methods

              )

              Updates an existing remote file. -https://api.slack.com/methods/files.remote.update

              +https://docs.slack.dev/reference/methods/files.remote.update

              async def files_revokePublicURL(self, *, file: str, **kwargs) ‑> AsyncSlackResponse @@ -11457,13 +11539,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return await self.api_call("files.revokePublicURL", params=kwargs)

              Revokes public/external sharing access for a file -https://api.slack.com/methods/files.revokePublicURL

              +https://docs.slack.dev/reference/methods/files.revokePublicURL

              async def files_sharedPublicURL(self, *, file: str, **kwargs) ‑> AsyncSlackResponse @@ -11480,13 +11562,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return await self.api_call("files.sharedPublicURL", params=kwargs)

              Enables a file for public/external sharing. -https://api.slack.com/methods/files.sharedPublicURL

              +https://docs.slack.dev/reference/methods/files.sharedPublicURL

              async def files_upload(self,
              *,
              file: str | bytes | io.IOBase | None = None,
              content: str | bytes | None = None,
              filename: str | None = None,
              filetype: str | None = None,
              initial_comment: str | None = None,
              thread_ts: str | None = None,
              title: str | None = None,
              channels: str | Sequence[str] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -11510,7 +11592,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -11543,7 +11625,7 @@

              Methods

              return await self.api_call("files.upload", data=kwargs)

              Uploads or creates a file. -https://api.slack.com/methods/files.upload

              +https://docs.slack.dev/reference/methods/files.upload

              async def files_upload_v2(self,
              *,
              filename: str | None = None,
              file: str | bytes | io.IOBase | os.PathLike | None = None,
              content: str | bytes | None = None,
              title: str | None = None,
              alt_txt: str | None = None,
              snippet_type: str | None = None,
              file_uploads: List[Dict[str, Any]] | None = None,
              channel: str | None = None,
              channels: List[str] | None = None,
              initial_comment: str | None = None,
              thread_ts: str | None = None,
              request_file_info: bool = True,
              **kwargs) ‑> AsyncSlackResponse
              @@ -11574,12 +11656,12 @@

              Methods

              ) -> AsyncSlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -11658,14 +11740,14 @@

              Methods

              This wrapper method provides an easy way to upload files using the following endpoints:

              @@ -11685,13 +11767,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return await self.api_call("functions.completeError", params=kwargs)

              Signal the failure to execute a function -https://api.slack.com/methods/functions.completeError

              +https://docs.slack.dev/reference/methods/functions.completeError

              async def functions_completeSuccess(self, *, function_execution_id: str, outputs: Dict[str, Any], **kwargs) ‑> AsyncSlackResponse @@ -11709,13 +11791,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return await self.api_call("functions.completeSuccess", params=kwargs)

              Signal the successful completion of a function -https://api.slack.com/methods/functions.completeSuccess

              +https://docs.slack.dev/reference/methods/functions.completeSuccess

              async def groups_archive(self, *, channel: str, **kwargs) ‑> AsyncSlackResponse @@ -12191,7 +12273,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -12201,7 +12283,7 @@

              Methods

              return await self.api_call("migration.exchange", http_verb="GET", params=kwargs)

              For Enterprise Grid workspaces, map local user IDs to global user IDs -https://api.slack.com/methods/migration.exchange

              +https://docs.slack.dev/reference/methods/migration.exchange

              async def mpim_close(self, *, channel: str, **kwargs) ‑> AsyncSlackResponse @@ -12348,7 +12430,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12360,7 +12442,7 @@

              Methods

              )

              Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.access

              +https://docs.slack.dev/reference/methods/oauth.access

              async def oauth_v2_access(self,
              *,
              client_id: str,
              client_secret: str,
              code: str | None = None,
              redirect_uri: str | None = None,
              grant_type: str | None = None,
              refresh_token: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -12386,7 +12468,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12403,7 +12485,7 @@

              Methods

              )

              Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.v2.access

              +https://docs.slack.dev/reference/methods/oauth.v2.access

              async def oauth_v2_exchange(self, *, token: str, client_id: str, client_secret: str, **kwargs) ‑> AsyncSlackResponse @@ -12422,13 +12504,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return await self.api_call("oauth.v2.exchange", params=kwargs)

              Exchanges a legacy access token for a new expiring access token and refresh token -https://api.slack.com/methods/oauth.v2.exchange

              +https://docs.slack.dev/reference/methods/oauth.v2.exchange

              async def openid_connect_token(self,
              client_id: str,
              client_secret: str,
              code: str | None = None,
              redirect_uri: str | None = None,
              grant_type: str | None = None,
              refresh_token: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -12449,7 +12531,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12466,7 +12548,7 @@

              Methods

              )

              Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. -https://api.slack.com/methods/openid.connect.token

              +https://docs.slack.dev/reference/methods/openid.connect.token

              async def openid_connect_userInfo(self, **kwargs) ‑> AsyncSlackResponse @@ -12481,12 +12563,12 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return await self.api_call("openid.connect.userInfo", params=kwargs)

              Get the identity of a user who has authorized Sign in with Slack. -https://api.slack.com/methods/openid.connect.userInfo

              +https://docs.slack.dev/reference/methods/openid.connect.userInfo

              async def pins_add(self, *, channel: str, timestamp: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -12504,13 +12586,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return await self.api_call("pins.add", params=kwargs)

              Pins an item to a channel. -https://api.slack.com/methods/pins.add

              +https://docs.slack.dev/reference/methods/pins.add

              async def pins_list(self, *, channel: str, **kwargs) ‑> AsyncSlackResponse @@ -12527,13 +12609,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return await self.api_call("pins.list", http_verb="GET", params=kwargs)

              Lists items pinned to a channel. -https://api.slack.com/methods/pins.list

              +https://docs.slack.dev/reference/methods/pins.list

              async def pins_remove(self, *, channel: str, timestamp: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -12551,13 +12633,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return await self.api_call("pins.remove", params=kwargs)

              Un-pins an item from a channel. -https://api.slack.com/methods/pins.remove

              +https://docs.slack.dev/reference/methods/pins.remove

              async def reactions_add(self, *, channel: str, name: str, timestamp: str, **kwargs) ‑> AsyncSlackResponse @@ -12576,13 +12658,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return await self.api_call("reactions.add", params=kwargs)

              Adds a reaction to an item. -https://api.slack.com/methods/reactions.add

              +https://docs.slack.dev/reference/methods/reactions.add

              async def reactions_get(self,
              *,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              full: bool | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -12603,7 +12685,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -12617,7 +12699,7 @@

              Methods

              return await self.api_call("reactions.get", http_verb="GET", params=kwargs)

              Gets reactions for an item. -https://api.slack.com/methods/reactions.get

              +https://docs.slack.dev/reference/methods/reactions.get

              async def reactions_list(self,
              *,
              count: int | None = None,
              cursor: str | None = None,
              full: bool | None = None,
              limit: int | None = None,
              page: int | None = None,
              team_id: str | None = None,
              user: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -12640,7 +12722,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -12656,7 +12738,7 @@

              Methods

              return await self.api_call("reactions.list", http_verb="GET", params=kwargs)

              Lists reactions made by a user. -https://api.slack.com/methods/reactions.list

              +https://docs.slack.dev/reference/methods/reactions.list

              async def reactions_remove(self,
              *,
              name: str,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -12677,7 +12759,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -12691,7 +12773,7 @@

              Methods

              return await self.api_call("reactions.remove", params=kwargs)

              Removes a reaction from an item. -https://api.slack.com/methods/reactions.remove

              +https://docs.slack.dev/reference/methods/reactions.remove

              async def reminders_add(self,
              *,
              text: str,
              time: str,
              team_id: str | None = None,
              user: str | None = None,
              recurrence: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -12712,7 +12794,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -12726,7 +12808,7 @@

              Methods

              return await self.api_call("reminders.add", params=kwargs)
              +https://docs.slack.dev/reference/methods/reminders.add

              async def reminders_complete(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -12744,13 +12826,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.complete", params=kwargs)
              +https://docs.slack.dev/reference/methods/reminders.complete

              async def reminders_delete(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -12768,13 +12850,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/reminders.delete

              async def reminders_info(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -12792,13 +12874,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.info", http_verb="GET", params=kwargs)

              Gets information about a reminder. -https://api.slack.com/methods/reminders.info

              +https://docs.slack.dev/reference/methods/reminders.info

              async def reminders_list(self, *, team_id: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -12815,13 +12897,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return await self.api_call("reminders.list", http_verb="GET", params=kwargs)

              Lists all reminders created by or for a given user. -https://api.slack.com/methods/reminders.list

              +https://docs.slack.dev/reference/methods/reminders.list

              async def rtm_connect(self,
              *,
              batch_presence_aware: bool | None = None,
              presence_sub: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -12839,13 +12921,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return await self.api_call("rtm.connect", http_verb="GET", params=kwargs)

              Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.connect

              +https://docs.slack.dev/reference/methods/rtm.connect

              async def rtm_start(self,
              *,
              batch_presence_aware: bool | None = None,
              include_locale: bool | None = None,
              mpim_aware: bool | None = None,
              no_latest: bool | None = None,
              no_unreads: bool | None = None,
              presence_sub: bool | None = None,
              simple_latest: bool | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -12868,7 +12950,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -12884,7 +12966,7 @@

              Methods

              return await self.api_call("rtm.start", http_verb="GET", params=kwargs)

              Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.start

              +https://docs.slack.dev/reference/methods/rtm.start

              async def search_all(self,
              *,
              query: str,
              count: int | None = None,
              highlight: bool | None = None,
              page: int | None = None,
              sort: str | None = None,
              sort_dir: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -12907,7 +12989,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -12923,7 +13005,7 @@

              Methods

              return await self.api_call("search.all", http_verb="GET", params=kwargs)

              Searches for messages and files matching a query. -https://api.slack.com/methods/search.all

              +https://docs.slack.dev/reference/methods/search.all

              async def search_files(self,
              *,
              query: str,
              count: int | None = None,
              highlight: bool | None = None,
              page: int | None = None,
              sort: str | None = None,
              sort_dir: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -12946,7 +13028,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -12962,7 +13044,7 @@

              Methods

              return await self.api_call("search.files", http_verb="GET", params=kwargs)

              Searches for files matching a query. -https://api.slack.com/methods/search.files

              +https://docs.slack.dev/reference/methods/search.files

              async def search_messages(self,
              *,
              query: str,
              count: int | None = None,
              cursor: str | None = None,
              highlight: bool | None = None,
              page: int | None = None,
              sort: str | None = None,
              sort_dir: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -12986,7 +13068,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -13003,7 +13085,7 @@

              Methods

              return await self.api_call("search.messages", http_verb="GET", params=kwargs)

              Searches for messages matching a query. -https://api.slack.com/methods/search.messages

              +https://docs.slack.dev/reference/methods/search.messages

              async def stars_add(self,
              *,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13023,7 +13105,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -13036,7 +13118,7 @@

              Methods

              return await self.api_call("stars.add", params=kwargs)
              +https://docs.slack.dev/reference/methods/stars.add

              async def stars_list(self,
              *,
              count: int | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              page: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13057,7 +13139,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -13071,7 +13153,7 @@

              Methods

              return await self.api_call("stars.list", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/stars.list

              async def stars_remove(self,
              *,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13091,7 +13173,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -13104,7 +13186,7 @@

              Methods

              return await self.api_call("stars.remove", params=kwargs)

              Removes a star from an item. -https://api.slack.com/methods/stars.remove

              +https://docs.slack.dev/reference/methods/stars.remove

              async def team_accessLogs(self,
              *,
              before: str | int | None = None,
              count: str | int | None = None,
              page: str | int | None = None,
              team_id: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13126,7 +13208,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -13141,7 +13223,7 @@

              Methods

              return await self.api_call("team.accessLogs", http_verb="GET", params=kwargs)

              Gets the access logs for the current team. -https://api.slack.com/methods/team.accessLogs

              +https://docs.slack.dev/reference/methods/team.accessLogs

              async def team_billableInfo(self, *, team_id: str | None = None, user: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -13159,13 +13241,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return await self.api_call("team.billableInfo", http_verb="GET", params=kwargs)

              Gets billable users information for the current team. -https://api.slack.com/methods/team.billableInfo

              +https://docs.slack.dev/reference/methods/team.billableInfo

              async def team_billing_info(self, **kwargs) ‑> AsyncSlackResponse @@ -13180,12 +13262,12 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return await self.api_call("team.billing.info", params=kwargs)

              Reads a workspace's billing plan information. -https://api.slack.com/methods/team.billing.info

              +https://docs.slack.dev/reference/methods/team.billing.info

              async def team_externalTeams_disconnect(self, *, target_team: str, **kwargs) ‑> AsyncSlackResponse @@ -13202,7 +13284,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -13212,7 +13294,7 @@

              Methods

              return await self.api_call("team.externalTeams.disconnect", params=kwargs)
              +https://docs.slack.dev/reference/methods/team.externalTeams.disconnect

              async def team_externalTeams_list(self,
              *,
              connection_status_filter: str | None = None,
              slack_connect_pref_filter: Sequence[str] | None = None,
              sort_direction: str | None = None,
              sort_field: str | None = None,
              workspace_filter: Sequence[str] | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13235,7 +13317,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -13259,7 +13341,7 @@

              Methods

              return await self.api_call("team.externalTeams.list", http_verb="GET", params=kwargs)

              Returns a list of all the external teams connected and details about the connection. -https://api.slack.com/methods/team.externalTeams.list

              +https://docs.slack.dev/reference/methods/team.externalTeams.list

              async def team_info(self, *, team: str | None = None, domain: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -13277,13 +13359,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return await self.api_call("team.info", http_verb="GET", params=kwargs)

              Gets information about the current team. -https://api.slack.com/methods/team.info

              +https://docs.slack.dev/reference/methods/team.info

              async def team_integrationLogs(self,
              *,
              app_id: str | None = None,
              change_type: str | None = None,
              count: str | int | None = None,
              page: str | int | None = None,
              service_id: str | None = None,
              team_id: str | None = None,
              user: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13306,7 +13388,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -13322,7 +13404,7 @@

              Methods

              return await self.api_call("team.integrationLogs", http_verb="GET", params=kwargs)

              Gets the integration logs for the current team. -https://api.slack.com/methods/team.integrationLogs

              +https://docs.slack.dev/reference/methods/team.integrationLogs

              async def team_preferences_list(self, **kwargs) ‑> AsyncSlackResponse @@ -13337,12 +13419,12 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return await self.api_call("team.preferences.list", params=kwargs)

              Retrieve a list of a workspace's team preferences. -https://api.slack.com/methods/team.preferences.list

              +https://docs.slack.dev/reference/methods/team.preferences.list

              async def team_profile_get(self, *, visibility: str | None = None, **kwargs) ‑> AsyncSlackResponse @@ -13359,13 +13441,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return await self.api_call("team.profile.get", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/team.profile.get

              async def tooling_tokens_rotate(self, *, refresh_token: str, **kwargs) ‑> AsyncSlackResponse @@ -13382,13 +13464,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return await self.api_call("tooling.tokens.rotate", params=kwargs)

              Exchanges a refresh token for a new app configuration token -https://api.slack.com/methods/tooling.tokens.rotate

              +https://docs.slack.dev/reference/methods/tooling.tokens.rotate

              async def usergroups_create(self,
              *,
              name: str,
              channels: str | Sequence[str] | None = None,
              description: str | None = None,
              handle: str | None = None,
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13410,7 +13492,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -13428,7 +13510,7 @@

              Methods

              return await self.api_call("usergroups.create", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.create

              async def usergroups_disable(self,
              *,
              usergroup: str,
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13447,13 +13529,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return await self.api_call("usergroups.disable", params=kwargs)

              Disable an existing User Group -https://api.slack.com/methods/usergroups.disable

              +https://docs.slack.dev/reference/methods/usergroups.disable

              async def usergroups_enable(self,
              *,
              usergroup: str,
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13472,13 +13554,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return await self.api_call("usergroups.enable", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.enable

              async def usergroups_list(self,
              *,
              include_count: bool | None = None,
              include_disabled: bool | None = None,
              include_users: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13498,7 +13580,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -13511,7 +13593,7 @@

              Methods

              return await self.api_call("usergroups.list", http_verb="GET", params=kwargs)

              List all User Groups for a team -https://api.slack.com/methods/usergroups.list

              +https://docs.slack.dev/reference/methods/usergroups.list

              async def usergroups_update(self,
              *,
              usergroup: str,
              channels: str | Sequence[str] | None = None,
              description: str | None = None,
              handle: str | None = None,
              include_count: bool | None = None,
              name: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13534,7 +13616,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -13553,7 +13635,7 @@

              Methods

              return await self.api_call("usergroups.update", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.update

              async def usergroups_users_list(self,
              *,
              usergroup: str,
              include_disabled: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13572,7 +13654,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -13584,7 +13666,7 @@

              Methods

              return await self.api_call("usergroups.users.list", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.users.list

              async def usergroups_users_update(self,
              *,
              usergroup: str,
              users: str | Sequence[str],
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13604,7 +13686,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -13620,7 +13702,7 @@

              Methods

              return await self.api_call("usergroups.users.update", params=kwargs)

              Update the list of users for a User Group -https://api.slack.com/methods/usergroups.users.update

              +https://docs.slack.dev/reference/methods/usergroups.users.update

              async def users_conversations(self,
              *,
              cursor: str | None = None,
              exclude_archived: bool | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              types: str | Sequence[str] | None = None,
              user: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13642,7 +13724,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -13660,7 +13742,7 @@

              Methods

              return await self.api_call("users.conversations", http_verb="GET", params=kwargs)

              List conversations the calling user may access. -https://api.slack.com/methods/users.conversations

              +https://docs.slack.dev/reference/methods/users.conversations

              async def users_deletePhoto(self, **kwargs) ‑> AsyncSlackResponse @@ -13675,12 +13757,12 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return await self.api_call("users.deletePhoto", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/users.deletePhoto

              async def users_discoverableContacts_lookup(self, email: str, **kwargs) ‑> AsyncSlackResponse @@ -13696,13 +13778,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return await self.api_call("users.discoverableContacts.lookup", params=kwargs)

              Lookup an email address to see if someone is on Slack -https://api.slack.com/methods/users.discoverableContacts.lookup

              +https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup

              async def users_getPresence(self, *, user: str, **kwargs) ‑> AsyncSlackResponse @@ -13719,13 +13801,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return await self.api_call("users.getPresence", http_verb="GET", params=kwargs)

              Gets user presence information. -https://api.slack.com/methods/users.getPresence

              +https://docs.slack.dev/reference/methods/users.getPresence

              async def users_identity(self, **kwargs) ‑> AsyncSlackResponse @@ -13740,12 +13822,12 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return await self.api_call("users.identity", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/users.identity

              async def users_info(self, *, user: str, include_locale: bool | None = None, **kwargs) ‑> AsyncSlackResponse @@ -13763,13 +13845,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return await self.api_call("users.info", http_verb="GET", params=kwargs)

              Gets information about a user. -https://api.slack.com/methods/users.info

              +https://docs.slack.dev/reference/methods/users.info

              async def users_list(self,
              *,
              cursor: str | None = None,
              include_locale: bool | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13789,7 +13871,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -13802,7 +13884,7 @@

              Methods

              return await self.api_call("users.list", http_verb="GET", params=kwargs)

              Lists all users in a Slack team. -https://api.slack.com/methods/users.list

              +https://docs.slack.dev/reference/methods/users.list

              async def users_lookupByEmail(self, *, email: str, **kwargs) ‑> AsyncSlackResponse @@ -13819,13 +13901,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return await self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs)

              Find a user with an email address. -https://api.slack.com/methods/users.lookupByEmail

              +https://docs.slack.dev/reference/methods/users.lookupByEmail

              async def users_profile_get(self, *, user: str | None = None, include_labels: bool | None = None, **kwargs) ‑> AsyncSlackResponse @@ -13843,13 +13925,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return await self.api_call("users.profile.get", http_verb="GET", params=kwargs)

              Retrieves a user's profile information. -https://api.slack.com/methods/users.profile.get

              +https://docs.slack.dev/reference/methods/users.profile.get

              async def users_profile_set(self,
              *,
              name: str | None = None,
              value: str | None = None,
              user: str | None = None,
              profile: Dict | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13869,7 +13951,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -13884,7 +13966,7 @@

              Methods

              return await self.api_call("users.profile.set", json=kwargs)

              Set the profile information for a user. -https://api.slack.com/methods/users.profile.set

              +https://docs.slack.dev/reference/methods/users.profile.set

              async def users_setPhoto(self,
              *,
              image: str | io.IOBase,
              crop_w: str | int | None = None,
              crop_x: str | int | None = None,
              crop_y: str | int | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13904,13 +13986,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return await self.api_call("users.setPhoto", files={"image": image}, data=kwargs)
              +https://docs.slack.dev/reference/methods/users.setPhoto

              async def users_setPresence(self, *, presence: str, **kwargs) ‑> AsyncSlackResponse @@ -13927,13 +14009,13 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return await self.api_call("users.setPresence", params=kwargs)
              +https://docs.slack.dev/reference/methods/users.setPresence

              async def views_open(self,
              *,
              trigger_id: str | None = None,
              interactivity_pointer: str | None = None,
              view: dict | View,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13952,8 +14034,8 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -13965,8 +14047,8 @@

              Methods

              return await self.api_call("views.open", json=kwargs)
              +https://docs.slack.dev/reference/methods/views.open +See https://docs.slack.dev/surfaces/modals/ for details.

              async def views_publish(self,
              *,
              user_id: str,
              view: dict | View,
              hash: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -13986,8 +14068,8 @@

              Methods

              ) -> AsyncSlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -14000,8 +14082,8 @@

              Methods

              Publish a static view for a User. Create or update the view that comprises an -app's Home tab (https://api.slack.com/surfaces/tabs) -https://api.slack.com/methods/views.publish

              +app's Home tab (https://docs.slack.dev/surfaces/app-home/) +https://docs.slack.dev/reference/methods/views.publish

              async def views_push(self,
              *,
              trigger_id: str | None = None,
              interactivity_pointer: str | None = None,
              view: dict | View,
              **kwargs) ‑> AsyncSlackResponse
              @@ -14023,9 +14105,9 @@

              Methods

              Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -14040,9 +14122,9 @@

              Methods

              Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. -Read the modals documentation (https://api.slack.com/surfaces/modals) +Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. -https://api.slack.com/methods/views.push

              +https://docs.slack.dev/reference/methods/views.push

              async def views_update(self,
              *,
              view: dict | View,
              external_id: str | None = None,
              view_id: str | None = None,
              hash: str | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -14064,9 +14146,9 @@

              Methods

              """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -14086,9 +14168,119 @@

              Methods

              Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. -See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) +See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. -https://api.slack.com/methods/views.update

              +https://docs.slack.dev/reference/methods/views.update

              + +
              +
              +
              + +Expand source code + +
              async def workflows_featured_add(
              +    self,
              +    *,
              +    channel_id: str,
              +    trigger_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> AsyncSlackResponse:
              +    """Add featured workflows to a channel.
              +    https://docs.slack.dev/reference/methods/workflows.featured.add
              +    """
              +    kwargs.update({"channel_id": channel_id})
              +    if isinstance(trigger_ids, (list, tuple)):
              +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
              +    else:
              +        kwargs.update({"trigger_ids": trigger_ids})
              +    return await self.api_call("workflows.featured.add", params=kwargs)
              +
              + +
              + +
              +
              + +Expand source code + +
              async def workflows_featured_list(
              +    self,
              +    *,
              +    channel_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> AsyncSlackResponse:
              +    """List the featured workflows for specified channels.
              +    https://docs.slack.dev/reference/methods/workflows.featured.list
              +    """
              +    if isinstance(channel_ids, (list, tuple)):
              +        kwargs.update({"channel_ids": ",".join(channel_ids)})
              +    else:
              +        kwargs.update({"channel_ids": channel_ids})
              +    return await self.api_call("workflows.featured.list", params=kwargs)
              +
              +

              List the featured workflows for specified channels. +https://docs.slack.dev/reference/methods/workflows.featured.list

              +
              + +
              +
              + +Expand source code + +
              async def workflows_featured_remove(
              +    self,
              +    *,
              +    channel_id: str,
              +    trigger_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> AsyncSlackResponse:
              +    """Remove featured workflows from a channel.
              +    https://docs.slack.dev/reference/methods/workflows.featured.remove
              +    """
              +    kwargs.update({"channel_id": channel_id})
              +    if isinstance(trigger_ids, (list, tuple)):
              +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
              +    else:
              +        kwargs.update({"trigger_ids": trigger_ids})
              +    return await self.api_call("workflows.featured.remove", params=kwargs)
              +
              + +
              + +
              +
              + +Expand source code + +
              async def workflows_featured_set(
              +    self,
              +    *,
              +    channel_id: str,
              +    trigger_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> AsyncSlackResponse:
              +    """Set featured workflows for a channel.
              +    https://docs.slack.dev/reference/methods/workflows.featured.set
              +    """
              +    kwargs.update({"channel_id": channel_id})
              +    if isinstance(trigger_ids, (list, tuple)):
              +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
              +    else:
              +        kwargs.update({"trigger_ids": trigger_ids})
              +    return await self.api_call("workflows.featured.set", params=kwargs)
              +
              +
              async def workflows_stepCompleted(self, *, workflow_step_execute_id: str, outputs: dict | None = None, **kwargs) ‑> AsyncSlackResponse @@ -14106,7 +14298,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -14116,7 +14308,7 @@

              Methods

              return await self.api_call("workflows.stepCompleted", json=kwargs)

              Indicate a successful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepCompleted

              +https://docs.slack.dev/reference/methods/workflows.stepCompleted

              async def workflows_stepFailed(self, *, workflow_step_execute_id: str, error: Dict[str, str], **kwargs) ‑> AsyncSlackResponse @@ -14134,7 +14326,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -14147,7 +14339,7 @@

              Methods

              return await self.api_call("workflows.stepFailed", json=kwargs)

              Indicate an unsuccessful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepFailed

              +https://docs.slack.dev/reference/methods/workflows.stepFailed

              async def workflows_updateStep(self,
              *,
              workflow_step_edit_id: str,
              inputs: Dict[str, Any] | None = None,
              outputs: List[Dict[str, str]] | None = None,
              **kwargs) ‑> AsyncSlackResponse
              @@ -14166,7 +14358,7 @@

              Methods

              **kwargs, ) -> AsyncSlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -14178,7 +14370,7 @@

              Methods

              return await self.api_call("workflows.updateStep", json=kwargs)

              Update the configuration for a workflow extension step. -https://api.slack.com/methods/workflows.updateStep

              +https://docs.slack.dev/reference/methods/workflows.updateStep

              Inherited members

              @@ -14513,6 +14705,10 @@

              views_publish
            • views_push
            • views_update
            • +
            • workflows_featured_add
            • +
            • workflows_featured_list
            • +
            • workflows_featured_remove
            • +
            • workflows_featured_set
            • workflows_stepCompleted
            • workflows_stepFailed
            • workflows_updateStep
            • diff --git a/docs/reference/web/base_client.html b/docs/reference/web/base_client.html index 8e952ec75..affbba13c 100644 --- a/docs/reference/web/base_client.html +++ b/docs/reference/web/base_client.html @@ -633,7 +633,7 @@

              Classes

              header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview Args: signing_secret: Your application's signing secret, available in the @@ -690,7 +690,7 @@

              Static methods

              header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview Args: signing_secret: Your application's signing secret, available in the @@ -720,7 +720,7 @@

              Static methods

              On each HTTP request that Slack sends, we add an X-Slack-Signature HTTP header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash.

              -

              https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview

              +

              https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview

              Args

              signing_secret
              diff --git a/docs/reference/web/client.html b/docs/reference/web/client.html index 28212dff5..3a315c83d 100644 --- a/docs/reference/web/client.html +++ b/docs/reference/web/client.html @@ -59,7 +59,7 @@

              Classes

              class WebClient(BaseClient):
                   """A WebClient allows apps to communicate with the Slack Platform's Web API.
               
              -    https://api.slack.com/methods
              +    https://docs.slack.dev/reference/methods
               
                   The Slack Web API is an interface for querying information from
                   and enacting change in a Slack workspace.
              @@ -130,7 +130,7 @@ 

              Classes

              **kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -152,7 +152,7 @@

              Classes

              Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -179,7 +179,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -200,7 +200,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -220,7 +220,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -240,7 +240,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -264,7 +264,7 @@

              Classes

              Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -291,7 +291,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -313,7 +313,7 @@

              Classes

              ) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -344,7 +344,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -372,7 +372,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -389,7 +389,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -411,7 +411,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -431,7 +431,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -450,7 +450,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -469,7 +469,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -485,7 +485,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -504,7 +504,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -523,7 +523,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -543,7 +543,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -558,7 +558,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -579,7 +579,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -599,7 +599,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -619,7 +619,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs) @@ -632,7 +632,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -649,7 +649,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs) @@ -661,7 +661,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs) @@ -674,7 +674,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs) @@ -692,7 +692,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -723,7 +723,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -735,7 +735,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -748,7 +748,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -764,7 +764,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -777,7 +777,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -797,7 +797,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -825,7 +825,7 @@

              Classes

              """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -852,7 +852,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -875,7 +875,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -898,7 +898,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -923,7 +923,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -947,7 +947,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -965,7 +965,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -977,7 +977,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -990,7 +990,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -1002,7 +1002,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -1027,7 +1027,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -1045,7 +1045,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1058,7 +1058,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1071,7 +1071,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1083,7 +1083,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1096,7 +1096,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1111,7 +1111,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1134,7 +1134,7 @@

              Classes

              ) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1152,7 +1152,7 @@

              Classes

              ) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1176,7 +1176,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1201,7 +1201,7 @@

              Classes

              ) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1223,7 +1223,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1245,7 +1245,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1265,7 +1265,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1287,7 +1287,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1302,7 +1302,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1322,7 +1322,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1339,7 +1339,7 @@

              Classes

              ) -> SlackResponse: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1357,7 +1357,7 @@

              Classes

              ) -> SlackResponse: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1379,7 +1379,7 @@

              Classes

              ) -> SlackResponse: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1396,7 +1396,7 @@

              Classes

              ) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1414,7 +1414,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1428,7 +1428,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1448,7 +1448,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1467,7 +1467,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1488,7 +1488,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1509,7 +1509,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1529,7 +1529,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs) @@ -1543,7 +1543,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1555,7 +1555,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs) @@ -1568,7 +1568,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1581,7 +1581,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1594,7 +1594,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1607,7 +1607,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1621,7 +1621,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1639,7 +1639,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1657,7 +1657,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1676,7 +1676,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1696,7 +1696,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1728,7 +1728,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1752,7 +1752,7 @@

              Classes

              def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -1760,7 +1760,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1781,7 +1781,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs) @@ -1794,7 +1794,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs) @@ -1808,7 +1808,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs) @@ -1821,7 +1821,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs) @@ -1834,7 +1834,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs) @@ -1855,7 +1855,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1885,7 +1885,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1906,7 +1906,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1926,7 +1926,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1945,7 +1945,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1960,7 +1960,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs) @@ -1973,7 +1973,7 @@

              Classes

              ) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -1988,7 +1988,7 @@

              Classes

              ) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs) @@ -2001,7 +2001,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) @@ -2013,7 +2013,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2028,7 +2028,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs) @@ -2040,7 +2040,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs) @@ -2053,7 +2053,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2070,7 +2070,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2086,7 +2086,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2100,7 +2100,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return self.api_call("assistant.threads.setStatus", params=kwargs) @@ -2114,7 +2114,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2129,7 +2129,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2143,7 +2143,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2153,7 +2153,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs) @@ -2165,7 +2165,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs) @@ -2183,7 +2183,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2209,7 +2209,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2229,7 +2229,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2242,7 +2242,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2255,7 +2255,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2274,7 +2274,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2301,7 +2301,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2313,7 +2313,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2326,7 +2326,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2340,7 +2340,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2356,7 +2356,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2376,7 +2376,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs) @@ -2389,7 +2389,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs) @@ -2401,7 +2401,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs) @@ -2416,7 +2416,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2441,7 +2441,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2464,7 +2464,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs) @@ -2472,7 +2472,7 @@

              Classes

              # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def channels_archive( @@ -2651,7 +2651,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs) @@ -2665,7 +2665,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2684,7 +2684,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2697,7 +2697,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs) @@ -2717,10 +2717,11 @@

              Classes

              link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2736,11 +2737,12 @@

              Classes

              "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2764,10 +2766,11 @@

              Classes

              username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2788,11 +2791,12 @@

              Classes

              "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2801,7 +2805,7 @@

              Classes

              *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2812,10 +2816,11 @@

              Classes

              unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2832,11 +2837,12 @@

              Classes

              "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) @@ -2855,7 +2861,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2889,10 +2895,11 @@

              Classes

              parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2906,6 +2913,7 @@

              Classes

              "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2914,7 +2922,7 @@

              Classes

              kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) @@ -2930,7 +2938,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -2956,7 +2964,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -2980,7 +2988,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -2992,7 +3000,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs) @@ -3004,7 +3012,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs) @@ -3018,7 +3026,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs) @@ -3031,7 +3039,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -3040,7 +3048,7 @@

              Classes

              self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3064,7 +3072,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3088,7 +3096,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3108,7 +3116,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3131,7 +3139,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3153,7 +3161,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs) @@ -3166,7 +3174,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs) @@ -3178,7 +3186,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs) @@ -3194,7 +3202,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3220,7 +3228,7 @@

              Classes

              ) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3233,7 +3241,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs) @@ -3247,7 +3255,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3261,7 +3269,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3280,7 +3288,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs) @@ -3299,7 +3307,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3325,7 +3333,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3346,7 +3354,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3364,7 +3372,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3391,7 +3399,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs) @@ -3404,7 +3412,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs) @@ -3416,7 +3424,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs) @@ -3429,7 +3437,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs) @@ -3442,7 +3450,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3454,7 +3462,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs) @@ -3463,7 +3471,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs) @@ -3475,7 +3483,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3487,7 +3495,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3499,7 +3507,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3514,7 +3522,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) @@ -3527,7 +3535,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs) @@ -3539,7 +3547,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs) @@ -3555,7 +3563,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3583,7 +3591,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3611,7 +3619,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3627,7 +3635,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3652,7 +3660,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3691,7 +3699,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3726,7 +3734,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3740,7 +3748,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3758,7 +3766,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs) @@ -3770,7 +3778,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs) @@ -3789,7 +3797,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3842,12 +3850,12 @@

              Classes

              ) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3933,7 +3941,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -3956,7 +3964,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -3979,7 +3987,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs) @@ -3992,7 +4000,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs) @@ -4000,7 +4008,7 @@

              Classes

              # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def groups_archive( @@ -4181,7 +4189,7 @@

              Classes

              # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def im_close( @@ -4257,7 +4265,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4269,7 +4277,7 @@

              Classes

              # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def mpim_close( @@ -4356,7 +4364,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4382,7 +4390,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4402,7 +4410,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs) @@ -4418,7 +4426,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4439,7 +4447,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs) @@ -4451,7 +4459,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs) @@ -4463,7 +4471,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4476,7 +4484,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs) @@ -4490,7 +4498,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs) @@ -4506,7 +4514,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4532,7 +4540,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4558,7 +4566,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4582,7 +4590,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4603,7 +4611,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs) @@ -4616,7 +4624,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs) @@ -4629,7 +4637,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4641,7 +4649,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4654,7 +4662,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4672,7 +4680,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4700,7 +4708,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4728,7 +4736,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4757,7 +4765,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4783,7 +4791,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -4806,7 +4814,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -4829,7 +4837,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -4853,7 +4861,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -4875,7 +4883,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) @@ -4885,7 +4893,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs) @@ -4896,7 +4904,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -4918,7 +4926,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4949,7 +4957,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs) @@ -4967,7 +4975,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -4989,7 +4997,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -4999,7 +5007,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs) @@ -5015,7 +5023,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -5041,7 +5049,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs) @@ -5055,7 +5063,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs) @@ -5070,7 +5078,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5095,7 +5103,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5122,7 +5130,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5143,7 +5151,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5170,7 +5178,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5192,7 +5200,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5203,7 +5211,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5213,7 +5221,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5225,7 +5233,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5240,7 +5248,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5259,7 +5267,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5274,7 +5282,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5286,7 +5294,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs) @@ -5297,7 +5305,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5310,7 +5318,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5325,7 +5333,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5348,8 +5356,8 @@

              Classes

              **kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5372,9 +5380,9 @@

              Classes

              Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5397,9 +5405,9 @@

              Classes

              """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5426,8 +5434,8 @@

              Classes

              ) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5438,6 +5446,72 @@

              Classes

              # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -5446,7 +5520,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5463,7 +5537,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5484,7 +5558,7 @@

              Classes

              **kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -5496,7 +5570,7 @@

              Classes

              return self.api_call("workflows.updateStep", json=kwargs)

              A WebClient allows apps to communicate with the Slack Platform's Web API.

              -

              https://api.slack.com/methods

              +

              https://docs.slack.dev/reference/methods

              The Slack Web API is an interface for querying information from and enacting change in a Slack workspace.

              This client handles constructing and sending HTTP requests to Slack @@ -5576,7 +5650,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -5586,7 +5660,7 @@

              Methods

              return self.api_call("admin.analytics.getFile", params=kwargs)

              Retrieve analytics data for a given date, presented as a compressed JSON file -https://api.slack.com/methods/admin.analytics.getFile

              +https://docs.slack.dev/reference/methods/admin.analytics.getFile

              def admin_apps_activities_list(self,
              *,
              app_id: str | None = None,
              component_id: str | None = None,
              component_type: str | None = None,
              log_event_type: str | None = None,
              max_date_created: int | None = None,
              min_date_created: int | None = None,
              min_log_level: str | None = None,
              sort_direction: str | None = None,
              source: str | None = None,
              team_id: str | None = None,
              trace_id: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -5615,7 +5689,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -5637,7 +5711,7 @@

              Methods

              return self.api_call("admin.apps.activities.list", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.apps.activities.list

              def admin_apps_approve(self,
              *,
              app_id: str | None = None,
              request_id: str | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -5660,7 +5734,7 @@

              Methods

              Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -5681,7 +5755,7 @@

              Methods

              Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.approve

              +https://docs.slack.dev/reference/methods/admin.apps.approve

              def admin_apps_approved_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -5701,7 +5775,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -5714,7 +5788,7 @@

              Methods

              return self.api_call("admin.apps.approved.list", http_verb="GET", params=kwargs)

              List approved apps for an org or workspace. -https://api.slack.com/methods/admin.apps.approved.list

              +https://docs.slack.dev/reference/methods/admin.apps.approved.list

              def admin_apps_clearResolution(self,
              *,
              app_id: str,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -5733,7 +5807,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -5745,7 +5819,7 @@

              Methods

              return self.api_call("admin.apps.clearResolution", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.apps.clearResolution

              def admin_apps_config_lookup(self, *, app_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -5762,7 +5836,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -5771,7 +5845,7 @@

              Methods

              return self.api_call("admin.apps.config.lookup", params=kwargs)

              Look up the app config for connectors by their IDs -https://api.slack.com/methods/admin.apps.config.lookup

              +https://docs.slack.dev/reference/methods/admin.apps.config.lookup

              def admin_apps_config_set(self,
              *,
              app_id: str,
              domain_restrictions: Dict[str, Any] | None = None,
              workflow_auth_strategy: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -5790,7 +5864,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -5803,7 +5877,7 @@

              Methods

              return self.api_call("admin.apps.config.set", params=kwargs)

              Set the app config for a connector -https://api.slack.com/methods/admin.apps.config.set

              +https://docs.slack.dev/reference/methods/admin.apps.config.set

              def admin_apps_requests_cancel(self,
              *,
              request_id: str,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -5822,7 +5896,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -5834,7 +5908,7 @@

              Methods

              return self.api_call("admin.apps.requests.cancel", http_verb="POST", params=kwargs)

              List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.cancel

              +https://docs.slack.dev/reference/methods/admin.apps.requests.cancel

              def admin_apps_requests_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -5853,7 +5927,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -5865,7 +5939,7 @@

              Methods

              return self.api_call("admin.apps.requests.list", http_verb="GET", params=kwargs)

              List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.list

              +https://docs.slack.dev/reference/methods/admin.apps.requests.list

              def admin_apps_restrict(self,
              *,
              app_id: str | None = None,
              request_id: str | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -5888,7 +5962,7 @@

              Methods

              Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -5909,7 +5983,7 @@

              Methods

              Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.restrict

              +https://docs.slack.dev/reference/methods/admin.apps.restrict

              def admin_apps_restricted_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -5929,7 +6003,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -5942,7 +6016,7 @@

              Methods

              return self.api_call("admin.apps.restricted.list", http_verb="GET", params=kwargs)

              List restricted apps for an org or workspace. -https://api.slack.com/methods/admin.apps.restricted.list

              +https://docs.slack.dev/reference/methods/admin.apps.restricted.list

              def admin_apps_uninstall(self,
              *,
              app_id: str,
              enterprise_id: str | None = None,
              team_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -5962,7 +6036,7 @@

              Methods

              ) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -5976,7 +6050,7 @@

              Methods

              Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. -https://api.slack.com/methods/admin.apps.uninstall

              +https://docs.slack.dev/reference/methods/admin.apps.uninstall

              def admin_auth_policy_assignEntities(self,
              *,
              entity_ids: str | Sequence[str],
              policy_name: str,
              entity_type: str,
              **kwargs) ‑> SlackResponse
              @@ -5995,7 +6069,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6006,7 +6080,7 @@

              Methods

              return self.api_call("admin.auth.policy.assignEntities", http_verb="POST", params=kwargs)

              Assign entities to a particular authentication policy. -https://api.slack.com/methods/admin.auth.policy.assignEntities

              +https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities

              def admin_auth_policy_getEntities(self,
              *,
              policy_name: str,
              cursor: str | None = None,
              entity_type: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6026,7 +6100,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -6038,7 +6112,7 @@

              Methods

              return self.api_call("admin.auth.policy.getEntities", http_verb="POST", params=kwargs)

              Fetch all the entities assigned to a particular authentication policy by name. -https://api.slack.com/methods/admin.auth.policy.getEntities

              +https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities

              def admin_auth_policy_removeEntities(self,
              *,
              entity_ids: str | Sequence[str],
              policy_name: str,
              entity_type: str,
              **kwargs) ‑> SlackResponse
              @@ -6057,7 +6131,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6068,7 +6142,7 @@

              Methods

              return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs)

              Remove specified entities from a specified authentication policy. -https://api.slack.com/methods/admin.auth.policy.removeEntities

              +https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities

              def admin_barriers_create(self,
              *,
              barriered_from_usergroup_ids: str | Sequence[str],
              primary_usergroup_id: str,
              restricted_subjects: str | Sequence[str],
              **kwargs) ‑> SlackResponse
              @@ -6087,7 +6161,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6101,7 +6175,7 @@

              Methods

              return self.api_call("admin.barriers.create", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.barriers.create

              def admin_barriers_delete(self, *, barrier_id: str, **kwargs) ‑> SlackResponse @@ -6118,13 +6192,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs)

              Delete an existing Information Barrier -https://api.slack.com/methods/admin.barriers.delete

              +https://docs.slack.dev/reference/methods/admin.barriers.delete

              def admin_barriers_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -6142,7 +6216,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -6152,7 +6226,7 @@

              Methods

              return self.api_call("admin.barriers.list", http_verb="GET", params=kwargs)

              Get all Information Barriers for your organization -https://api.slack.com/methods/admin.barriers.list

              +https://docs.slack.dev/reference/methods/admin.barriers.list

              def admin_barriers_update(self,
              *,
              barrier_id: str,
              barriered_from_usergroup_ids: str | Sequence[str],
              primary_usergroup_id: str,
              restricted_subjects: str | Sequence[str],
              **kwargs) ‑> SlackResponse
              @@ -6172,7 +6246,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6186,7 +6260,7 @@

              Methods

              return self.api_call("admin.barriers.update", http_verb="POST", params=kwargs)

              Update an existing Information Barrier -https://api.slack.com/methods/admin.barriers.update

              +https://docs.slack.dev/reference/methods/admin.barriers.update

              def admin_conversations_archive(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6203,13 +6277,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs)

              Archive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

              +https://docs.slack.dev/reference/methods/admin.conversations.archive

              def admin_conversations_bulkArchive(self, *, channel_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -6226,13 +6300,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs)

              Archive public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkArchive

              +https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive

              def admin_conversations_bulkDelete(self, *, channel_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -6273,7 +6347,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -6284,7 +6358,7 @@

              Methods

              return self.api_call("admin.conversations.bulkMove", params=kwargs)

              Move public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkMove

              +https://docs.slack.dev/reference/methods/admin.conversations.bulkMove

              def admin_conversations_convertToPrivate(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6301,13 +6375,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs)

              Convert a public channel to a private channel. -https://api.slack.com/methods/admin.conversations.convertToPrivate

              +https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate

              def admin_conversations_convertToPublic(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6324,13 +6398,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs)

              Convert a privte channel to a public channel. -https://api.slack.com/methods/admin.conversations.convertToPublic

              +https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic

              def admin_conversations_create(self,
              *,
              is_private: bool,
              name: str,
              description: str | None = None,
              org_wide: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6351,7 +6425,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -6365,7 +6439,7 @@

              Methods

              return self.api_call("admin.conversations.create", params=kwargs)

              Create a public or private channel-based conversation. -https://api.slack.com/methods/admin.conversations.create

              +https://docs.slack.dev/reference/methods/admin.conversations.create

              def admin_conversations_createForObjects(self,
              *,
              object_id: str,
              salesforce_org_id: str,
              invite_object_team: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6384,7 +6458,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -6392,7 +6466,7 @@

              Methods

              return self.api_call("admin.conversations.createForObjects", params=kwargs)

              Create a Salesforce channel for the corresponding object provided. -https://api.slack.com/methods/admin.conversations.createForObjects

              +https://docs.slack.dev/reference/methods/admin.conversations.createForObjects

              def admin_conversations_delete(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6409,13 +6483,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.delete

              def admin_conversations_disconnectShared(self,
              *,
              channel_id: str,
              leaving_team_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6433,7 +6507,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -6443,7 +6517,7 @@

              Methods

              return self.api_call("admin.conversations.disconnectShared", params=kwargs)

              Disconnect a connected channel from one or more workspaces. -https://api.slack.com/methods/admin.conversations.disconnectShared

              +https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared

              def admin_conversations_ekm_listOriginalConnectedChannelInfo(self,
              *,
              channel_ids: str | Sequence[str] | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              team_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6465,7 +6539,7 @@

              Methods

              """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -6486,7 +6560,7 @@

              Methods

              List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. -https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

              +https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

              def admin_conversations_getConversationPrefs(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6503,13 +6577,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs)

              Get conversation preferences for a public or private channel. -https://api.slack.com/methods/admin.conversations.getConversationPrefs

              +https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs

              def admin_conversations_getCustomRetention(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6526,13 +6600,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention

              def admin_conversations_getTeams(self,
              *,
              channel_id: str,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6551,7 +6625,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -6563,7 +6637,7 @@

              Methods

              return self.api_call("admin.conversations.getTeams", params=kwargs)

              Set the workspaces in an Enterprise grid org that connect to a channel. -https://api.slack.com/methods/admin.conversations.getTeams

              +https://docs.slack.dev/reference/methods/admin.conversations.getTeams

              def admin_conversations_invite(self, *, channel_id: str, user_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -6581,7 +6655,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -6592,7 +6666,7 @@

              Methods

              return self.api_call("admin.conversations.invite", params=kwargs)

              Invite a user to a public or private channel. -https://api.slack.com/methods/admin.conversations.invite

              +https://docs.slack.dev/reference/methods/admin.conversations.invite

              def admin_conversations_linkObjects(self, *, channel: str, record_id: str, salesforce_org_id: str, **kwargs) ‑> SlackResponse @@ -6611,7 +6685,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -6623,7 +6697,7 @@

              Methods

              return self.api_call("admin.conversations.linkObjects", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.linkObjects

              def admin_conversations_lookup(self,
              *,
              last_message_activity_before: int,
              team_ids: str | Sequence[str],
              cursor: str | None = None,
              limit: int | None = None,
              max_member_count: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6644,7 +6718,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -6661,7 +6735,7 @@

              Methods

              return self.api_call("admin.conversations.lookup", params=kwargs)

              Returns channels on the given team using the filters. -https://api.slack.com/methods/admin.conversations.lookup

              +https://docs.slack.dev/reference/methods/admin.conversations.lookup

              def admin_conversations_removeCustomRetention(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6678,13 +6752,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention

              def admin_conversations_rename(self, *, channel_id: str, name: str, **kwargs) ‑> SlackResponse @@ -6702,13 +6776,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.rename

              def admin_conversations_restrictAccess_addGroup(self, *, channel_id: str, group_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -6727,7 +6801,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -6743,7 +6817,7 @@

              Methods

              )

              Add an allowlist of IDP groups for accessing a channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup

              +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup

              def admin_conversations_restrictAccess_listGroups(self, *, channel_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -6761,7 +6835,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -6776,7 +6850,7 @@

              Methods

              )
              +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups

              def admin_conversations_restrictAccess_removeGroup(self, *, channel_id: str, group_id: str, team_id: str, **kwargs) ‑> SlackResponse @@ -6795,7 +6869,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -6811,7 +6885,7 @@

              Methods

              )

              Remove a linked IDP group linked from a private channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup

              +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup

              def admin_conversations_setConversationPrefs(self, *, channel_id: str, prefs: str | Dict[str, str], **kwargs) ‑> SlackResponse @@ -6877,7 +6951,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -6887,7 +6961,7 @@

              Methods

              return self.api_call("admin.conversations.setConversationPrefs", params=kwargs)

              Set the posting permissions for a public or private channel. -https://api.slack.com/methods/admin.conversations.setConversationPrefs

              +https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs

              def admin_conversations_setCustomRetention(self, *, channel_id: str, duration_days: int, **kwargs) ‑> SlackResponse @@ -6905,13 +6979,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention

              def admin_conversations_setTeams(self,
              *,
              channel_id: str,
              org_channel: bool | None = None,
              target_team_ids: str | Sequence[str] | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6931,7 +7005,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -6947,7 +7021,7 @@

              Methods

              return self.api_call("admin.conversations.setTeams", params=kwargs)

              Set the workspaces in an Enterprise grid org that connect to a public or private channel. -https://api.slack.com/methods/admin.conversations.setTeams

              +https://docs.slack.dev/reference/methods/admin.conversations.setTeams

              def admin_conversations_unarchive(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6964,13 +7038,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs)

              Unarchive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

              +https://docs.slack.dev/reference/methods/admin.conversations.archive

              def admin_conversations_unlinkObjects(self, *, channel: str, new_name: str, **kwargs) ‑> SlackResponse @@ -6988,7 +7062,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -6999,7 +7073,7 @@

              Methods

              return self.api_call("admin.conversations.unlinkObjects", params=kwargs)

              Unlink a Salesforce record from a channel. -https://api.slack.com/methods/admin.conversations.unlinkObjects

              +https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects

              def admin_emoji_add(self, *, name: str, url: str, **kwargs) ‑> SlackResponse @@ -7017,13 +7091,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.emoji.add

              def admin_emoji_addAlias(self, *, alias_for: str, name: str, **kwargs) ‑> SlackResponse @@ -7041,13 +7115,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.emoji.addAlias

              def admin_emoji_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -7065,13 +7139,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs)

              List emoji for an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.list

              +https://docs.slack.dev/reference/methods/admin.emoji.list

              def admin_emoji_remove(self, *, name: str, **kwargs) ‑> SlackResponse @@ -7088,13 +7162,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs)

              Remove an emoji across an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.remove

              +https://docs.slack.dev/reference/methods/admin.emoji.remove

              def admin_emoji_rename(self, *, name: str, new_name: str, **kwargs) ‑> SlackResponse @@ -7112,13 +7186,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.emoji.rename

              def admin_functions_list(self,
              *,
              app_ids: str | Sequence[str],
              team_id: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7138,7 +7212,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -7154,7 +7228,7 @@

              Methods

              return self.api_call("admin.functions.list", params=kwargs)

              Look up functions by a set of apps -https://api.slack.com/methods/admin.functions.list

              +https://docs.slack.dev/reference/methods/admin.functions.list

              def admin_functions_permissions_lookup(self, *, function_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -7172,7 +7246,7 @@

              Methods

              ) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -7182,7 +7256,7 @@

              Methods

              Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. -https://api.slack.com/methods/admin.functions.permissions.lookup

              +https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup

              def admin_functions_permissions_set(self,
              *,
              function_id: str,
              visibility: str,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7202,7 +7276,7 @@

              Methods

              ) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -7219,7 +7293,7 @@

              Methods

              Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities -https://api.slack.com/methods/admin.functions.permissions.set

              +https://docs.slack.dev/reference/methods/admin.functions.permissions.set

              def admin_inviteRequests_approve(self, *, invite_request_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -7237,13 +7311,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.inviteRequests.approve

              def admin_inviteRequests_approved_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7262,7 +7336,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -7274,7 +7348,7 @@

              Methods

              return self.api_call("admin.inviteRequests.approved.list", params=kwargs)

              List all approved workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.approved.list

              +https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list

              def admin_inviteRequests_denied_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7293,7 +7367,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -7305,7 +7379,7 @@

              Methods

              return self.api_call("admin.inviteRequests.denied.list", params=kwargs)

              List all denied workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.denied.list

              +https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list

              def admin_inviteRequests_deny(self, *, invite_request_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -7323,13 +7397,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.inviteRequests.deny

              def admin_inviteRequests_list(self, **kwargs) ‑> SlackResponse @@ -7365,7 +7439,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7379,7 +7453,7 @@

              Methods

              return self.api_call("admin.roles.addAssignments", params=kwargs)

              Adds members to the specified role with the specified scopes -https://api.slack.com/methods/admin.roles.addAssignments

              +https://docs.slack.dev/reference/methods/admin.roles.addAssignments

              def admin_roles_listAssignments(self,
              *,
              role_ids: str | Sequence[str] | None = None,
              entity_ids: str | Sequence[str] | None = None,
              cursor: str | None = None,
              limit: str | int | None = None,
              sort_dir: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7401,7 +7475,7 @@

              Methods

              ) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -7416,7 +7490,7 @@

              Methods

              Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities -https://api.slack.com/methods/admin.roles.listAssignments

              +https://docs.slack.dev/reference/methods/admin.roles.listAssignments

              def admin_roles_removeAssignments(self,
              *,
              role_id: str,
              entity_ids: str | Sequence[str],
              user_ids: str | Sequence[str],
              **kwargs) ‑> SlackResponse
              @@ -7435,7 +7509,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7449,7 +7523,7 @@

              Methods

              return self.api_call("admin.roles.removeAssignments", params=kwargs)

              Removes a set of users from a role for the given scopes and entities -https://api.slack.com/methods/admin.roles.removeAssignments

              +https://docs.slack.dev/reference/methods/admin.roles.removeAssignments

              def admin_teams_admins_list(self, *, team_id: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -7468,7 +7542,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -7480,7 +7554,7 @@

              Methods

              return self.api_call("admin.teams.admins.list", http_verb="GET", params=kwargs)

              List all of the admins on a given workspace. -https://api.slack.com/methods/admin.inviteRequests.list

              +https://docs.slack.dev/reference/methods/admin.inviteRequests.list

              def admin_teams_create(self,
              *,
              team_domain: str,
              team_name: str,
              team_description: str | None = None,
              team_discoverability: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7500,7 +7574,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -7513,7 +7587,7 @@

              Methods

              return self.api_call("admin.teams.create", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.create

              def admin_teams_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -7531,13 +7605,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs)

              List all teams on an Enterprise organization. -https://api.slack.com/methods/admin.teams.list

              +https://docs.slack.dev/reference/methods/admin.teams.list

              def admin_teams_owners_list(self, *, team_id: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -7556,13 +7630,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs)

              List all of the admins on a given workspace. -https://api.slack.com/methods/admin.teams.owners.list

              +https://docs.slack.dev/reference/methods/admin.teams.owners.list

              def admin_teams_settings_info(self, *, team_id: str, **kwargs) ‑> SlackResponse @@ -7579,13 +7653,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs)

              Fetch information about settings in a workspace -https://api.slack.com/methods/admin.teams.settings.info

              +https://docs.slack.dev/reference/methods/admin.teams.settings.info

              def admin_teams_settings_setDefaultChannels(self, *, team_id: str, channel_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -7603,7 +7677,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -7613,7 +7687,7 @@

              Methods

              return self.api_call("admin.teams.settings.setDefaultChannels", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels

              def admin_teams_settings_setDescription(self, *, team_id: str, description: str, **kwargs) ‑> SlackResponse @@ -7631,13 +7705,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription

              def admin_teams_settings_setDiscoverability(self, *, team_id: str, discoverability: str, **kwargs) ‑> SlackResponse @@ -7655,13 +7729,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability

              def admin_teams_settings_setIcon(self, *, team_id: str, image_url: str, **kwargs) ‑> SlackResponse @@ -7679,13 +7753,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon

              def admin_teams_settings_setName(self, *, team_id: str, name: str, **kwargs) ‑> SlackResponse @@ -7703,13 +7777,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setName

              def admin_usergroups_addChannels(self,
              *,
              channel_ids: str | Sequence[str],
              usergroup_id: str,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7728,7 +7802,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7738,7 +7812,7 @@

              Methods

              return self.api_call("admin.usergroups.addChannels", params=kwargs)

              Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.addChannels

              +https://docs.slack.dev/reference/methods/admin.usergroups.addChannels

              def admin_usergroups_addTeams(self,
              *,
              usergroup_id: str,
              team_ids: str | Sequence[str],
              auto_provision: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7757,7 +7831,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -7767,7 +7841,7 @@

              Methods

              return self.api_call("admin.usergroups.addTeams", params=kwargs)

              Associate one or more default workspaces with an organization-wide IDP group. -https://api.slack.com/methods/admin.usergroups.addTeams

              +https://docs.slack.dev/reference/methods/admin.usergroups.addTeams

              def admin_usergroups_listChannels(self,
              *,
              usergroup_id: str,
              include_num_members: bool | None = None,
              team_id: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7786,7 +7860,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -7798,7 +7872,7 @@

              Methods

              return self.api_call("admin.usergroups.listChannels", params=kwargs)

              Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.listChannels

              +https://docs.slack.dev/reference/methods/admin.usergroups.listChannels

              def admin_usergroups_removeChannels(self, *, usergroup_id: str, channel_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -7816,7 +7890,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7826,7 +7900,7 @@

              Methods

              return self.api_call("admin.usergroups.removeChannels", params=kwargs)

              Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.removeChannels

              +https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels

              def admin_users_assign(self,
              *,
              team_id: str,
              user_id: str,
              channel_ids: str | Sequence[str] | None = None,
              is_restricted: bool | None = None,
              is_ultra_restricted: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7847,7 +7921,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -7864,7 +7938,7 @@

              Methods

              return self.api_call("admin.users.assign", params=kwargs)

              Add an Enterprise user to a workspace. -https://api.slack.com/methods/admin.users.assign

              +https://docs.slack.dev/reference/methods/admin.users.assign

              def admin_users_invite(self,
              *,
              team_id: str,
              email: str,
              channel_ids: str | Sequence[str],
              custom_message: str | None = None,
              email_password_policy_enabled: bool | None = None,
              guest_expiration_ts: str | float | None = None,
              is_restricted: bool | None = None,
              is_ultra_restricted: bool | None = None,
              real_name: str | None = None,
              resend: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7890,7 +7964,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -7912,10 +7986,10 @@

              Methods

              return self.api_call("admin.users.invite", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.users.invite

              -def admin_users_list(self,
              *,
              team_id: str,
              include_deactivated_user_workspaces: bool | None = None,
              is_active: bool | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              +def admin_users_list(self,
              *,
              team_id: str | None = None,
              include_deactivated_user_workspaces: bool | None = None,
              is_active: bool | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7925,7 +7999,7 @@

              Methods

              def admin_users_list(
                   self,
                   *,
              -    team_id: str,
              +    team_id: Optional[str] = None,
                   include_deactivated_user_workspaces: Optional[bool] = None,
                   is_active: Optional[bool] = None,
                   cursor: Optional[str] = None,
              @@ -7933,7 +8007,7 @@ 

              Methods

              **kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -7947,7 +8021,7 @@

              Methods

              return self.api_call("admin.users.list", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.users.list

              def admin_users_remove(self, *, team_id: str, user_id: str, **kwargs) ‑> SlackResponse @@ -7965,13 +8039,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs)

              Remove a user from a workspace. -https://api.slack.com/methods/admin.users.remove

              +https://docs.slack.dev/reference/methods/admin.users.remove

              def admin_users_session_clearSettings(self, *, user_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -7989,7 +8063,7 @@

              Methods

              ) -> SlackResponse: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -7999,7 +8073,7 @@

              Methods

              Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. -https://api.slack.com/methods/admin.users.session.clearSettings

              +https://docs.slack.dev/reference/methods/admin.users.session.clearSettings

              def admin_users_session_getSettings(self, *, user_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -8017,7 +8091,7 @@

              Methods

              ) -> SlackResponse: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8027,7 +8101,7 @@

              Methods

              Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. -https://api.slack.com/methods/admin.users.session.getSettings

              +https://docs.slack.dev/reference/methods/admin.users.session.getSettings

              def admin_users_session_invalidate(self, *, session_id: str, team_id: str, **kwargs) ‑> SlackResponse @@ -8045,13 +8119,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs)

              Invalidate a single session for a user by session_id. -https://api.slack.com/methods/admin.users.session.invalidate

              +https://docs.slack.dev/reference/methods/admin.users.session.invalidate

              def admin_users_session_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              user_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8071,7 +8145,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -8084,7 +8158,7 @@

              Methods

              return self.api_call("admin.users.session.list", params=kwargs)

              Lists all active user sessions for an organization -https://api.slack.com/methods/admin.users.session.list

              +https://docs.slack.dev/reference/methods/admin.users.session.list

              def admin_users_session_reset(self,
              *,
              user_id: str,
              mobile_only: bool | None = None,
              web_only: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8103,7 +8177,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -8115,7 +8189,7 @@

              Methods

              return self.api_call("admin.users.session.reset", params=kwargs)

              Wipes all valid sessions on all devices for a given user. -https://api.slack.com/methods/admin.users.session.reset

              +https://docs.slack.dev/reference/methods/admin.users.session.reset

              def admin_users_session_resetBulk(self,
              *,
              user_ids: str | Sequence[str],
              mobile_only: bool | None = None,
              web_only: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8134,7 +8208,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8149,7 +8223,7 @@

              Methods

              return self.api_call("admin.users.session.resetBulk", params=kwargs)

              Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users -https://api.slack.com/methods/admin.users.session.resetBulk

              +https://docs.slack.dev/reference/methods/admin.users.session.resetBulk

              def admin_users_session_setSettings(self,
              *,
              user_ids: str | Sequence[str],
              desktop_app_browser_quit: bool | None = None,
              duration: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8169,7 +8243,7 @@

              Methods

              ) -> SlackResponse: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8185,7 +8259,7 @@

              Methods

              Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. -https://api.slack.com/methods/admin.users.session.setSettings

              +https://docs.slack.dev/reference/methods/admin.users.session.setSettings

              def admin_users_setAdmin(self, *, team_id: str, user_id: str, **kwargs) ‑> SlackResponse @@ -8203,13 +8277,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs)

              Set an existing guest, regular user, or owner to be an admin user. -https://api.slack.com/methods/admin.users.setAdmin

              +https://docs.slack.dev/reference/methods/admin.users.setAdmin

              def admin_users_setExpiration(self, *, expiration_ts: int, user_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -8228,13 +8302,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs)

              Set an expiration for a guest user. -https://api.slack.com/methods/admin.users.setExpiration

              +https://docs.slack.dev/reference/methods/admin.users.setExpiration

              def admin_users_setOwner(self, *, team_id: str, user_id: str, **kwargs) ‑> SlackResponse @@ -8252,13 +8326,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs)

              Set an existing guest, regular user, or admin user to be a workspace owner. -https://api.slack.com/methods/admin.users.setOwner

              +https://docs.slack.dev/reference/methods/admin.users.setOwner

              def admin_users_setRegular(self, *, team_id: str, user_id: str, **kwargs) ‑> SlackResponse @@ -8276,13 +8350,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs)

              Set an existing guest user, admin user, or owner to be a regular user. -https://api.slack.com/methods/admin.users.setRegular

              +https://docs.slack.dev/reference/methods/admin.users.setRegular

              def admin_users_unsupportedVersions_export(self,
              *,
              date_end_of_support: str | int | None = None,
              date_sessions_started: str | int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8301,7 +8375,7 @@

              Methods

              ) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -8313,7 +8387,7 @@

              Methods

              Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. -https://api.slack.com/methods/admin.users.unsupportedVersions.export

              +https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export

              def admin_workflows_collaborators_add(self,
              *,
              collaborator_ids: str | Sequence[str],
              workflow_ids: str | Sequence[str],
              **kwargs) ‑> SlackResponse
              @@ -8331,7 +8405,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8344,7 +8418,7 @@

              Methods

              return self.api_call("admin.workflows.collaborators.add", params=kwargs)

              Add collaborators to workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.add

              +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add

              def admin_workflows_collaborators_remove(self,
              *,
              collaborator_ids: str | Sequence[str],
              workflow_ids: str | Sequence[str],
              **kwargs) ‑> SlackResponse
              @@ -8362,7 +8436,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8375,7 +8449,7 @@

              Methods

              return self.api_call("admin.workflows.collaborators.remove", params=kwargs)

              Remove collaborators from workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.remove

              +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove

              def admin_workflows_permissions_lookup(self,
              *,
              workflow_ids: str | Sequence[str],
              max_workflow_triggers: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8393,7 +8467,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8407,7 +8481,7 @@

              Methods

              return self.api_call("admin.workflows.permissions.lookup", params=kwargs)

              Look up the permissions for a set of workflows -https://api.slack.com/methods/admin.workflows.permissions.lookup

              +https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup

              def admin_workflows_unpublish(self, *, workflow_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -8473,7 +8547,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8482,7 +8556,7 @@

              Methods

              return self.api_call("admin.workflows.unpublish", params=kwargs)

              Unpublish workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.unpublish

              +https://docs.slack.dev/reference/methods/admin.workflows.unpublish

              def api_test(self, *, error: str | None = None, **kwargs) ‑> SlackResponse @@ -8499,13 +8573,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs)

              Checks API calling code. -https://api.slack.com/methods/api.test

              +https://docs.slack.dev/reference/methods/api.test

              def apps_connections_open(self, *, app_token: str, **kwargs) ‑> SlackResponse @@ -8523,14 +8597,14 @@

              Methods

              ) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs)

              Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads -https://api.slack.com/methods/apps.connections.open

              +https://docs.slack.dev/reference/methods/apps.connections.open

              def apps_event_authorizations_list(self,
              *,
              event_context: str,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8550,14 +8624,14 @@

              Methods

              ) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs)

              Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. -https://api.slack.com/methods/apps.event.authorizations.list

              +https://docs.slack.dev/reference/methods/apps.event.authorizations.list

              def apps_manifest_create(self, *, manifest: str | Dict[str, Any], **kwargs) ‑> SlackResponse @@ -8574,7 +8648,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8583,7 +8657,7 @@

              Methods

              return self.api_call("apps.manifest.create", params=kwargs)

              Create an app from an app manifest -https://api.slack.com/methods/apps.manifest.create

              +https://docs.slack.dev/reference/methods/apps.manifest.create

              def apps_manifest_delete(self, *, app_id: str, **kwargs) ‑> SlackResponse @@ -8600,13 +8674,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs)

              Permanently deletes an app created through app manifests -https://api.slack.com/methods/apps.manifest.delete

              +https://docs.slack.dev/reference/methods/apps.manifest.delete

              def apps_manifest_export(self, *, app_id: str, **kwargs) ‑> SlackResponse @@ -8623,13 +8697,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs)

              Export an app manifest from an existing app -https://api.slack.com/methods/apps.manifest.export

              +https://docs.slack.dev/reference/methods/apps.manifest.export

              def apps_manifest_update(self, *, app_id: str, manifest: str | Dict[str, Any], **kwargs) ‑> SlackResponse @@ -8647,7 +8721,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8657,7 +8731,7 @@

              Methods

              return self.api_call("apps.manifest.update", params=kwargs)

              Update an app from an app manifest -https://api.slack.com/methods/apps.manifest.update

              +https://docs.slack.dev/reference/methods/apps.manifest.update

              def apps_manifest_validate(self, *, manifest: str | Dict[str, Any], app_id: str | None = None, **kwargs) ‑> SlackResponse @@ -8675,7 +8749,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8685,7 +8759,7 @@

              Methods

              return self.api_call("apps.manifest.validate", params=kwargs)
              +https://docs.slack.dev/reference/methods/apps.manifest.validate

              def apps_uninstall(self, *, client_id: str, client_secret: str, **kwargs) ‑> SlackResponse @@ -8703,13 +8777,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs)

              Uninstalls your app from a workspace. -https://api.slack.com/methods/apps.uninstall

              +https://docs.slack.dev/reference/methods/apps.uninstall

              def assistant_threads_setStatus(self, *, channel_id: str, thread_ts: str, status: str, **kwargs) ‑> SlackResponse @@ -8728,13 +8802,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return self.api_call("assistant.threads.setStatus", params=kwargs)
              +https://docs.slack.dev/reference/methods/assistant.threads.setStatus

              def assistant_threads_setSuggestedPrompts(self,
              *,
              channel_id: str,
              thread_ts: str,
              title: str | None = None,
              prompts: List[Dict[str, str]],
              **kwargs) ‑> SlackResponse
              @@ -8754,7 +8828,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -8762,7 +8836,7 @@

              Methods

              return self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
              +https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

              def assistant_threads_setTitle(self, *, channel_id: str, thread_ts: str, title: str, **kwargs) ‑> SlackResponse @@ -8781,13 +8855,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs)
              +https://docs.slack.dev/reference/methods/assistant.threads.setTitle

              def auth_revoke(self, *, test: bool | None = None, **kwargs) ‑> SlackResponse @@ -8804,13 +8878,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/auth.revoke

              def auth_teams_list(self,
              cursor: str | None = None,
              limit: int | None = None,
              include_icon: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8828,13 +8902,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs)

              List the workspaces a token can access. -https://api.slack.com/methods/auth.teams.list

              +https://docs.slack.dev/reference/methods/auth.teams.list

              def auth_test(self, **kwargs) ‑> SlackResponse @@ -8849,12 +8923,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs)

              Checks authentication & identity. -https://api.slack.com/methods/auth.test

              +https://docs.slack.dev/reference/methods/auth.test

              def bookmarks_add(self,
              *,
              channel_id: str,
              title: str,
              type: str,
              emoji: str | None = None,
              entity_id: str | None = None,
              link: str | None = None,
              parent_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8877,7 +8951,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -8893,7 +8967,7 @@

              Methods

              return self.api_call("bookmarks.add", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/bookmarks.add

              def bookmarks_edit(self,
              *,
              bookmark_id: str,
              channel_id: str,
              emoji: str | None = None,
              link: str | None = None,
              title: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8914,7 +8988,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -8928,7 +9002,7 @@

              Methods

              return self.api_call("bookmarks.edit", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/bookmarks.edit

              def bookmarks_list(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -8945,13 +9019,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs)

              List bookmark for the channel. -https://api.slack.com/methods/bookmarks.list

              +https://docs.slack.dev/reference/methods/bookmarks.list

              def bookmarks_remove(self, *, bookmark_id: str, channel_id: str, **kwargs) ‑> SlackResponse @@ -8969,13 +9043,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs)

              Remove bookmark from the channel. -https://api.slack.com/methods/bookmarks.remove

              +https://docs.slack.dev/reference/methods/bookmarks.remove

              def bots_info(self, *, bot: str | None = None, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -8993,13 +9067,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs)

              Gets information about a bot user. -https://api.slack.com/methods/bots.info

              +https://docs.slack.dev/reference/methods/bots.info

              def calls_add(self,
              *,
              external_unique_id: str,
              join_url: str,
              created_by: str | None = None,
              date_start: int | None = None,
              desktop_app_join_url: str | None = None,
              external_display_id: str | None = None,
              title: str | None = None,
              users: str | Sequence[Dict[str, str]] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9023,7 +9097,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -9043,7 +9117,7 @@

              Methods

              return self.api_call("calls.add", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/calls.add

              def calls_end(self, *, id: str, duration: int | None = None, **kwargs) ‑> SlackResponse @@ -9061,13 +9135,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/calls.end

              def calls_info(self, *, id: str, **kwargs) ‑> SlackResponse @@ -9084,13 +9158,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs)

              Returns information about a Call. -https://api.slack.com/methods/calls.info

              +https://docs.slack.dev/reference/methods/calls.info

              def calls_participants_add(self, *, id: str, users: str | Sequence[Dict[str, str]], **kwargs) ‑> SlackResponse @@ -9108,14 +9182,14 @@

              Methods

              **kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.add", http_verb="POST", params=kwargs)

              Registers new participants added to a Call. -https://api.slack.com/methods/calls.participants.add

              +https://docs.slack.dev/reference/methods/calls.participants.add

              def calls_participants_remove(self, *, id: str, users: str | Sequence[Dict[str, str]], **kwargs) ‑> SlackResponse @@ -9133,14 +9207,14 @@

              Methods

              **kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.remove", http_verb="POST", params=kwargs)

              Registers participants removed from a Call. -https://api.slack.com/methods/calls.participants.remove

              +https://docs.slack.dev/reference/methods/calls.participants.remove

              def calls_update(self,
              *,
              id: str,
              desktop_app_join_url: str | None = None,
              join_url: str | None = None,
              title: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9160,7 +9234,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -9173,7 +9247,7 @@

              Methods

              return self.api_call("calls.update", http_verb="POST", params=kwargs)

              Updates information about a Call. -https://api.slack.com/methods/calls.update

              +https://docs.slack.dev/reference/methods/calls.update

              def canvases_access_delete(self,
              *,
              canvas_id: str,
              channel_ids: str | Sequence[str] | None = None,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9192,7 +9266,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -9208,7 +9282,7 @@

              Methods

              return self.api_call("canvases.access.delete", params=kwargs)

              Create a Channel Canvas for a channel -https://api.slack.com/methods/canvases.access.delete

              +https://docs.slack.dev/reference/methods/canvases.access.delete

              def canvases_access_set(self,
              *,
              canvas_id: str,
              access_level: str,
              channel_ids: str | Sequence[str] | None = None,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9228,7 +9302,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -9245,7 +9319,7 @@

              Methods

              return self.api_call("canvases.access.set", params=kwargs)

              Sets the access level to a canvas for specified entities -https://api.slack.com/methods/canvases.access.set

              +https://docs.slack.dev/reference/methods/canvases.access.set

              def canvases_create(self, *, title: str | None = None, document_content: Dict[str, str], **kwargs) ‑> SlackResponse @@ -9263,13 +9337,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs)
              +https://docs.slack.dev/reference/methods/canvases.create

              def canvases_delete(self, *, canvas_id: str, **kwargs) ‑> SlackResponse @@ -9286,13 +9360,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/canvases.delete

              def canvases_edit(self, *, canvas_id: str, changes: Sequence[Dict[str, Any]], **kwargs) ‑> SlackResponse @@ -9310,13 +9384,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs)
              +https://docs.slack.dev/reference/methods/canvases.edit

              def canvases_sections_lookup(self, *, canvas_id: str, criteria: Dict[str, Any], **kwargs) ‑> SlackResponse @@ -9334,13 +9408,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs)

              Find sections matching the provided criteria -https://api.slack.com/methods/canvases.sections.lookup

              +https://docs.slack.dev/reference/methods/canvases.sections.lookup

              def channels_archive(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -9674,13 +9748,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/chat.delete

              def chat_deleteScheduledMessage(self,
              *,
              channel: str,
              scheduled_message_id: str,
              as_user: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9699,7 +9773,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -9711,7 +9785,7 @@

              Methods

              return self.api_call("chat.deleteScheduledMessage", params=kwargs)
              +https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage

              def chat_meMessage(self, *, channel: str, text: str, **kwargs) ‑> SlackResponse @@ -9753,16 +9827,16 @@

              Methods

              **kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs)

              Share a me message into a channel. -https://api.slack.com/methods/chat.meMessage

              +https://docs.slack.dev/reference/methods/chat.meMessage

              -def chat_postEphemeral(self,
              *,
              channel: str,
              user: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              **kwargs) ‑> SlackResponse
              +def chat_postEphemeral(self,
              *,
              channel: str,
              user: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9784,10 +9858,11 @@

              Methods

              link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -9803,19 +9878,20 @@

              Methods

              "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs)

              Sends an ephemeral message to a user in a channel. -https://api.slack.com/methods/chat.postEphemeral

              +https://docs.slack.dev/reference/methods/chat.postEphemeral

              -def chat_postMessage(self,
              *,
              channel: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              container_id: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              mrkdwn: bool | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> SlackResponse
              +def chat_postMessage(self,
              *,
              channel: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              container_id: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              mrkdwn: bool | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              metadata: Dict | Metadata | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9842,10 +9918,11 @@

              Methods

              username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -9866,19 +9943,20 @@

              Methods

              "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs)

              Sends a message to a channel. -https://api.slack.com/methods/chat.postMessage

              +https://docs.slack.dev/reference/methods/chat.postMessage

              -def chat_scheduleMessage(self,
              *,
              channel: str,
              post_at: str | int,
              text: str,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              link_names: bool | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> SlackResponse
              +def chat_scheduleMessage(self,
              *,
              channel: str,
              post_at: str | int,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              link_names: bool | None = None,
              metadata: Dict | Metadata | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9890,7 +9968,7 @@

              Methods

              *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -9901,10 +9979,11 @@

              Methods

              unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -9921,16 +10000,17 @@

              Methods

              "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs)
              +https://docs.slack.dev/reference/methods/chat.scheduleMessage

              def chat_scheduledMessages_list(self,
              *,
              channel: str | None = None,
              cursor: str | None = None,
              latest: str | None = None,
              limit: int | None = None,
              oldest: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9952,7 +10032,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -9967,7 +10047,7 @@

              Methods

              return self.api_call("chat.scheduledMessages.list", params=kwargs)
              +https://docs.slack.dev/reference/methods/chat.scheduledMessages.list

              def chat_unfurl(self,
              *,
              channel: str | None = None,
              ts: str | None = None,
              source: str | None = None,
              unfurl_id: str | None = None,
              unfurls: Dict[str, Dict] | None = None,
              user_auth_blocks: str | Sequence[Dict | Block] | None = None,
              user_auth_message: str | None = None,
              user_auth_required: bool | None = None,
              user_auth_url: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9992,7 +10072,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -10013,10 +10093,10 @@

              Methods

              return self.api_call("chat.unfurl", json=kwargs)

              Provide custom unfurl behavior for user-posted URLs. -https://api.slack.com/methods/chat.unfurl

              +https://docs.slack.dev/reference/methods/chat.unfurl

              -def chat_update(self,
              *,
              channel: str,
              ts: str,
              text: str | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              as_user: bool | None = None,
              file_ids: str | Sequence[str] | None = None,
              link_names: bool | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> SlackResponse
              +def chat_update(self,
              *,
              channel: str,
              ts: str,
              text: str | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              as_user: bool | None = None,
              file_ids: str | Sequence[str] | None = None,
              link_names: bool | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              metadata: Dict | Metadata | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10037,10 +10117,11 @@

              Methods

              parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -10054,6 +10135,7 @@

              Methods

              "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -10062,12 +10144,12 @@

              Methods

              kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs)

              Updates a message in a channel. -https://api.slack.com/methods/chat.update

              +https://docs.slack.dev/reference/methods/chat.update

              def conversations_acceptSharedInvite(self,
              *,
              channel_name: str,
              channel_id: str | None = None,
              invite_id: str | None = None,
              free_trial_accepted: bool | None = None,
              is_private: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10089,7 +10171,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -10106,7 +10188,7 @@

              Methods

              return self.api_call("conversations.acceptSharedInvite", http_verb="POST", params=kwargs)

              Accepts an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.acceptSharedInvite

              +https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite

              def conversations_approveSharedInvite(self, *, invite_id: str, target_team: str | None = None, **kwargs) ‑> SlackResponse @@ -10124,13 +10206,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs)

              Approves an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.approveSharedInvite

              +https://docs.slack.dev/reference/methods/conversations.approveSharedInvite

              def conversations_archive(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10147,13 +10229,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.archive

              def conversations_canvases_create(self, *, channel_id: str, document_content: Dict[str, str], **kwargs) ‑> SlackResponse @@ -10171,13 +10253,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.canvases.create

              def conversations_close(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10194,13 +10276,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs)

              Closes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.close

              +https://docs.slack.dev/reference/methods/conversations.close

              def conversations_create(self,
              *,
              name: str,
              is_private: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10219,13 +10301,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs)

              Initiates a public or private channel-based conversation -https://api.slack.com/methods/conversations.create

              +https://docs.slack.dev/reference/methods/conversations.create

              def conversations_declineSharedInvite(self, *, invite_id: str, target_team: str | None = None, **kwargs) ‑> SlackResponse @@ -10243,13 +10325,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs)

              Declines a Slack Connect channel invite. -https://api.slack.com/methods/conversations.declineSharedInvite

              +https://docs.slack.dev/reference/methods/conversations.declineSharedInvite

              def conversations_externalInvitePermissions_set(self, *, action: str, channel: str, target_team: str, **kwargs) ‑> SlackResponse @@ -10263,7 +10345,7 @@

              Methods

              self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -10275,7 +10357,7 @@

              Methods

              return self.api_call("conversations.externalInvitePermissions.set", params=kwargs)

              Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. -https://api.slack.com/methods/conversations.externalInvitePermissions.set

              +https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set

              def conversations_history(self,
              *,
              channel: str,
              cursor: str | None = None,
              inclusive: bool | None = None,
              include_all_metadata: bool | None = None,
              latest: str | None = None,
              limit: int | None = None,
              oldest: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10298,7 +10380,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -10314,7 +10396,7 @@

              Methods

              return self.api_call("conversations.history", http_verb="GET", params=kwargs)

              Fetches a conversation's history of messages and events. -https://api.slack.com/methods/conversations.history

              +https://docs.slack.dev/reference/methods/conversations.history

              def conversations_info(self,
              *,
              channel: str,
              include_locale: bool | None = None,
              include_num_members: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10333,7 +10415,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -10345,7 +10427,7 @@

              Methods

              return self.api_call("conversations.info", http_verb="GET", params=kwargs)

              Retrieve information about a conversation. -https://api.slack.com/methods/conversations.info

              +https://docs.slack.dev/reference/methods/conversations.info

              def conversations_invite(self,
              *,
              channel: str,
              users: str | Sequence[str],
              force: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10364,7 +10446,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -10379,7 +10461,7 @@

              Methods

              return self.api_call("conversations.invite", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.invite

              def conversations_inviteShared(self,
              *,
              channel: str,
              emails: str | Sequence[str] | None = None,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10398,7 +10480,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -10414,7 +10496,7 @@

              Methods

              return self.api_call("conversations.inviteShared", http_verb="GET", params=kwargs)

              Sends an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.inviteShared

              +https://docs.slack.dev/reference/methods/conversations.inviteShared

              def conversations_join(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10431,13 +10513,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs)

              Joins an existing conversation. -https://api.slack.com/methods/conversations.join

              +https://docs.slack.dev/reference/methods/conversations.join

              def conversations_kick(self, *, channel: str, user: str, **kwargs) ‑> SlackResponse @@ -10455,13 +10537,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs)

              Removes a user from a conversation. -https://api.slack.com/methods/conversations.kick

              +https://docs.slack.dev/reference/methods/conversations.kick

              def conversations_leave(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10478,13 +10560,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.leave

              def conversations_list(self,
              *,
              cursor: str | None = None,
              exclude_archived: bool | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              types: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10505,7 +10587,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -10522,7 +10604,7 @@

              Methods

              return self.api_call("conversations.list", http_verb="GET", params=kwargs)

              Lists all channels in a Slack team. -https://api.slack.com/methods/conversations.list

              +https://docs.slack.dev/reference/methods/conversations.list

              def conversations_listConnectInvites(self,
              *,
              count: int | None = None,
              cursor: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10542,14 +10624,14 @@

              Methods

              ) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs)

              List shared channel invites that have been generated or received but have not yet been approved by all parties. -https://api.slack.com/methods/conversations.listConnectInvites

              +https://docs.slack.dev/reference/methods/conversations.listConnectInvites

              def conversations_mark(self, *, channel: str, ts: str, **kwargs) ‑> SlackResponse @@ -10567,13 +10649,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs)

              Sets the read cursor in a channel. -https://api.slack.com/methods/conversations.mark

              +https://docs.slack.dev/reference/methods/conversations.mark

              def conversations_members(self, *, channel: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -10592,13 +10674,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs)

              Retrieve members of a conversation. -https://api.slack.com/methods/conversations.members

              +https://docs.slack.dev/reference/methods/conversations.members

              def conversations_open(self,
              *,
              channel: str | None = None,
              return_im: bool | None = None,
              users: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10617,7 +10699,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -10629,7 +10711,7 @@

              Methods

              return self.api_call("conversations.open", params=kwargs)

              Opens or resumes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.open

              +https://docs.slack.dev/reference/methods/conversations.open

              def conversations_rename(self, *, channel: str, name: str, **kwargs) ‑> SlackResponse @@ -10647,13 +10729,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.rename

              def conversations_replies(self,
              *,
              channel: str,
              ts: str,
              cursor: str | None = None,
              inclusive: bool | None = None,
              include_all_metadata: bool | None = None,
              latest: str | None = None,
              limit: int | None = None,
              oldest: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10677,7 +10759,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -10694,7 +10776,7 @@

              Methods

              return self.api_call("conversations.replies", http_verb="GET", params=kwargs)

              Retrieve a thread of messages posted to a conversation -https://api.slack.com/methods/conversations.replies

              +https://docs.slack.dev/reference/methods/conversations.replies

              def conversations_requestSharedInvite_approve(self,
              *,
              invite_id: str,
              channel_id: str | None = None,
              is_external_limited: str | None = None,
              message: Dict[str, Any] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10714,7 +10796,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -10728,7 +10810,7 @@

              Methods

              return self.api_call("conversations.requestSharedInvite.approve", params=kwargs)

              Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. -https://api.slack.com/methods/conversations.requestSharedInvite.approve

              +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve

              def conversations_requestSharedInvite_deny(self, *, invite_id: str, message: str | None = None, **kwargs) ‑> SlackResponse @@ -10746,13 +10828,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs)

              Deny a request to invite an external user to a channel. -https://api.slack.com/methods/conversations.requestSharedInvite.deny

              +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny

              def conversations_requestSharedInvite_list(self,
              *,
              cursor: str | None = None,
              include_approved: bool | None = None,
              include_denied: bool | None = None,
              include_expired: bool | None = None,
              invite_ids: str | Sequence[str] | None = None,
              limit: int | None = None,
              user_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10775,7 +10857,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -10795,7 +10877,7 @@

              Methods

              return self.api_call("conversations.requestSharedInvite.list", params=kwargs)

              Lists requests to add external users to channels with ability to filter. -https://api.slack.com/methods/conversations.requestSharedInvite.list

              +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list

              def conversations_setPurpose(self, *, channel: str, purpose: str, **kwargs) ‑> SlackResponse @@ -10813,13 +10895,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs)

              Sets the purpose for a conversation. -https://api.slack.com/methods/conversations.setPurpose

              +https://docs.slack.dev/reference/methods/conversations.setPurpose

              def conversations_setTopic(self, *, channel: str, topic: str, **kwargs) ‑> SlackResponse @@ -10837,13 +10919,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs)

              Sets the topic for a conversation. -https://api.slack.com/methods/conversations.setTopic

              +https://docs.slack.dev/reference/methods/conversations.setTopic

              def conversations_unarchive(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10860,13 +10942,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.unarchive

              def dialog_open(self, *, dialog: Dict[str, Any], trigger_id: str, **kwargs) ‑> SlackResponse @@ -10884,7 +10966,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -10892,7 +10974,7 @@

              Methods

              return self.api_call("dialog.open", json=kwargs)

              Open a dialog with a user. -https://api.slack.com/methods/dialog.open

              +https://docs.slack.dev/reference/methods/dialog.open

              def dnd_endDnd(self, **kwargs) ‑> SlackResponse @@ -10907,12 +10989,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs)

              Ends the current user's Do Not Disturb session immediately. -https://api.slack.com/methods/dnd.endDnd

              +https://docs.slack.dev/reference/methods/dnd.endDnd

              def dnd_endSnooze(self, **kwargs) ‑> SlackResponse @@ -10927,12 +11009,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs)

              Ends the current user's snooze mode immediately. -https://api.slack.com/methods/dnd.endSnooze

              +https://docs.slack.dev/reference/methods/dnd.endSnooze

              def dnd_info(self, *, team_id: str | None = None, user: str | None = None, **kwargs) ‑> SlackResponse @@ -10950,13 +11032,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs)

              Retrieves a user's current Do Not Disturb status. -https://api.slack.com/methods/dnd.info

              +https://docs.slack.dev/reference/methods/dnd.info

              def dnd_setSnooze(self, *, num_minutes: str | int, **kwargs) ‑> SlackResponse @@ -10973,13 +11055,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs)

              Turns on Do Not Disturb mode for the current user, or changes its duration. -https://api.slack.com/methods/dnd.setSnooze

              +https://docs.slack.dev/reference/methods/dnd.setSnooze

              def dnd_teamInfo(self, users: str | Sequence[str], team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -10996,7 +11078,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -11006,7 +11088,7 @@

              Methods

              return self.api_call("dnd.teamInfo", http_verb="GET", params=kwargs)

              Retrieves the Do Not Disturb status for users on a team. -https://api.slack.com/methods/dnd.teamInfo

              +https://docs.slack.dev/reference/methods/dnd.teamInfo

              def emoji_list(self, include_categories: bool | None = None, **kwargs) ‑> SlackResponse @@ -11022,13 +11104,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs)

              Lists custom emoji for a team. -https://api.slack.com/methods/emoji.list

              +https://docs.slack.dev/reference/methods/emoji.list

              def files_comments_delete(self, *, file: str, id: str, **kwargs) ‑> SlackResponse @@ -11046,13 +11128,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs)

              Deletes an existing comment on a file. -https://api.slack.com/methods/files.comments.delete

              +https://docs.slack.dev/reference/methods/files.comments.delete

              def files_completeUploadExternal(self,
              *,
              files: List[Dict[str, str]],
              channel_id: str | None = None,
              channels: List[str] | None = None,
              initial_comment: str | None = None,
              thread_ts: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11073,7 +11155,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -11089,7 +11171,7 @@

              Methods

              return self.api_call("files.completeUploadExternal", params=kwargs)

              Finishes an upload started with files.getUploadURLExternal. -https://api.slack.com/methods/files.completeUploadExternal

              +https://docs.slack.dev/reference/methods/files.completeUploadExternal

              def files_delete(self, *, file: str, **kwargs) ‑> SlackResponse @@ -11106,13 +11188,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/files.delete

              def files_getUploadURLExternal(self,
              *,
              filename: str,
              length: int,
              alt_txt: str | None = None,
              snippet_type: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11132,7 +11214,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -11145,7 +11227,7 @@

              Methods

              return self.api_call("files.getUploadURLExternal", params=kwargs)

              Gets a URL for an edge external upload. -https://api.slack.com/methods/files.getUploadURLExternal

              +https://docs.slack.dev/reference/methods/files.getUploadURLExternal

              def files_info(self,
              *,
              file: str,
              count: int | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              page: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11166,7 +11248,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -11180,7 +11262,7 @@

              Methods

              return self.api_call("files.info", http_verb="GET", params=kwargs)

              Gets information about a team file. -https://api.slack.com/methods/files.info

              +https://docs.slack.dev/reference/methods/files.info

              def files_list(self,
              *,
              channel: str | None = None,
              count: int | None = None,
              page: int | None = None,
              show_files_hidden_by_limit: bool | None = None,
              team_id: str | None = None,
              ts_from: str | None = None,
              ts_to: str | None = None,
              types: str | Sequence[str] | None = None,
              user: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11205,7 +11287,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -11226,7 +11308,7 @@

              Methods

              return self.api_call("files.list", http_verb="GET", params=kwargs)

              Lists & filters team files. -https://api.slack.com/methods/files.list

              +https://docs.slack.dev/reference/methods/files.list

              def files_remote_add(self,
              *,
              external_id: str,
              external_url: str,
              title: str,
              filetype: str | None = None,
              indexable_file_contents: str | bytes | io.IOBase | None = None,
              preview_image: str | bytes | io.IOBase | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11248,7 +11330,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -11275,7 +11357,7 @@

              Methods

              )

              Adds a file from a remote service. -https://api.slack.com/methods/files.remote.add

              +https://docs.slack.dev/reference/methods/files.remote.add

              def files_remote_info(self, *, external_id: str | None = None, file: str | None = None, **kwargs) ‑> SlackResponse @@ -11293,13 +11375,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs)

              Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.info

              +https://docs.slack.dev/reference/methods/files.remote.info

              def files_remote_list(self,
              *,
              channel: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              ts_from: str | None = None,
              ts_to: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11320,7 +11402,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -11334,7 +11416,7 @@

              Methods

              return self.api_call("files.remote.list", http_verb="GET", params=kwargs)

              Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.list

              +https://docs.slack.dev/reference/methods/files.remote.list

              def files_remote_remove(self, *, external_id: str | None = None, file: str | None = None, **kwargs) ‑> SlackResponse @@ -11352,13 +11434,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/files.remote.remove

              def files_remote_share(self,
              *,
              channels: str | Sequence[str],
              external_id: str | None = None,
              file: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11377,7 +11459,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -11389,7 +11471,7 @@

              Methods

              return self.api_call("files.remote.share", http_verb="GET", params=kwargs)

              Share a remote file into a channel. -https://api.slack.com/methods/files.remote.share

              +https://docs.slack.dev/reference/methods/files.remote.share

              def files_remote_update(self,
              *,
              external_id: str | None = None,
              external_url: str | None = None,
              file: str | None = None,
              title: str | None = None,
              filetype: str | None = None,
              indexable_file_contents: str | None = None,
              preview_image: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11412,7 +11494,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -11440,7 +11522,7 @@

              Methods

              )

              Updates an existing remote file. -https://api.slack.com/methods/files.remote.update

              +https://docs.slack.dev/reference/methods/files.remote.update

              def files_revokePublicURL(self, *, file: str, **kwargs) ‑> SlackResponse @@ -11457,13 +11539,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs)

              Revokes public/external sharing access for a file -https://api.slack.com/methods/files.revokePublicURL

              +https://docs.slack.dev/reference/methods/files.revokePublicURL

              def files_sharedPublicURL(self, *, file: str, **kwargs) ‑> SlackResponse @@ -11480,13 +11562,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs)

              Enables a file for public/external sharing. -https://api.slack.com/methods/files.sharedPublicURL

              +https://docs.slack.dev/reference/methods/files.sharedPublicURL

              def files_upload(self,
              *,
              file: str | bytes | io.IOBase | None = None,
              content: str | bytes | None = None,
              filename: str | None = None,
              filetype: str | None = None,
              initial_comment: str | None = None,
              thread_ts: str | None = None,
              title: str | None = None,
              channels: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11510,7 +11592,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -11543,7 +11625,7 @@

              Methods

              return self.api_call("files.upload", data=kwargs)

              Uploads or creates a file. -https://api.slack.com/methods/files.upload

              +https://docs.slack.dev/reference/methods/files.upload

              def files_upload_v2(self,
              *,
              filename: str | None = None,
              file: str | bytes | io.IOBase | os.PathLike | None = None,
              content: str | bytes | None = None,
              title: str | None = None,
              alt_txt: str | None = None,
              snippet_type: str | None = None,
              file_uploads: List[Dict[str, Any]] | None = None,
              channel: str | None = None,
              channels: List[str] | None = None,
              initial_comment: str | None = None,
              thread_ts: str | None = None,
              request_file_info: bool = True,
              **kwargs) ‑> SlackResponse
              @@ -11574,12 +11656,12 @@

              Methods

              ) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -11658,14 +11740,14 @@

              Methods

              This wrapper method provides an easy way to upload files using the following endpoints:

              @@ -11685,13 +11767,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs)

              Signal the failure to execute a function -https://api.slack.com/methods/functions.completeError

              +https://docs.slack.dev/reference/methods/functions.completeError

              def functions_completeSuccess(self, *, function_execution_id: str, outputs: Dict[str, Any], **kwargs) ‑> SlackResponse @@ -11709,13 +11791,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs)

              Signal the successful completion of a function -https://api.slack.com/methods/functions.completeSuccess

              +https://docs.slack.dev/reference/methods/functions.completeSuccess

              def groups_archive(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -12191,7 +12273,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -12201,7 +12283,7 @@

              Methods

              return self.api_call("migration.exchange", http_verb="GET", params=kwargs)

              For Enterprise Grid workspaces, map local user IDs to global user IDs -https://api.slack.com/methods/migration.exchange

              +https://docs.slack.dev/reference/methods/migration.exchange

              def mpim_close(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -12348,7 +12430,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12360,7 +12442,7 @@

              Methods

              )

              Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.access

              +https://docs.slack.dev/reference/methods/oauth.access

              def oauth_v2_access(self,
              *,
              client_id: str,
              client_secret: str,
              code: str | None = None,
              redirect_uri: str | None = None,
              grant_type: str | None = None,
              refresh_token: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12386,7 +12468,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12403,7 +12485,7 @@

              Methods

              )

              Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.v2.access

              +https://docs.slack.dev/reference/methods/oauth.v2.access

              def oauth_v2_exchange(self, *, token: str, client_id: str, client_secret: str, **kwargs) ‑> SlackResponse @@ -12422,13 +12504,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs)

              Exchanges a legacy access token for a new expiring access token and refresh token -https://api.slack.com/methods/oauth.v2.exchange

              +https://docs.slack.dev/reference/methods/oauth.v2.exchange

              def openid_connect_token(self,
              client_id: str,
              client_secret: str,
              code: str | None = None,
              redirect_uri: str | None = None,
              grant_type: str | None = None,
              refresh_token: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12449,7 +12531,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12466,7 +12548,7 @@

              Methods

              )

              Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. -https://api.slack.com/methods/openid.connect.token

              +https://docs.slack.dev/reference/methods/openid.connect.token

              def openid_connect_userInfo(self, **kwargs) ‑> SlackResponse @@ -12481,12 +12563,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs)

              Get the identity of a user who has authorized Sign in with Slack. -https://api.slack.com/methods/openid.connect.userInfo

              +https://docs.slack.dev/reference/methods/openid.connect.userInfo

              def pins_add(self, *, channel: str, timestamp: str | None = None, **kwargs) ‑> SlackResponse @@ -12504,13 +12586,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs)

              Pins an item to a channel. -https://api.slack.com/methods/pins.add

              +https://docs.slack.dev/reference/methods/pins.add

              def pins_list(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -12527,13 +12609,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs)

              Lists items pinned to a channel. -https://api.slack.com/methods/pins.list

              +https://docs.slack.dev/reference/methods/pins.list

              def pins_remove(self, *, channel: str, timestamp: str | None = None, **kwargs) ‑> SlackResponse @@ -12551,13 +12633,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs)

              Un-pins an item from a channel. -https://api.slack.com/methods/pins.remove

              +https://docs.slack.dev/reference/methods/pins.remove

              def reactions_add(self, *, channel: str, name: str, timestamp: str, **kwargs) ‑> SlackResponse @@ -12576,13 +12658,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs)

              Adds a reaction to an item. -https://api.slack.com/methods/reactions.add

              +https://docs.slack.dev/reference/methods/reactions.add

              def reactions_get(self,
              *,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              full: bool | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12603,7 +12685,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -12617,7 +12699,7 @@

              Methods

              return self.api_call("reactions.get", http_verb="GET", params=kwargs)

              Gets reactions for an item. -https://api.slack.com/methods/reactions.get

              +https://docs.slack.dev/reference/methods/reactions.get

              def reactions_list(self,
              *,
              count: int | None = None,
              cursor: str | None = None,
              full: bool | None = None,
              limit: int | None = None,
              page: int | None = None,
              team_id: str | None = None,
              user: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12640,7 +12722,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -12656,7 +12738,7 @@

              Methods

              return self.api_call("reactions.list", http_verb="GET", params=kwargs)

              Lists reactions made by a user. -https://api.slack.com/methods/reactions.list

              +https://docs.slack.dev/reference/methods/reactions.list

              def reactions_remove(self,
              *,
              name: str,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12677,7 +12759,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -12691,7 +12773,7 @@

              Methods

              return self.api_call("reactions.remove", params=kwargs)

              Removes a reaction from an item. -https://api.slack.com/methods/reactions.remove

              +https://docs.slack.dev/reference/methods/reactions.remove

              def reminders_add(self,
              *,
              text: str,
              time: str,
              team_id: str | None = None,
              user: str | None = None,
              recurrence: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12712,7 +12794,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -12726,7 +12808,7 @@

              Methods

              return self.api_call("reminders.add", params=kwargs)
              +https://docs.slack.dev/reference/methods/reminders.add

              def reminders_complete(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -12744,13 +12826,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs)
              +https://docs.slack.dev/reference/methods/reminders.complete

              def reminders_delete(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -12768,13 +12850,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/reminders.delete

              def reminders_info(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -12792,13 +12874,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs)

              Gets information about a reminder. -https://api.slack.com/methods/reminders.info

              +https://docs.slack.dev/reference/methods/reminders.info

              def reminders_list(self, *, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -12815,13 +12897,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs)

              Lists all reminders created by or for a given user. -https://api.slack.com/methods/reminders.list

              +https://docs.slack.dev/reference/methods/reminders.list

              def rtm_connect(self,
              *,
              batch_presence_aware: bool | None = None,
              presence_sub: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12839,13 +12921,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs)

              Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.connect

              +https://docs.slack.dev/reference/methods/rtm.connect

              def rtm_start(self,
              *,
              batch_presence_aware: bool | None = None,
              include_locale: bool | None = None,
              mpim_aware: bool | None = None,
              no_latest: bool | None = None,
              no_unreads: bool | None = None,
              presence_sub: bool | None = None,
              simple_latest: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12868,7 +12950,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -12884,7 +12966,7 @@

              Methods

              return self.api_call("rtm.start", http_verb="GET", params=kwargs)

              Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.start

              +https://docs.slack.dev/reference/methods/rtm.start

              def search_all(self,
              *,
              query: str,
              count: int | None = None,
              highlight: bool | None = None,
              page: int | None = None,
              sort: str | None = None,
              sort_dir: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12907,7 +12989,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -12923,7 +13005,7 @@

              Methods

              return self.api_call("search.all", http_verb="GET", params=kwargs)

              Searches for messages and files matching a query. -https://api.slack.com/methods/search.all

              +https://docs.slack.dev/reference/methods/search.all

              def search_files(self,
              *,
              query: str,
              count: int | None = None,
              highlight: bool | None = None,
              page: int | None = None,
              sort: str | None = None,
              sort_dir: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12946,7 +13028,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -12962,7 +13044,7 @@

              Methods

              return self.api_call("search.files", http_verb="GET", params=kwargs)

              Searches for files matching a query. -https://api.slack.com/methods/search.files

              +https://docs.slack.dev/reference/methods/search.files

              def search_messages(self,
              *,
              query: str,
              count: int | None = None,
              cursor: str | None = None,
              highlight: bool | None = None,
              page: int | None = None,
              sort: str | None = None,
              sort_dir: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12986,7 +13068,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -13003,7 +13085,7 @@

              Methods

              return self.api_call("search.messages", http_verb="GET", params=kwargs)

              Searches for messages matching a query. -https://api.slack.com/methods/search.messages

              +https://docs.slack.dev/reference/methods/search.messages

              def stars_add(self,
              *,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13023,7 +13105,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -13036,7 +13118,7 @@

              Methods

              return self.api_call("stars.add", params=kwargs)
              +https://docs.slack.dev/reference/methods/stars.add

              def stars_list(self,
              *,
              count: int | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              page: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13057,7 +13139,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -13071,7 +13153,7 @@

              Methods

              return self.api_call("stars.list", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/stars.list

              def stars_remove(self,
              *,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13091,7 +13173,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -13104,7 +13186,7 @@

              Methods

              return self.api_call("stars.remove", params=kwargs)

              Removes a star from an item. -https://api.slack.com/methods/stars.remove

              +https://docs.slack.dev/reference/methods/stars.remove

              def team_accessLogs(self,
              *,
              before: str | int | None = None,
              count: str | int | None = None,
              page: str | int | None = None,
              team_id: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13126,7 +13208,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -13141,7 +13223,7 @@

              Methods

              return self.api_call("team.accessLogs", http_verb="GET", params=kwargs)

              Gets the access logs for the current team. -https://api.slack.com/methods/team.accessLogs

              +https://docs.slack.dev/reference/methods/team.accessLogs

              def team_billableInfo(self, *, team_id: str | None = None, user: str | None = None, **kwargs) ‑> SlackResponse @@ -13159,13 +13241,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs)

              Gets billable users information for the current team. -https://api.slack.com/methods/team.billableInfo

              +https://docs.slack.dev/reference/methods/team.billableInfo

              def team_billing_info(self, **kwargs) ‑> SlackResponse @@ -13180,12 +13262,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs)

              Reads a workspace's billing plan information. -https://api.slack.com/methods/team.billing.info

              +https://docs.slack.dev/reference/methods/team.billing.info

              def team_externalTeams_disconnect(self, *, target_team: str, **kwargs) ‑> SlackResponse @@ -13202,7 +13284,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -13212,7 +13294,7 @@

              Methods

              return self.api_call("team.externalTeams.disconnect", params=kwargs)
              +https://docs.slack.dev/reference/methods/team.externalTeams.disconnect

              def team_externalTeams_list(self,
              *,
              connection_status_filter: str | None = None,
              slack_connect_pref_filter: Sequence[str] | None = None,
              sort_direction: str | None = None,
              sort_field: str | None = None,
              workspace_filter: Sequence[str] | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13235,7 +13317,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -13259,7 +13341,7 @@

              Methods

              return self.api_call("team.externalTeams.list", http_verb="GET", params=kwargs)

              Returns a list of all the external teams connected and details about the connection. -https://api.slack.com/methods/team.externalTeams.list

              +https://docs.slack.dev/reference/methods/team.externalTeams.list

              def team_info(self, *, team: str | None = None, domain: str | None = None, **kwargs) ‑> SlackResponse @@ -13277,13 +13359,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs)

              Gets information about the current team. -https://api.slack.com/methods/team.info

              +https://docs.slack.dev/reference/methods/team.info

              def team_integrationLogs(self,
              *,
              app_id: str | None = None,
              change_type: str | None = None,
              count: str | int | None = None,
              page: str | int | None = None,
              service_id: str | None = None,
              team_id: str | None = None,
              user: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13306,7 +13388,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -13322,7 +13404,7 @@

              Methods

              return self.api_call("team.integrationLogs", http_verb="GET", params=kwargs)

              Gets the integration logs for the current team. -https://api.slack.com/methods/team.integrationLogs

              +https://docs.slack.dev/reference/methods/team.integrationLogs

              def team_preferences_list(self, **kwargs) ‑> SlackResponse @@ -13337,12 +13419,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs)

              Retrieve a list of a workspace's team preferences. -https://api.slack.com/methods/team.preferences.list

              +https://docs.slack.dev/reference/methods/team.preferences.list

              def team_profile_get(self, *, visibility: str | None = None, **kwargs) ‑> SlackResponse @@ -13359,13 +13441,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/team.profile.get

              def tooling_tokens_rotate(self, *, refresh_token: str, **kwargs) ‑> SlackResponse @@ -13382,13 +13464,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs)

              Exchanges a refresh token for a new app configuration token -https://api.slack.com/methods/tooling.tokens.rotate

              +https://docs.slack.dev/reference/methods/tooling.tokens.rotate

              def usergroups_create(self,
              *,
              name: str,
              channels: str | Sequence[str] | None = None,
              description: str | None = None,
              handle: str | None = None,
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13410,7 +13492,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -13428,7 +13510,7 @@

              Methods

              return self.api_call("usergroups.create", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.create

              def usergroups_disable(self,
              *,
              usergroup: str,
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13447,13 +13529,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs)

              Disable an existing User Group -https://api.slack.com/methods/usergroups.disable

              +https://docs.slack.dev/reference/methods/usergroups.disable

              def usergroups_enable(self,
              *,
              usergroup: str,
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13472,13 +13554,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.enable

              def usergroups_list(self,
              *,
              include_count: bool | None = None,
              include_disabled: bool | None = None,
              include_users: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13498,7 +13580,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -13511,7 +13593,7 @@

              Methods

              return self.api_call("usergroups.list", http_verb="GET", params=kwargs)

              List all User Groups for a team -https://api.slack.com/methods/usergroups.list

              +https://docs.slack.dev/reference/methods/usergroups.list

              def usergroups_update(self,
              *,
              usergroup: str,
              channels: str | Sequence[str] | None = None,
              description: str | None = None,
              handle: str | None = None,
              include_count: bool | None = None,
              name: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13534,7 +13616,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -13553,7 +13635,7 @@

              Methods

              return self.api_call("usergroups.update", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.update

              def usergroups_users_list(self,
              *,
              usergroup: str,
              include_disabled: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13572,7 +13654,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -13584,7 +13666,7 @@

              Methods

              return self.api_call("usergroups.users.list", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.users.list

              def usergroups_users_update(self,
              *,
              usergroup: str,
              users: str | Sequence[str],
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13604,7 +13686,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -13620,7 +13702,7 @@

              Methods

              return self.api_call("usergroups.users.update", params=kwargs)

              Update the list of users for a User Group -https://api.slack.com/methods/usergroups.users.update

              +https://docs.slack.dev/reference/methods/usergroups.users.update

              def users_conversations(self,
              *,
              cursor: str | None = None,
              exclude_archived: bool | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              types: str | Sequence[str] | None = None,
              user: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13642,7 +13724,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -13660,7 +13742,7 @@

              Methods

              return self.api_call("users.conversations", http_verb="GET", params=kwargs)

              List conversations the calling user may access. -https://api.slack.com/methods/users.conversations

              +https://docs.slack.dev/reference/methods/users.conversations

              def users_deletePhoto(self, **kwargs) ‑> SlackResponse @@ -13675,12 +13757,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/users.deletePhoto

              def users_discoverableContacts_lookup(self, email: str, **kwargs) ‑> SlackResponse @@ -13696,13 +13778,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs)

              Lookup an email address to see if someone is on Slack -https://api.slack.com/methods/users.discoverableContacts.lookup

              +https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup

              def users_getPresence(self, *, user: str, **kwargs) ‑> SlackResponse @@ -13719,13 +13801,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs)

              Gets user presence information. -https://api.slack.com/methods/users.getPresence

              +https://docs.slack.dev/reference/methods/users.getPresence

              def users_identity(self, **kwargs) ‑> SlackResponse @@ -13740,12 +13822,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/users.identity

              def users_info(self, *, user: str, include_locale: bool | None = None, **kwargs) ‑> SlackResponse @@ -13763,13 +13845,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs)

              Gets information about a user. -https://api.slack.com/methods/users.info

              +https://docs.slack.dev/reference/methods/users.info

              def users_list(self,
              *,
              cursor: str | None = None,
              include_locale: bool | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13789,7 +13871,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -13802,7 +13884,7 @@

              Methods

              return self.api_call("users.list", http_verb="GET", params=kwargs)

              Lists all users in a Slack team. -https://api.slack.com/methods/users.list

              +https://docs.slack.dev/reference/methods/users.list

              def users_lookupByEmail(self, *, email: str, **kwargs) ‑> SlackResponse @@ -13819,13 +13901,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs)

              Find a user with an email address. -https://api.slack.com/methods/users.lookupByEmail

              +https://docs.slack.dev/reference/methods/users.lookupByEmail

              def users_profile_get(self, *, user: str | None = None, include_labels: bool | None = None, **kwargs) ‑> SlackResponse @@ -13843,13 +13925,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs)

              Retrieves a user's profile information. -https://api.slack.com/methods/users.profile.get

              +https://docs.slack.dev/reference/methods/users.profile.get

              def users_profile_set(self,
              *,
              name: str | None = None,
              value: str | None = None,
              user: str | None = None,
              profile: Dict | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13869,7 +13951,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -13884,7 +13966,7 @@

              Methods

              return self.api_call("users.profile.set", json=kwargs)

              Set the profile information for a user. -https://api.slack.com/methods/users.profile.set

              +https://docs.slack.dev/reference/methods/users.profile.set

              def users_setPhoto(self,
              *,
              image: str | io.IOBase,
              crop_w: str | int | None = None,
              crop_x: str | int | None = None,
              crop_y: str | int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13904,13 +13986,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs)
              +https://docs.slack.dev/reference/methods/users.setPhoto

              def users_setPresence(self, *, presence: str, **kwargs) ‑> SlackResponse @@ -13927,13 +14009,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs)
              +https://docs.slack.dev/reference/methods/users.setPresence

              def views_open(self,
              *,
              trigger_id: str | None = None,
              interactivity_pointer: str | None = None,
              view: dict | View,
              **kwargs) ‑> SlackResponse
              @@ -13952,8 +14034,8 @@

              Methods

              **kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -13965,8 +14047,8 @@

              Methods

              return self.api_call("views.open", json=kwargs)
              +https://docs.slack.dev/reference/methods/views.open +See https://docs.slack.dev/surfaces/modals/ for details.

              def views_publish(self,
              *,
              user_id: str,
              view: dict | View,
              hash: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13986,8 +14068,8 @@

              Methods

              ) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -14000,8 +14082,8 @@

              Methods

              Publish a static view for a User. Create or update the view that comprises an -app's Home tab (https://api.slack.com/surfaces/tabs) -https://api.slack.com/methods/views.publish

              +app's Home tab (https://docs.slack.dev/surfaces/app-home/) +https://docs.slack.dev/reference/methods/views.publish

              def views_push(self,
              *,
              trigger_id: str | None = None,
              interactivity_pointer: str | None = None,
              view: dict | View,
              **kwargs) ‑> SlackResponse
              @@ -14023,9 +14105,9 @@

              Methods

              Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -14040,9 +14122,9 @@

              Methods

              Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. -Read the modals documentation (https://api.slack.com/surfaces/modals) +Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. -https://api.slack.com/methods/views.push

              +https://docs.slack.dev/reference/methods/views.push

              def views_update(self,
              *,
              view: dict | View,
              external_id: str | None = None,
              view_id: str | None = None,
              hash: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -14064,9 +14146,9 @@

              Methods

              """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -14086,9 +14168,119 @@

              Methods

              Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. -See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) +See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. -https://api.slack.com/methods/views.update

              +https://docs.slack.dev/reference/methods/views.update

              + +
              +
              +
              + +Expand source code + +
              def workflows_featured_add(
              +    self,
              +    *,
              +    channel_id: str,
              +    trigger_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> SlackResponse:
              +    """Add featured workflows to a channel.
              +    https://docs.slack.dev/reference/methods/workflows.featured.add
              +    """
              +    kwargs.update({"channel_id": channel_id})
              +    if isinstance(trigger_ids, (list, tuple)):
              +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
              +    else:
              +        kwargs.update({"trigger_ids": trigger_ids})
              +    return self.api_call("workflows.featured.add", params=kwargs)
              +
              + +
              + +
              +
              + +Expand source code + +
              def workflows_featured_list(
              +    self,
              +    *,
              +    channel_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> SlackResponse:
              +    """List the featured workflows for specified channels.
              +    https://docs.slack.dev/reference/methods/workflows.featured.list
              +    """
              +    if isinstance(channel_ids, (list, tuple)):
              +        kwargs.update({"channel_ids": ",".join(channel_ids)})
              +    else:
              +        kwargs.update({"channel_ids": channel_ids})
              +    return self.api_call("workflows.featured.list", params=kwargs)
              +
              +

              List the featured workflows for specified channels. +https://docs.slack.dev/reference/methods/workflows.featured.list

              +
              + +
              +
              + +Expand source code + +
              def workflows_featured_remove(
              +    self,
              +    *,
              +    channel_id: str,
              +    trigger_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> SlackResponse:
              +    """Remove featured workflows from a channel.
              +    https://docs.slack.dev/reference/methods/workflows.featured.remove
              +    """
              +    kwargs.update({"channel_id": channel_id})
              +    if isinstance(trigger_ids, (list, tuple)):
              +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
              +    else:
              +        kwargs.update({"trigger_ids": trigger_ids})
              +    return self.api_call("workflows.featured.remove", params=kwargs)
              +
              + +
              + +
              +
              + +Expand source code + +
              def workflows_featured_set(
              +    self,
              +    *,
              +    channel_id: str,
              +    trigger_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> SlackResponse:
              +    """Set featured workflows for a channel.
              +    https://docs.slack.dev/reference/methods/workflows.featured.set
              +    """
              +    kwargs.update({"channel_id": channel_id})
              +    if isinstance(trigger_ids, (list, tuple)):
              +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
              +    else:
              +        kwargs.update({"trigger_ids": trigger_ids})
              +    return self.api_call("workflows.featured.set", params=kwargs)
              +
              +
              def workflows_stepCompleted(self, *, workflow_step_execute_id: str, outputs: dict | None = None, **kwargs) ‑> SlackResponse @@ -14106,7 +14298,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -14116,7 +14308,7 @@

              Methods

              return self.api_call("workflows.stepCompleted", json=kwargs)

              Indicate a successful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepCompleted

              +https://docs.slack.dev/reference/methods/workflows.stepCompleted

              def workflows_stepFailed(self, *, workflow_step_execute_id: str, error: Dict[str, str], **kwargs) ‑> SlackResponse @@ -14134,7 +14326,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -14147,7 +14339,7 @@

              Methods

              return self.api_call("workflows.stepFailed", json=kwargs)

              Indicate an unsuccessful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepFailed

              +https://docs.slack.dev/reference/methods/workflows.stepFailed

              def workflows_updateStep(self,
              *,
              workflow_step_edit_id: str,
              inputs: Dict[str, Any] | None = None,
              outputs: List[Dict[str, str]] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -14166,7 +14358,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -14178,7 +14370,7 @@

              Methods

              return self.api_call("workflows.updateStep", json=kwargs)

              Update the configuration for a workflow extension step. -https://api.slack.com/methods/workflows.updateStep

              +https://docs.slack.dev/reference/methods/workflows.updateStep

              Inherited members

              @@ -14512,6 +14704,10 @@

              views_publish
            • views_push
            • views_update
            • +
            • workflows_featured_add
            • +
            • workflows_featured_list
            • +
            • workflows_featured_remove
            • +
            • workflows_featured_set
            • workflows_stepCompleted
            • workflows_stepFailed
            • workflows_updateStep
            • diff --git a/docs/reference/web/deprecation.html b/docs/reference/web/deprecation.html index 5cab0cf2b..0b68d0c84 100644 --- a/docs/reference/web/deprecation.html +++ b/docs/reference/web/deprecation.html @@ -67,7 +67,7 @@

              Functions

              message = ( f"{method_name} is deprecated. Please use the Conversations API instead. " "For more info, go to " - "https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api" + "https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/" ) warnings.warn(message) @@ -76,7 +76,7 @@

              Functions

              if len(matched_prefixes) > 0: message = ( f"{method_name} is deprecated. For more info, go to " - "https://api.slack.com/changelog/2023-07-its-later-already-for-stars-and-reminders" + "https://docs.slack.dev/changelog/2023-07-its-later-already-for-stars-and-reminders/" ) warnings.warn(message) @@ -85,7 +85,7 @@

              Functions

              if len(matched_prefixes) > 0: message = ( f"{method_name} is deprecated. For more info, go to " - "https://api.slack.com/changelog/2023-08-workflow-steps-from-apps-step-back" + "https://docs.slack.dev/changelog/2023-08-workflow-steps-from-apps-step-back/" ) warnings.warn(message)
              diff --git a/docs/reference/web/index.html b/docs/reference/web/index.html index e4ac7ea49..ee73d3ba2 100644 --- a/docs/reference/web/index.html +++ b/docs/reference/web/index.html @@ -420,7 +420,7 @@

              Raises

              class WebClient(BaseClient):
                   """A WebClient allows apps to communicate with the Slack Platform's Web API.
               
              -    https://api.slack.com/methods
              +    https://docs.slack.dev/reference/methods
               
                   The Slack Web API is an interface for querying information from
                   and enacting change in a Slack workspace.
              @@ -491,7 +491,7 @@ 

              Raises

              **kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -513,7 +513,7 @@

              Raises

              Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -540,7 +540,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -561,7 +561,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -581,7 +581,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -601,7 +601,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -625,7 +625,7 @@

              Raises

              Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -652,7 +652,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -674,7 +674,7 @@

              Raises

              ) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -705,7 +705,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -733,7 +733,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -750,7 +750,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -772,7 +772,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -792,7 +792,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -811,7 +811,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -830,7 +830,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -846,7 +846,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -865,7 +865,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -884,7 +884,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -904,7 +904,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -919,7 +919,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -940,7 +940,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -960,7 +960,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -980,7 +980,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs) @@ -993,7 +993,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -1010,7 +1010,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs) @@ -1022,7 +1022,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs) @@ -1035,7 +1035,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs) @@ -1053,7 +1053,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -1084,7 +1084,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -1096,7 +1096,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -1109,7 +1109,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -1125,7 +1125,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -1138,7 +1138,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -1158,7 +1158,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -1186,7 +1186,7 @@

              Raises

              """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -1213,7 +1213,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -1236,7 +1236,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -1259,7 +1259,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -1284,7 +1284,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -1308,7 +1308,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -1326,7 +1326,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -1338,7 +1338,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -1351,7 +1351,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -1363,7 +1363,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -1388,7 +1388,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -1406,7 +1406,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1419,7 +1419,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1432,7 +1432,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1444,7 +1444,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1457,7 +1457,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1472,7 +1472,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1495,7 +1495,7 @@

              Raises

              ) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1513,7 +1513,7 @@

              Raises

              ) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1537,7 +1537,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1562,7 +1562,7 @@

              Raises

              ) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1584,7 +1584,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1606,7 +1606,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1626,7 +1626,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1648,7 +1648,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1663,7 +1663,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1683,7 +1683,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1700,7 +1700,7 @@

              Raises

              ) -> SlackResponse: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1718,7 +1718,7 @@

              Raises

              ) -> SlackResponse: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1740,7 +1740,7 @@

              Raises

              ) -> SlackResponse: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1757,7 +1757,7 @@

              Raises

              ) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1775,7 +1775,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1789,7 +1789,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1809,7 +1809,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1828,7 +1828,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1849,7 +1849,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1870,7 +1870,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1890,7 +1890,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs) @@ -1904,7 +1904,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1916,7 +1916,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs) @@ -1929,7 +1929,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1942,7 +1942,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1955,7 +1955,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1968,7 +1968,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1982,7 +1982,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -2000,7 +2000,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -2018,7 +2018,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -2037,7 +2037,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -2057,7 +2057,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -2089,7 +2089,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -2113,7 +2113,7 @@

              Raises

              def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -2121,7 +2121,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -2142,7 +2142,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs) @@ -2155,7 +2155,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs) @@ -2169,7 +2169,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs) @@ -2182,7 +2182,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs) @@ -2195,7 +2195,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs) @@ -2216,7 +2216,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -2246,7 +2246,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -2267,7 +2267,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -2287,7 +2287,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -2306,7 +2306,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -2321,7 +2321,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs) @@ -2334,7 +2334,7 @@

              Raises

              ) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -2349,7 +2349,7 @@

              Raises

              ) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs) @@ -2362,7 +2362,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) @@ -2374,7 +2374,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2389,7 +2389,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs) @@ -2401,7 +2401,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs) @@ -2414,7 +2414,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2431,7 +2431,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2447,7 +2447,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2461,7 +2461,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return self.api_call("assistant.threads.setStatus", params=kwargs) @@ -2475,7 +2475,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2490,7 +2490,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2504,7 +2504,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2514,7 +2514,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs) @@ -2526,7 +2526,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs) @@ -2544,7 +2544,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2570,7 +2570,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2590,7 +2590,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2603,7 +2603,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2616,7 +2616,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2635,7 +2635,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2662,7 +2662,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2674,7 +2674,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2687,7 +2687,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2701,7 +2701,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2717,7 +2717,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2737,7 +2737,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs) @@ -2750,7 +2750,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs) @@ -2762,7 +2762,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs) @@ -2777,7 +2777,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2802,7 +2802,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2825,7 +2825,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs) @@ -2833,7 +2833,7 @@

              Raises

              # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def channels_archive( @@ -3012,7 +3012,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs) @@ -3026,7 +3026,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -3045,7 +3045,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -3058,7 +3058,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs) @@ -3078,10 +3078,11 @@

              Raises

              link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -3097,11 +3098,12 @@

              Raises

              "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -3125,10 +3127,11 @@

              Raises

              username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -3149,11 +3152,12 @@

              Raises

              "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -3162,7 +3166,7 @@

              Raises

              *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -3173,10 +3177,11 @@

              Raises

              unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -3193,11 +3198,12 @@

              Raises

              "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) @@ -3216,7 +3222,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -3250,10 +3256,11 @@

              Raises

              parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -3267,6 +3274,7 @@

              Raises

              "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -3275,7 +3283,7 @@

              Raises

              kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) @@ -3291,7 +3299,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -3317,7 +3325,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -3341,7 +3349,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -3353,7 +3361,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs) @@ -3365,7 +3373,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs) @@ -3379,7 +3387,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs) @@ -3392,7 +3400,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -3401,7 +3409,7 @@

              Raises

              self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3425,7 +3433,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3449,7 +3457,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3469,7 +3477,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3492,7 +3500,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3514,7 +3522,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs) @@ -3527,7 +3535,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs) @@ -3539,7 +3547,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs) @@ -3555,7 +3563,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3581,7 +3589,7 @@

              Raises

              ) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3594,7 +3602,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs) @@ -3608,7 +3616,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3622,7 +3630,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3641,7 +3649,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs) @@ -3660,7 +3668,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3686,7 +3694,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3707,7 +3715,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3725,7 +3733,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3752,7 +3760,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs) @@ -3765,7 +3773,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs) @@ -3777,7 +3785,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs) @@ -3790,7 +3798,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs) @@ -3803,7 +3811,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3815,7 +3823,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs) @@ -3824,7 +3832,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs) @@ -3836,7 +3844,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3848,7 +3856,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3860,7 +3868,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3875,7 +3883,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) @@ -3888,7 +3896,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs) @@ -3900,7 +3908,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs) @@ -3916,7 +3924,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3944,7 +3952,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3972,7 +3980,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3988,7 +3996,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -4013,7 +4021,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -4052,7 +4060,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -4087,7 +4095,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -4101,7 +4109,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -4119,7 +4127,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs) @@ -4131,7 +4139,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs) @@ -4150,7 +4158,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -4203,12 +4211,12 @@

              Raises

              ) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -4294,7 +4302,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -4317,7 +4325,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -4340,7 +4348,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs) @@ -4353,7 +4361,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs) @@ -4361,7 +4369,7 @@

              Raises

              # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def groups_archive( @@ -4542,7 +4550,7 @@

              Raises

              # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def im_close( @@ -4618,7 +4626,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4630,7 +4638,7 @@

              Raises

              # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def mpim_close( @@ -4717,7 +4725,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4743,7 +4751,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4763,7 +4771,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs) @@ -4779,7 +4787,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4800,7 +4808,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs) @@ -4812,7 +4820,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs) @@ -4824,7 +4832,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4837,7 +4845,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs) @@ -4851,7 +4859,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs) @@ -4867,7 +4875,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4893,7 +4901,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4919,7 +4927,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4943,7 +4951,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4964,7 +4972,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs) @@ -4977,7 +4985,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs) @@ -4990,7 +4998,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -5002,7 +5010,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -5015,7 +5023,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -5033,7 +5041,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -5061,7 +5069,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -5089,7 +5097,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -5118,7 +5126,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -5144,7 +5152,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -5167,7 +5175,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -5190,7 +5198,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -5214,7 +5222,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -5236,7 +5244,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) @@ -5246,7 +5254,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs) @@ -5257,7 +5265,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -5279,7 +5287,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -5310,7 +5318,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs) @@ -5328,7 +5336,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -5350,7 +5358,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -5360,7 +5368,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs) @@ -5376,7 +5384,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -5402,7 +5410,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs) @@ -5416,7 +5424,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs) @@ -5431,7 +5439,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5456,7 +5464,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5483,7 +5491,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5504,7 +5512,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5531,7 +5539,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5553,7 +5561,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5564,7 +5572,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5574,7 +5582,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5586,7 +5594,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5601,7 +5609,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5620,7 +5628,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5635,7 +5643,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5647,7 +5655,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs) @@ -5658,7 +5666,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5671,7 +5679,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5686,7 +5694,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5709,8 +5717,8 @@

              Raises

              **kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5733,9 +5741,9 @@

              Raises

              Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5758,9 +5766,9 @@

              Raises

              """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5787,8 +5795,8 @@

              Raises

              ) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5799,6 +5807,72 @@

              Raises

              # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -5807,7 +5881,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5824,7 +5898,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5845,7 +5919,7 @@

              Raises

              **kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -5857,7 +5931,7 @@

              Raises

              return self.api_call("workflows.updateStep", json=kwargs)

              A WebClient allows apps to communicate with the Slack Platform's Web API.

              -

              https://api.slack.com/methods

              +

              https://docs.slack.dev/reference/methods

              The Slack Web API is an interface for querying information from and enacting change in a Slack workspace.

              This client handles constructing and sending HTTP requests to Slack @@ -5937,7 +6011,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -5947,7 +6021,7 @@

              Methods

              return self.api_call("admin.analytics.getFile", params=kwargs)

              Retrieve analytics data for a given date, presented as a compressed JSON file -https://api.slack.com/methods/admin.analytics.getFile

              +https://docs.slack.dev/reference/methods/admin.analytics.getFile

              def admin_apps_activities_list(self,
              *,
              app_id: str | None = None,
              component_id: str | None = None,
              component_type: str | None = None,
              log_event_type: str | None = None,
              max_date_created: int | None = None,
              min_date_created: int | None = None,
              min_log_level: str | None = None,
              sort_direction: str | None = None,
              source: str | None = None,
              team_id: str | None = None,
              trace_id: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -5976,7 +6050,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -5998,7 +6072,7 @@

              Methods

              return self.api_call("admin.apps.activities.list", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.apps.activities.list

              def admin_apps_approve(self,
              *,
              app_id: str | None = None,
              request_id: str | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6021,7 +6095,7 @@

              Methods

              Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -6042,7 +6116,7 @@

              Methods

              Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.approve

              +https://docs.slack.dev/reference/methods/admin.apps.approve

              def admin_apps_approved_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6062,7 +6136,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -6075,7 +6149,7 @@

              Methods

              return self.api_call("admin.apps.approved.list", http_verb="GET", params=kwargs)

              List approved apps for an org or workspace. -https://api.slack.com/methods/admin.apps.approved.list

              +https://docs.slack.dev/reference/methods/admin.apps.approved.list

              def admin_apps_clearResolution(self,
              *,
              app_id: str,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6094,7 +6168,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -6106,7 +6180,7 @@

              Methods

              return self.api_call("admin.apps.clearResolution", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.apps.clearResolution

              def admin_apps_config_lookup(self, *, app_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -6123,7 +6197,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -6132,7 +6206,7 @@

              Methods

              return self.api_call("admin.apps.config.lookup", params=kwargs)

              Look up the app config for connectors by their IDs -https://api.slack.com/methods/admin.apps.config.lookup

              +https://docs.slack.dev/reference/methods/admin.apps.config.lookup

              def admin_apps_config_set(self,
              *,
              app_id: str,
              domain_restrictions: Dict[str, Any] | None = None,
              workflow_auth_strategy: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6151,7 +6225,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -6164,7 +6238,7 @@

              Methods

              return self.api_call("admin.apps.config.set", params=kwargs)

              Set the app config for a connector -https://api.slack.com/methods/admin.apps.config.set

              +https://docs.slack.dev/reference/methods/admin.apps.config.set

              def admin_apps_requests_cancel(self,
              *,
              request_id: str,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6183,7 +6257,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -6195,7 +6269,7 @@

              Methods

              return self.api_call("admin.apps.requests.cancel", http_verb="POST", params=kwargs)

              List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.cancel

              +https://docs.slack.dev/reference/methods/admin.apps.requests.cancel

              def admin_apps_requests_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6214,7 +6288,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -6226,7 +6300,7 @@

              Methods

              return self.api_call("admin.apps.requests.list", http_verb="GET", params=kwargs)

              List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.list

              +https://docs.slack.dev/reference/methods/admin.apps.requests.list

              def admin_apps_restrict(self,
              *,
              app_id: str | None = None,
              request_id: str | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6249,7 +6323,7 @@

              Methods

              Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -6270,7 +6344,7 @@

              Methods

              Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.restrict

              +https://docs.slack.dev/reference/methods/admin.apps.restrict

              def admin_apps_restricted_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6290,7 +6364,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -6303,7 +6377,7 @@

              Methods

              return self.api_call("admin.apps.restricted.list", http_verb="GET", params=kwargs)

              List restricted apps for an org or workspace. -https://api.slack.com/methods/admin.apps.restricted.list

              +https://docs.slack.dev/reference/methods/admin.apps.restricted.list

              def admin_apps_uninstall(self,
              *,
              app_id: str,
              enterprise_id: str | None = None,
              team_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6323,7 +6397,7 @@

              Methods

              ) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -6337,7 +6411,7 @@

              Methods

              Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. -https://api.slack.com/methods/admin.apps.uninstall

              +https://docs.slack.dev/reference/methods/admin.apps.uninstall

              def admin_auth_policy_assignEntities(self,
              *,
              entity_ids: str | Sequence[str],
              policy_name: str,
              entity_type: str,
              **kwargs) ‑> SlackResponse
              @@ -6356,7 +6430,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6367,7 +6441,7 @@

              Methods

              return self.api_call("admin.auth.policy.assignEntities", http_verb="POST", params=kwargs)

              Assign entities to a particular authentication policy. -https://api.slack.com/methods/admin.auth.policy.assignEntities

              +https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities

              def admin_auth_policy_getEntities(self,
              *,
              policy_name: str,
              cursor: str | None = None,
              entity_type: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6387,7 +6461,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -6399,7 +6473,7 @@

              Methods

              return self.api_call("admin.auth.policy.getEntities", http_verb="POST", params=kwargs)

              Fetch all the entities assigned to a particular authentication policy by name. -https://api.slack.com/methods/admin.auth.policy.getEntities

              +https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities

              def admin_auth_policy_removeEntities(self,
              *,
              entity_ids: str | Sequence[str],
              policy_name: str,
              entity_type: str,
              **kwargs) ‑> SlackResponse
              @@ -6418,7 +6492,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6429,7 +6503,7 @@

              Methods

              return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs)

              Remove specified entities from a specified authentication policy. -https://api.slack.com/methods/admin.auth.policy.removeEntities

              +https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities

              def admin_barriers_create(self,
              *,
              barriered_from_usergroup_ids: str | Sequence[str],
              primary_usergroup_id: str,
              restricted_subjects: str | Sequence[str],
              **kwargs) ‑> SlackResponse
              @@ -6448,7 +6522,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6462,7 +6536,7 @@

              Methods

              return self.api_call("admin.barriers.create", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.barriers.create

              def admin_barriers_delete(self, *, barrier_id: str, **kwargs) ‑> SlackResponse @@ -6479,13 +6553,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs)

              Delete an existing Information Barrier -https://api.slack.com/methods/admin.barriers.delete

              +https://docs.slack.dev/reference/methods/admin.barriers.delete

              def admin_barriers_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -6503,7 +6577,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -6513,7 +6587,7 @@

              Methods

              return self.api_call("admin.barriers.list", http_verb="GET", params=kwargs)

              Get all Information Barriers for your organization -https://api.slack.com/methods/admin.barriers.list

              +https://docs.slack.dev/reference/methods/admin.barriers.list

              def admin_barriers_update(self,
              *,
              barrier_id: str,
              barriered_from_usergroup_ids: str | Sequence[str],
              primary_usergroup_id: str,
              restricted_subjects: str | Sequence[str],
              **kwargs) ‑> SlackResponse
              @@ -6533,7 +6607,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6547,7 +6621,7 @@

              Methods

              return self.api_call("admin.barriers.update", http_verb="POST", params=kwargs)

              Update an existing Information Barrier -https://api.slack.com/methods/admin.barriers.update

              +https://docs.slack.dev/reference/methods/admin.barriers.update

              def admin_conversations_archive(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6564,13 +6638,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs)

              Archive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

              +https://docs.slack.dev/reference/methods/admin.conversations.archive

              def admin_conversations_bulkArchive(self, *, channel_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -6587,13 +6661,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs)

              Archive public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkArchive

              +https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive

              def admin_conversations_bulkDelete(self, *, channel_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -6634,7 +6708,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -6645,7 +6719,7 @@

              Methods

              return self.api_call("admin.conversations.bulkMove", params=kwargs)

              Move public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkMove

              +https://docs.slack.dev/reference/methods/admin.conversations.bulkMove

              def admin_conversations_convertToPrivate(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6662,13 +6736,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs)

              Convert a public channel to a private channel. -https://api.slack.com/methods/admin.conversations.convertToPrivate

              +https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate

              def admin_conversations_convertToPublic(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6685,13 +6759,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs)

              Convert a privte channel to a public channel. -https://api.slack.com/methods/admin.conversations.convertToPublic

              +https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic

              def admin_conversations_create(self,
              *,
              is_private: bool,
              name: str,
              description: str | None = None,
              org_wide: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6712,7 +6786,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -6726,7 +6800,7 @@

              Methods

              return self.api_call("admin.conversations.create", params=kwargs)

              Create a public or private channel-based conversation. -https://api.slack.com/methods/admin.conversations.create

              +https://docs.slack.dev/reference/methods/admin.conversations.create

              def admin_conversations_createForObjects(self,
              *,
              object_id: str,
              salesforce_org_id: str,
              invite_object_team: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6745,7 +6819,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -6753,7 +6827,7 @@

              Methods

              return self.api_call("admin.conversations.createForObjects", params=kwargs)

              Create a Salesforce channel for the corresponding object provided. -https://api.slack.com/methods/admin.conversations.createForObjects

              +https://docs.slack.dev/reference/methods/admin.conversations.createForObjects

              def admin_conversations_delete(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6770,13 +6844,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.delete

              def admin_conversations_disconnectShared(self,
              *,
              channel_id: str,
              leaving_team_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6794,7 +6868,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -6804,7 +6878,7 @@

              Methods

              return self.api_call("admin.conversations.disconnectShared", params=kwargs)

              Disconnect a connected channel from one or more workspaces. -https://api.slack.com/methods/admin.conversations.disconnectShared

              +https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared

              def admin_conversations_ekm_listOriginalConnectedChannelInfo(self,
              *,
              channel_ids: str | Sequence[str] | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              team_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6826,7 +6900,7 @@

              Methods

              """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -6847,7 +6921,7 @@

              Methods

              List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. -https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

              +https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

              def admin_conversations_getConversationPrefs(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6864,13 +6938,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs)

              Get conversation preferences for a public or private channel. -https://api.slack.com/methods/admin.conversations.getConversationPrefs

              +https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs

              def admin_conversations_getCustomRetention(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -6887,13 +6961,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention

              def admin_conversations_getTeams(self,
              *,
              channel_id: str,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -6912,7 +6986,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -6924,7 +6998,7 @@

              Methods

              return self.api_call("admin.conversations.getTeams", params=kwargs)

              Set the workspaces in an Enterprise grid org that connect to a channel. -https://api.slack.com/methods/admin.conversations.getTeams

              +https://docs.slack.dev/reference/methods/admin.conversations.getTeams

              def admin_conversations_invite(self, *, channel_id: str, user_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -6942,7 +7016,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -6953,7 +7027,7 @@

              Methods

              return self.api_call("admin.conversations.invite", params=kwargs)

              Invite a user to a public or private channel. -https://api.slack.com/methods/admin.conversations.invite

              +https://docs.slack.dev/reference/methods/admin.conversations.invite

              def admin_conversations_linkObjects(self, *, channel: str, record_id: str, salesforce_org_id: str, **kwargs) ‑> SlackResponse @@ -6972,7 +7046,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -6984,7 +7058,7 @@

              Methods

              return self.api_call("admin.conversations.linkObjects", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.linkObjects

              def admin_conversations_lookup(self,
              *,
              last_message_activity_before: int,
              team_ids: str | Sequence[str],
              cursor: str | None = None,
              limit: int | None = None,
              max_member_count: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7005,7 +7079,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -7022,7 +7096,7 @@

              Methods

              return self.api_call("admin.conversations.lookup", params=kwargs)

              Returns channels on the given team using the filters. -https://api.slack.com/methods/admin.conversations.lookup

              +https://docs.slack.dev/reference/methods/admin.conversations.lookup

              def admin_conversations_removeCustomRetention(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -7039,13 +7113,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention

              def admin_conversations_rename(self, *, channel_id: str, name: str, **kwargs) ‑> SlackResponse @@ -7063,13 +7137,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.rename

              def admin_conversations_restrictAccess_addGroup(self, *, channel_id: str, group_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -7088,7 +7162,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -7104,7 +7178,7 @@

              Methods

              )

              Add an allowlist of IDP groups for accessing a channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup

              +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup

              def admin_conversations_restrictAccess_listGroups(self, *, channel_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -7122,7 +7196,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -7137,7 +7211,7 @@

              Methods

              )
              +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups

              def admin_conversations_restrictAccess_removeGroup(self, *, channel_id: str, group_id: str, team_id: str, **kwargs) ‑> SlackResponse @@ -7156,7 +7230,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -7172,7 +7246,7 @@

              Methods

              )

              Remove a linked IDP group linked from a private channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup

              +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup

              def admin_conversations_setConversationPrefs(self, *, channel_id: str, prefs: str | Dict[str, str], **kwargs) ‑> SlackResponse @@ -7238,7 +7312,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -7248,7 +7322,7 @@

              Methods

              return self.api_call("admin.conversations.setConversationPrefs", params=kwargs)

              Set the posting permissions for a public or private channel. -https://api.slack.com/methods/admin.conversations.setConversationPrefs

              +https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs

              def admin_conversations_setCustomRetention(self, *, channel_id: str, duration_days: int, **kwargs) ‑> SlackResponse @@ -7266,13 +7340,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention

              def admin_conversations_setTeams(self,
              *,
              channel_id: str,
              org_channel: bool | None = None,
              target_team_ids: str | Sequence[str] | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7292,7 +7366,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -7308,7 +7382,7 @@

              Methods

              return self.api_call("admin.conversations.setTeams", params=kwargs)

              Set the workspaces in an Enterprise grid org that connect to a public or private channel. -https://api.slack.com/methods/admin.conversations.setTeams

              +https://docs.slack.dev/reference/methods/admin.conversations.setTeams

              def admin_conversations_unarchive(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -7325,13 +7399,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs)

              Unarchive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

              +https://docs.slack.dev/reference/methods/admin.conversations.archive

              def admin_conversations_unlinkObjects(self, *, channel: str, new_name: str, **kwargs) ‑> SlackResponse @@ -7349,7 +7423,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -7360,7 +7434,7 @@

              Methods

              return self.api_call("admin.conversations.unlinkObjects", params=kwargs)

              Unlink a Salesforce record from a channel. -https://api.slack.com/methods/admin.conversations.unlinkObjects

              +https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects

              def admin_emoji_add(self, *, name: str, url: str, **kwargs) ‑> SlackResponse @@ -7378,13 +7452,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.emoji.add

              def admin_emoji_addAlias(self, *, alias_for: str, name: str, **kwargs) ‑> SlackResponse @@ -7402,13 +7476,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.emoji.addAlias

              def admin_emoji_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -7426,13 +7500,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs)

              List emoji for an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.list

              +https://docs.slack.dev/reference/methods/admin.emoji.list

              def admin_emoji_remove(self, *, name: str, **kwargs) ‑> SlackResponse @@ -7449,13 +7523,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs)

              Remove an emoji across an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.remove

              +https://docs.slack.dev/reference/methods/admin.emoji.remove

              def admin_emoji_rename(self, *, name: str, new_name: str, **kwargs) ‑> SlackResponse @@ -7473,13 +7547,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.emoji.rename

              def admin_functions_list(self,
              *,
              app_ids: str | Sequence[str],
              team_id: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7499,7 +7573,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -7515,7 +7589,7 @@

              Methods

              return self.api_call("admin.functions.list", params=kwargs)

              Look up functions by a set of apps -https://api.slack.com/methods/admin.functions.list

              +https://docs.slack.dev/reference/methods/admin.functions.list

              def admin_functions_permissions_lookup(self, *, function_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -7533,7 +7607,7 @@

              Methods

              ) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -7543,7 +7617,7 @@

              Methods

              Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. -https://api.slack.com/methods/admin.functions.permissions.lookup

              +https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup

              def admin_functions_permissions_set(self,
              *,
              function_id: str,
              visibility: str,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7563,7 +7637,7 @@

              Methods

              ) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -7580,7 +7654,7 @@

              Methods

              Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities -https://api.slack.com/methods/admin.functions.permissions.set

              +https://docs.slack.dev/reference/methods/admin.functions.permissions.set

              def admin_inviteRequests_approve(self, *, invite_request_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -7598,13 +7672,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.inviteRequests.approve

              def admin_inviteRequests_approved_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7623,7 +7697,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -7635,7 +7709,7 @@

              Methods

              return self.api_call("admin.inviteRequests.approved.list", params=kwargs)

              List all approved workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.approved.list

              +https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list

              def admin_inviteRequests_denied_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7654,7 +7728,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -7666,7 +7740,7 @@

              Methods

              return self.api_call("admin.inviteRequests.denied.list", params=kwargs)

              List all denied workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.denied.list

              +https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list

              def admin_inviteRequests_deny(self, *, invite_request_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -7684,13 +7758,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.inviteRequests.deny

              def admin_inviteRequests_list(self, **kwargs) ‑> SlackResponse @@ -7726,7 +7800,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7740,7 +7814,7 @@

              Methods

              return self.api_call("admin.roles.addAssignments", params=kwargs)

              Adds members to the specified role with the specified scopes -https://api.slack.com/methods/admin.roles.addAssignments

              +https://docs.slack.dev/reference/methods/admin.roles.addAssignments

              def admin_roles_listAssignments(self,
              *,
              role_ids: str | Sequence[str] | None = None,
              entity_ids: str | Sequence[str] | None = None,
              cursor: str | None = None,
              limit: str | int | None = None,
              sort_dir: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7762,7 +7836,7 @@

              Methods

              ) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -7777,7 +7851,7 @@

              Methods

              Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities -https://api.slack.com/methods/admin.roles.listAssignments

              +https://docs.slack.dev/reference/methods/admin.roles.listAssignments

              def admin_roles_removeAssignments(self,
              *,
              role_id: str,
              entity_ids: str | Sequence[str],
              user_ids: str | Sequence[str],
              **kwargs) ‑> SlackResponse
              @@ -7796,7 +7870,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7810,7 +7884,7 @@

              Methods

              return self.api_call("admin.roles.removeAssignments", params=kwargs)

              Removes a set of users from a role for the given scopes and entities -https://api.slack.com/methods/admin.roles.removeAssignments

              +https://docs.slack.dev/reference/methods/admin.roles.removeAssignments

              def admin_teams_admins_list(self, *, team_id: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -7829,7 +7903,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -7841,7 +7915,7 @@

              Methods

              return self.api_call("admin.teams.admins.list", http_verb="GET", params=kwargs)

              List all of the admins on a given workspace. -https://api.slack.com/methods/admin.inviteRequests.list

              +https://docs.slack.dev/reference/methods/admin.inviteRequests.list

              def admin_teams_create(self,
              *,
              team_domain: str,
              team_name: str,
              team_description: str | None = None,
              team_discoverability: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -7861,7 +7935,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -7874,7 +7948,7 @@

              Methods

              return self.api_call("admin.teams.create", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.create

              def admin_teams_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -7892,13 +7966,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs)

              List all teams on an Enterprise organization. -https://api.slack.com/methods/admin.teams.list

              +https://docs.slack.dev/reference/methods/admin.teams.list

              def admin_teams_owners_list(self, *, team_id: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -7917,13 +7991,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs)

              List all of the admins on a given workspace. -https://api.slack.com/methods/admin.teams.owners.list

              +https://docs.slack.dev/reference/methods/admin.teams.owners.list

              def admin_teams_settings_info(self, *, team_id: str, **kwargs) ‑> SlackResponse @@ -7940,13 +8014,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs)

              Fetch information about settings in a workspace -https://api.slack.com/methods/admin.teams.settings.info

              +https://docs.slack.dev/reference/methods/admin.teams.settings.info

              def admin_teams_settings_setDefaultChannels(self, *, team_id: str, channel_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -7964,7 +8038,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -7974,7 +8048,7 @@

              Methods

              return self.api_call("admin.teams.settings.setDefaultChannels", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels

              def admin_teams_settings_setDescription(self, *, team_id: str, description: str, **kwargs) ‑> SlackResponse @@ -7992,13 +8066,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription

              def admin_teams_settings_setDiscoverability(self, *, team_id: str, discoverability: str, **kwargs) ‑> SlackResponse @@ -8016,13 +8090,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability

              def admin_teams_settings_setIcon(self, *, team_id: str, image_url: str, **kwargs) ‑> SlackResponse @@ -8040,13 +8114,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon

              def admin_teams_settings_setName(self, *, team_id: str, name: str, **kwargs) ‑> SlackResponse @@ -8064,13 +8138,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setName

              def admin_usergroups_addChannels(self,
              *,
              channel_ids: str | Sequence[str],
              usergroup_id: str,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8089,7 +8163,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -8099,7 +8173,7 @@

              Methods

              return self.api_call("admin.usergroups.addChannels", params=kwargs)

              Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.addChannels

              +https://docs.slack.dev/reference/methods/admin.usergroups.addChannels

              def admin_usergroups_addTeams(self,
              *,
              usergroup_id: str,
              team_ids: str | Sequence[str],
              auto_provision: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8118,7 +8192,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -8128,7 +8202,7 @@

              Methods

              return self.api_call("admin.usergroups.addTeams", params=kwargs)

              Associate one or more default workspaces with an organization-wide IDP group. -https://api.slack.com/methods/admin.usergroups.addTeams

              +https://docs.slack.dev/reference/methods/admin.usergroups.addTeams

              def admin_usergroups_listChannels(self,
              *,
              usergroup_id: str,
              include_num_members: bool | None = None,
              team_id: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8147,7 +8221,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -8159,7 +8233,7 @@

              Methods

              return self.api_call("admin.usergroups.listChannels", params=kwargs)

              Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.listChannels

              +https://docs.slack.dev/reference/methods/admin.usergroups.listChannels

              def admin_usergroups_removeChannels(self, *, usergroup_id: str, channel_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -8177,7 +8251,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -8187,7 +8261,7 @@

              Methods

              return self.api_call("admin.usergroups.removeChannels", params=kwargs)

              Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.removeChannels

              +https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels

              def admin_users_assign(self,
              *,
              team_id: str,
              user_id: str,
              channel_ids: str | Sequence[str] | None = None,
              is_restricted: bool | None = None,
              is_ultra_restricted: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8208,7 +8282,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -8225,7 +8299,7 @@

              Methods

              return self.api_call("admin.users.assign", params=kwargs)

              Add an Enterprise user to a workspace. -https://api.slack.com/methods/admin.users.assign

              +https://docs.slack.dev/reference/methods/admin.users.assign

              def admin_users_invite(self,
              *,
              team_id: str,
              email: str,
              channel_ids: str | Sequence[str],
              custom_message: str | None = None,
              email_password_policy_enabled: bool | None = None,
              guest_expiration_ts: str | float | None = None,
              is_restricted: bool | None = None,
              is_ultra_restricted: bool | None = None,
              real_name: str | None = None,
              resend: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8251,7 +8325,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -8273,10 +8347,10 @@

              Methods

              return self.api_call("admin.users.invite", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.users.invite

              -def admin_users_list(self,
              *,
              team_id: str,
              include_deactivated_user_workspaces: bool | None = None,
              is_active: bool | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              +def admin_users_list(self,
              *,
              team_id: str | None = None,
              include_deactivated_user_workspaces: bool | None = None,
              is_active: bool | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8286,7 +8360,7 @@

              Methods

              def admin_users_list(
                   self,
                   *,
              -    team_id: str,
              +    team_id: Optional[str] = None,
                   include_deactivated_user_workspaces: Optional[bool] = None,
                   is_active: Optional[bool] = None,
                   cursor: Optional[str] = None,
              @@ -8294,7 +8368,7 @@ 

              Methods

              **kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -8308,7 +8382,7 @@

              Methods

              return self.api_call("admin.users.list", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.users.list

              def admin_users_remove(self, *, team_id: str, user_id: str, **kwargs) ‑> SlackResponse @@ -8326,13 +8400,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs)

              Remove a user from a workspace. -https://api.slack.com/methods/admin.users.remove

              +https://docs.slack.dev/reference/methods/admin.users.remove

              def admin_users_session_clearSettings(self, *, user_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -8350,7 +8424,7 @@

              Methods

              ) -> SlackResponse: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8360,7 +8434,7 @@

              Methods

              Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. -https://api.slack.com/methods/admin.users.session.clearSettings

              +https://docs.slack.dev/reference/methods/admin.users.session.clearSettings

              def admin_users_session_getSettings(self, *, user_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -8378,7 +8452,7 @@

              Methods

              ) -> SlackResponse: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8388,7 +8462,7 @@

              Methods

              Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. -https://api.slack.com/methods/admin.users.session.getSettings

              +https://docs.slack.dev/reference/methods/admin.users.session.getSettings

              def admin_users_session_invalidate(self, *, session_id: str, team_id: str, **kwargs) ‑> SlackResponse @@ -8406,13 +8480,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs)

              Invalidate a single session for a user by session_id. -https://api.slack.com/methods/admin.users.session.invalidate

              +https://docs.slack.dev/reference/methods/admin.users.session.invalidate

              def admin_users_session_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              user_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8432,7 +8506,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -8445,7 +8519,7 @@

              Methods

              return self.api_call("admin.users.session.list", params=kwargs)

              Lists all active user sessions for an organization -https://api.slack.com/methods/admin.users.session.list

              +https://docs.slack.dev/reference/methods/admin.users.session.list

              def admin_users_session_reset(self,
              *,
              user_id: str,
              mobile_only: bool | None = None,
              web_only: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8464,7 +8538,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -8476,7 +8550,7 @@

              Methods

              return self.api_call("admin.users.session.reset", params=kwargs)

              Wipes all valid sessions on all devices for a given user. -https://api.slack.com/methods/admin.users.session.reset

              +https://docs.slack.dev/reference/methods/admin.users.session.reset

              def admin_users_session_resetBulk(self,
              *,
              user_ids: str | Sequence[str],
              mobile_only: bool | None = None,
              web_only: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8495,7 +8569,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8510,7 +8584,7 @@

              Methods

              return self.api_call("admin.users.session.resetBulk", params=kwargs)

              Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users -https://api.slack.com/methods/admin.users.session.resetBulk

              +https://docs.slack.dev/reference/methods/admin.users.session.resetBulk

              def admin_users_session_setSettings(self,
              *,
              user_ids: str | Sequence[str],
              desktop_app_browser_quit: bool | None = None,
              duration: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8530,7 +8604,7 @@

              Methods

              ) -> SlackResponse: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8546,7 +8620,7 @@

              Methods

              Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. -https://api.slack.com/methods/admin.users.session.setSettings

              +https://docs.slack.dev/reference/methods/admin.users.session.setSettings

              def admin_users_setAdmin(self, *, team_id: str, user_id: str, **kwargs) ‑> SlackResponse @@ -8564,13 +8638,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs)

              Set an existing guest, regular user, or owner to be an admin user. -https://api.slack.com/methods/admin.users.setAdmin

              +https://docs.slack.dev/reference/methods/admin.users.setAdmin

              def admin_users_setExpiration(self, *, expiration_ts: int, user_id: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -8589,13 +8663,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs)

              Set an expiration for a guest user. -https://api.slack.com/methods/admin.users.setExpiration

              +https://docs.slack.dev/reference/methods/admin.users.setExpiration

              def admin_users_setOwner(self, *, team_id: str, user_id: str, **kwargs) ‑> SlackResponse @@ -8613,13 +8687,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs)

              Set an existing guest, regular user, or admin user to be a workspace owner. -https://api.slack.com/methods/admin.users.setOwner

              +https://docs.slack.dev/reference/methods/admin.users.setOwner

              def admin_users_setRegular(self, *, team_id: str, user_id: str, **kwargs) ‑> SlackResponse @@ -8637,13 +8711,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs)

              Set an existing guest user, admin user, or owner to be a regular user. -https://api.slack.com/methods/admin.users.setRegular

              +https://docs.slack.dev/reference/methods/admin.users.setRegular

              def admin_users_unsupportedVersions_export(self,
              *,
              date_end_of_support: str | int | None = None,
              date_sessions_started: str | int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8662,7 +8736,7 @@

              Methods

              ) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -8674,7 +8748,7 @@

              Methods

              Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. -https://api.slack.com/methods/admin.users.unsupportedVersions.export

              +https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export

              def admin_workflows_collaborators_add(self,
              *,
              collaborator_ids: str | Sequence[str],
              workflow_ids: str | Sequence[str],
              **kwargs) ‑> SlackResponse
              @@ -8692,7 +8766,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8705,7 +8779,7 @@

              Methods

              return self.api_call("admin.workflows.collaborators.add", params=kwargs)

              Add collaborators to workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.add

              +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add

              def admin_workflows_collaborators_remove(self,
              *,
              collaborator_ids: str | Sequence[str],
              workflow_ids: str | Sequence[str],
              **kwargs) ‑> SlackResponse
              @@ -8723,7 +8797,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8736,7 +8810,7 @@

              Methods

              return self.api_call("admin.workflows.collaborators.remove", params=kwargs)

              Remove collaborators from workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.remove

              +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove

              def admin_workflows_permissions_lookup(self,
              *,
              workflow_ids: str | Sequence[str],
              max_workflow_triggers: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8754,7 +8828,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8768,7 +8842,7 @@

              Methods

              return self.api_call("admin.workflows.permissions.lookup", params=kwargs)

              Look up the permissions for a set of workflows -https://api.slack.com/methods/admin.workflows.permissions.lookup

              +https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup

              def admin_workflows_unpublish(self, *, workflow_ids: str | Sequence[str], **kwargs) ‑> SlackResponse @@ -8834,7 +8908,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8843,7 +8917,7 @@

              Methods

              return self.api_call("admin.workflows.unpublish", params=kwargs)

              Unpublish workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.unpublish

              +https://docs.slack.dev/reference/methods/admin.workflows.unpublish

              def api_test(self, *, error: str | None = None, **kwargs) ‑> SlackResponse @@ -8860,13 +8934,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs)

              Checks API calling code. -https://api.slack.com/methods/api.test

              +https://docs.slack.dev/reference/methods/api.test

              def apps_connections_open(self, *, app_token: str, **kwargs) ‑> SlackResponse @@ -8884,14 +8958,14 @@

              Methods

              ) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs)

              Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads -https://api.slack.com/methods/apps.connections.open

              +https://docs.slack.dev/reference/methods/apps.connections.open

              def apps_event_authorizations_list(self,
              *,
              event_context: str,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8911,14 +8985,14 @@

              Methods

              ) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs)

              Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. -https://api.slack.com/methods/apps.event.authorizations.list

              +https://docs.slack.dev/reference/methods/apps.event.authorizations.list

              def apps_manifest_create(self, *, manifest: str | Dict[str, Any], **kwargs) ‑> SlackResponse @@ -8935,7 +9009,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8944,7 +9018,7 @@

              Methods

              return self.api_call("apps.manifest.create", params=kwargs)

              Create an app from an app manifest -https://api.slack.com/methods/apps.manifest.create

              +https://docs.slack.dev/reference/methods/apps.manifest.create

              def apps_manifest_delete(self, *, app_id: str, **kwargs) ‑> SlackResponse @@ -8961,13 +9035,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs)

              Permanently deletes an app created through app manifests -https://api.slack.com/methods/apps.manifest.delete

              +https://docs.slack.dev/reference/methods/apps.manifest.delete

              def apps_manifest_export(self, *, app_id: str, **kwargs) ‑> SlackResponse @@ -8984,13 +9058,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs)

              Export an app manifest from an existing app -https://api.slack.com/methods/apps.manifest.export

              +https://docs.slack.dev/reference/methods/apps.manifest.export

              def apps_manifest_update(self, *, app_id: str, manifest: str | Dict[str, Any], **kwargs) ‑> SlackResponse @@ -9008,7 +9082,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -9018,7 +9092,7 @@

              Methods

              return self.api_call("apps.manifest.update", params=kwargs)

              Update an app from an app manifest -https://api.slack.com/methods/apps.manifest.update

              +https://docs.slack.dev/reference/methods/apps.manifest.update

              def apps_manifest_validate(self, *, manifest: str | Dict[str, Any], app_id: str | None = None, **kwargs) ‑> SlackResponse @@ -9036,7 +9110,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -9046,7 +9120,7 @@

              Methods

              return self.api_call("apps.manifest.validate", params=kwargs)
              +https://docs.slack.dev/reference/methods/apps.manifest.validate

              def apps_uninstall(self, *, client_id: str, client_secret: str, **kwargs) ‑> SlackResponse @@ -9064,13 +9138,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs)

              Uninstalls your app from a workspace. -https://api.slack.com/methods/apps.uninstall

              +https://docs.slack.dev/reference/methods/apps.uninstall

              def assistant_threads_setStatus(self, *, channel_id: str, thread_ts: str, status: str, **kwargs) ‑> SlackResponse @@ -9089,13 +9163,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return self.api_call("assistant.threads.setStatus", params=kwargs)
              +https://docs.slack.dev/reference/methods/assistant.threads.setStatus

              def assistant_threads_setSuggestedPrompts(self,
              *,
              channel_id: str,
              thread_ts: str,
              title: str | None = None,
              prompts: List[Dict[str, str]],
              **kwargs) ‑> SlackResponse
              @@ -9115,7 +9189,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -9123,7 +9197,7 @@

              Methods

              return self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
              +https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

              def assistant_threads_setTitle(self, *, channel_id: str, thread_ts: str, title: str, **kwargs) ‑> SlackResponse @@ -9142,13 +9216,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs)
              +https://docs.slack.dev/reference/methods/assistant.threads.setTitle

              def auth_revoke(self, *, test: bool | None = None, **kwargs) ‑> SlackResponse @@ -9165,13 +9239,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/auth.revoke

              def auth_teams_list(self,
              cursor: str | None = None,
              limit: int | None = None,
              include_icon: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9189,13 +9263,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs)

              List the workspaces a token can access. -https://api.slack.com/methods/auth.teams.list

              +https://docs.slack.dev/reference/methods/auth.teams.list

              def auth_test(self, **kwargs) ‑> SlackResponse @@ -9210,12 +9284,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs)

              Checks authentication & identity. -https://api.slack.com/methods/auth.test

              +https://docs.slack.dev/reference/methods/auth.test

              def bookmarks_add(self,
              *,
              channel_id: str,
              title: str,
              type: str,
              emoji: str | None = None,
              entity_id: str | None = None,
              link: str | None = None,
              parent_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9238,7 +9312,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -9254,7 +9328,7 @@

              Methods

              return self.api_call("bookmarks.add", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/bookmarks.add

              def bookmarks_edit(self,
              *,
              bookmark_id: str,
              channel_id: str,
              emoji: str | None = None,
              link: str | None = None,
              title: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9275,7 +9349,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -9289,7 +9363,7 @@

              Methods

              return self.api_call("bookmarks.edit", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/bookmarks.edit

              def bookmarks_list(self, *, channel_id: str, **kwargs) ‑> SlackResponse @@ -9306,13 +9380,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs)

              List bookmark for the channel. -https://api.slack.com/methods/bookmarks.list

              +https://docs.slack.dev/reference/methods/bookmarks.list

              def bookmarks_remove(self, *, bookmark_id: str, channel_id: str, **kwargs) ‑> SlackResponse @@ -9330,13 +9404,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs)

              Remove bookmark from the channel. -https://api.slack.com/methods/bookmarks.remove

              +https://docs.slack.dev/reference/methods/bookmarks.remove

              def bots_info(self, *, bot: str | None = None, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -9354,13 +9428,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs)

              Gets information about a bot user. -https://api.slack.com/methods/bots.info

              +https://docs.slack.dev/reference/methods/bots.info

              def calls_add(self,
              *,
              external_unique_id: str,
              join_url: str,
              created_by: str | None = None,
              date_start: int | None = None,
              desktop_app_join_url: str | None = None,
              external_display_id: str | None = None,
              title: str | None = None,
              users: str | Sequence[Dict[str, str]] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9384,7 +9458,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -9404,7 +9478,7 @@

              Methods

              return self.api_call("calls.add", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/calls.add

              def calls_end(self, *, id: str, duration: int | None = None, **kwargs) ‑> SlackResponse @@ -9422,13 +9496,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/calls.end

              def calls_info(self, *, id: str, **kwargs) ‑> SlackResponse @@ -9445,13 +9519,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs)

              Returns information about a Call. -https://api.slack.com/methods/calls.info

              +https://docs.slack.dev/reference/methods/calls.info

              def calls_participants_add(self, *, id: str, users: str | Sequence[Dict[str, str]], **kwargs) ‑> SlackResponse @@ -9469,14 +9543,14 @@

              Methods

              **kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.add", http_verb="POST", params=kwargs)

              Registers new participants added to a Call. -https://api.slack.com/methods/calls.participants.add

              +https://docs.slack.dev/reference/methods/calls.participants.add

              def calls_participants_remove(self, *, id: str, users: str | Sequence[Dict[str, str]], **kwargs) ‑> SlackResponse @@ -9494,14 +9568,14 @@

              Methods

              **kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.remove", http_verb="POST", params=kwargs)

              Registers participants removed from a Call. -https://api.slack.com/methods/calls.participants.remove

              +https://docs.slack.dev/reference/methods/calls.participants.remove

              def calls_update(self,
              *,
              id: str,
              desktop_app_join_url: str | None = None,
              join_url: str | None = None,
              title: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9521,7 +9595,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -9534,7 +9608,7 @@

              Methods

              return self.api_call("calls.update", http_verb="POST", params=kwargs)

              Updates information about a Call. -https://api.slack.com/methods/calls.update

              +https://docs.slack.dev/reference/methods/calls.update

              def canvases_access_delete(self,
              *,
              canvas_id: str,
              channel_ids: str | Sequence[str] | None = None,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9553,7 +9627,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -9569,7 +9643,7 @@

              Methods

              return self.api_call("canvases.access.delete", params=kwargs)

              Create a Channel Canvas for a channel -https://api.slack.com/methods/canvases.access.delete

              +https://docs.slack.dev/reference/methods/canvases.access.delete

              def canvases_access_set(self,
              *,
              canvas_id: str,
              access_level: str,
              channel_ids: str | Sequence[str] | None = None,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -9589,7 +9663,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -9606,7 +9680,7 @@

              Methods

              return self.api_call("canvases.access.set", params=kwargs)

              Sets the access level to a canvas for specified entities -https://api.slack.com/methods/canvases.access.set

              +https://docs.slack.dev/reference/methods/canvases.access.set

              def canvases_create(self, *, title: str | None = None, document_content: Dict[str, str], **kwargs) ‑> SlackResponse @@ -9624,13 +9698,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs)
              +https://docs.slack.dev/reference/methods/canvases.create

              def canvases_delete(self, *, canvas_id: str, **kwargs) ‑> SlackResponse @@ -9647,13 +9721,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/canvases.delete

              def canvases_edit(self, *, canvas_id: str, changes: Sequence[Dict[str, Any]], **kwargs) ‑> SlackResponse @@ -9671,13 +9745,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs)
              +https://docs.slack.dev/reference/methods/canvases.edit

              def canvases_sections_lookup(self, *, canvas_id: str, criteria: Dict[str, Any], **kwargs) ‑> SlackResponse @@ -9695,13 +9769,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs)

              Find sections matching the provided criteria -https://api.slack.com/methods/canvases.sections.lookup

              +https://docs.slack.dev/reference/methods/canvases.sections.lookup

              def channels_archive(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10035,13 +10109,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/chat.delete

              def chat_deleteScheduledMessage(self,
              *,
              channel: str,
              scheduled_message_id: str,
              as_user: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10060,7 +10134,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -10072,7 +10146,7 @@

              Methods

              return self.api_call("chat.deleteScheduledMessage", params=kwargs)
              +https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage

              def chat_meMessage(self, *, channel: str, text: str, **kwargs) ‑> SlackResponse @@ -10114,16 +10188,16 @@

              Methods

              **kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs)

              Share a me message into a channel. -https://api.slack.com/methods/chat.meMessage

              +https://docs.slack.dev/reference/methods/chat.meMessage

              -def chat_postEphemeral(self,
              *,
              channel: str,
              user: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              **kwargs) ‑> SlackResponse
              +def chat_postEphemeral(self,
              *,
              channel: str,
              user: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10145,10 +10219,11 @@

              Methods

              link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -10164,19 +10239,20 @@

              Methods

              "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs)

              Sends an ephemeral message to a user in a channel. -https://api.slack.com/methods/chat.postEphemeral

              +https://docs.slack.dev/reference/methods/chat.postEphemeral

              -def chat_postMessage(self,
              *,
              channel: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              container_id: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              mrkdwn: bool | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> SlackResponse
              +def chat_postMessage(self,
              *,
              channel: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              container_id: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              mrkdwn: bool | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              metadata: Dict | Metadata | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10203,10 +10279,11 @@

              Methods

              username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -10227,19 +10304,20 @@

              Methods

              "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs)

              Sends a message to a channel. -https://api.slack.com/methods/chat.postMessage

              +https://docs.slack.dev/reference/methods/chat.postMessage

              -def chat_scheduleMessage(self,
              *,
              channel: str,
              post_at: str | int,
              text: str,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              link_names: bool | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> SlackResponse
              +def chat_scheduleMessage(self,
              *,
              channel: str,
              post_at: str | int,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              link_names: bool | None = None,
              metadata: Dict | Metadata | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10251,7 +10329,7 @@

              Methods

              *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -10262,10 +10340,11 @@

              Methods

              unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -10282,16 +10361,17 @@

              Methods

              "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs)
              +https://docs.slack.dev/reference/methods/chat.scheduleMessage

              def chat_scheduledMessages_list(self,
              *,
              channel: str | None = None,
              cursor: str | None = None,
              latest: str | None = None,
              limit: int | None = None,
              oldest: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10313,7 +10393,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -10328,7 +10408,7 @@

              Methods

              return self.api_call("chat.scheduledMessages.list", params=kwargs)
              +https://docs.slack.dev/reference/methods/chat.scheduledMessages.list

              def chat_unfurl(self,
              *,
              channel: str | None = None,
              ts: str | None = None,
              source: str | None = None,
              unfurl_id: str | None = None,
              unfurls: Dict[str, Dict] | None = None,
              user_auth_blocks: str | Sequence[Dict | Block] | None = None,
              user_auth_message: str | None = None,
              user_auth_required: bool | None = None,
              user_auth_url: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10353,7 +10433,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -10374,10 +10454,10 @@

              Methods

              return self.api_call("chat.unfurl", json=kwargs)

              Provide custom unfurl behavior for user-posted URLs. -https://api.slack.com/methods/chat.unfurl

              +https://docs.slack.dev/reference/methods/chat.unfurl

              -def chat_update(self,
              *,
              channel: str,
              ts: str,
              text: str | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              as_user: bool | None = None,
              file_ids: str | Sequence[str] | None = None,
              link_names: bool | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> SlackResponse
              +def chat_update(self,
              *,
              channel: str,
              ts: str,
              text: str | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              as_user: bool | None = None,
              file_ids: str | Sequence[str] | None = None,
              link_names: bool | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              metadata: Dict | Metadata | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10398,10 +10478,11 @@

              Methods

              parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -10415,6 +10496,7 @@

              Methods

              "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -10423,12 +10505,12 @@

              Methods

              kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs)

              Updates a message in a channel. -https://api.slack.com/methods/chat.update

              +https://docs.slack.dev/reference/methods/chat.update

              def conversations_acceptSharedInvite(self,
              *,
              channel_name: str,
              channel_id: str | None = None,
              invite_id: str | None = None,
              free_trial_accepted: bool | None = None,
              is_private: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10450,7 +10532,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -10467,7 +10549,7 @@

              Methods

              return self.api_call("conversations.acceptSharedInvite", http_verb="POST", params=kwargs)

              Accepts an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.acceptSharedInvite

              +https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite

              def conversations_approveSharedInvite(self, *, invite_id: str, target_team: str | None = None, **kwargs) ‑> SlackResponse @@ -10485,13 +10567,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs)

              Approves an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.approveSharedInvite

              +https://docs.slack.dev/reference/methods/conversations.approveSharedInvite

              def conversations_archive(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10508,13 +10590,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.archive

              def conversations_canvases_create(self, *, channel_id: str, document_content: Dict[str, str], **kwargs) ‑> SlackResponse @@ -10532,13 +10614,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.canvases.create

              def conversations_close(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10555,13 +10637,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs)

              Closes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.close

              +https://docs.slack.dev/reference/methods/conversations.close

              def conversations_create(self,
              *,
              name: str,
              is_private: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10580,13 +10662,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs)

              Initiates a public or private channel-based conversation -https://api.slack.com/methods/conversations.create

              +https://docs.slack.dev/reference/methods/conversations.create

              def conversations_declineSharedInvite(self, *, invite_id: str, target_team: str | None = None, **kwargs) ‑> SlackResponse @@ -10604,13 +10686,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs)

              Declines a Slack Connect channel invite. -https://api.slack.com/methods/conversations.declineSharedInvite

              +https://docs.slack.dev/reference/methods/conversations.declineSharedInvite

              def conversations_externalInvitePermissions_set(self, *, action: str, channel: str, target_team: str, **kwargs) ‑> SlackResponse @@ -10624,7 +10706,7 @@

              Methods

              self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -10636,7 +10718,7 @@

              Methods

              return self.api_call("conversations.externalInvitePermissions.set", params=kwargs)

              Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. -https://api.slack.com/methods/conversations.externalInvitePermissions.set

              +https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set

              def conversations_history(self,
              *,
              channel: str,
              cursor: str | None = None,
              inclusive: bool | None = None,
              include_all_metadata: bool | None = None,
              latest: str | None = None,
              limit: int | None = None,
              oldest: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10659,7 +10741,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -10675,7 +10757,7 @@

              Methods

              return self.api_call("conversations.history", http_verb="GET", params=kwargs)

              Fetches a conversation's history of messages and events. -https://api.slack.com/methods/conversations.history

              +https://docs.slack.dev/reference/methods/conversations.history

              def conversations_info(self,
              *,
              channel: str,
              include_locale: bool | None = None,
              include_num_members: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10694,7 +10776,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -10706,7 +10788,7 @@

              Methods

              return self.api_call("conversations.info", http_verb="GET", params=kwargs)

              Retrieve information about a conversation. -https://api.slack.com/methods/conversations.info

              +https://docs.slack.dev/reference/methods/conversations.info

              def conversations_invite(self,
              *,
              channel: str,
              users: str | Sequence[str],
              force: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10725,7 +10807,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -10740,7 +10822,7 @@

              Methods

              return self.api_call("conversations.invite", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.invite

              def conversations_inviteShared(self,
              *,
              channel: str,
              emails: str | Sequence[str] | None = None,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10759,7 +10841,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -10775,7 +10857,7 @@

              Methods

              return self.api_call("conversations.inviteShared", http_verb="GET", params=kwargs)

              Sends an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.inviteShared

              +https://docs.slack.dev/reference/methods/conversations.inviteShared

              def conversations_join(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10792,13 +10874,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs)

              Joins an existing conversation. -https://api.slack.com/methods/conversations.join

              +https://docs.slack.dev/reference/methods/conversations.join

              def conversations_kick(self, *, channel: str, user: str, **kwargs) ‑> SlackResponse @@ -10816,13 +10898,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs)

              Removes a user from a conversation. -https://api.slack.com/methods/conversations.kick

              +https://docs.slack.dev/reference/methods/conversations.kick

              def conversations_leave(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -10839,13 +10921,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.leave

              def conversations_list(self,
              *,
              cursor: str | None = None,
              exclude_archived: bool | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              types: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10866,7 +10948,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -10883,7 +10965,7 @@

              Methods

              return self.api_call("conversations.list", http_verb="GET", params=kwargs)

              Lists all channels in a Slack team. -https://api.slack.com/methods/conversations.list

              +https://docs.slack.dev/reference/methods/conversations.list

              def conversations_listConnectInvites(self,
              *,
              count: int | None = None,
              cursor: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10903,14 +10985,14 @@

              Methods

              ) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs)

              List shared channel invites that have been generated or received but have not yet been approved by all parties. -https://api.slack.com/methods/conversations.listConnectInvites

              +https://docs.slack.dev/reference/methods/conversations.listConnectInvites

              def conversations_mark(self, *, channel: str, ts: str, **kwargs) ‑> SlackResponse @@ -10928,13 +11010,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs)

              Sets the read cursor in a channel. -https://api.slack.com/methods/conversations.mark

              +https://docs.slack.dev/reference/methods/conversations.mark

              def conversations_members(self, *, channel: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> SlackResponse @@ -10953,13 +11035,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs)

              Retrieve members of a conversation. -https://api.slack.com/methods/conversations.members

              +https://docs.slack.dev/reference/methods/conversations.members

              def conversations_open(self,
              *,
              channel: str | None = None,
              return_im: bool | None = None,
              users: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -10978,7 +11060,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -10990,7 +11072,7 @@

              Methods

              return self.api_call("conversations.open", params=kwargs)

              Opens or resumes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.open

              +https://docs.slack.dev/reference/methods/conversations.open

              def conversations_rename(self, *, channel: str, name: str, **kwargs) ‑> SlackResponse @@ -11008,13 +11090,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.rename

              def conversations_replies(self,
              *,
              channel: str,
              ts: str,
              cursor: str | None = None,
              inclusive: bool | None = None,
              include_all_metadata: bool | None = None,
              latest: str | None = None,
              limit: int | None = None,
              oldest: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11038,7 +11120,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -11055,7 +11137,7 @@

              Methods

              return self.api_call("conversations.replies", http_verb="GET", params=kwargs)

              Retrieve a thread of messages posted to a conversation -https://api.slack.com/methods/conversations.replies

              +https://docs.slack.dev/reference/methods/conversations.replies

              def conversations_requestSharedInvite_approve(self,
              *,
              invite_id: str,
              channel_id: str | None = None,
              is_external_limited: str | None = None,
              message: Dict[str, Any] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11075,7 +11157,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -11089,7 +11171,7 @@

              Methods

              return self.api_call("conversations.requestSharedInvite.approve", params=kwargs)

              Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. -https://api.slack.com/methods/conversations.requestSharedInvite.approve

              +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve

              def conversations_requestSharedInvite_deny(self, *, invite_id: str, message: str | None = None, **kwargs) ‑> SlackResponse @@ -11107,13 +11189,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs)

              Deny a request to invite an external user to a channel. -https://api.slack.com/methods/conversations.requestSharedInvite.deny

              +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny

              def conversations_requestSharedInvite_list(self,
              *,
              cursor: str | None = None,
              include_approved: bool | None = None,
              include_denied: bool | None = None,
              include_expired: bool | None = None,
              invite_ids: str | Sequence[str] | None = None,
              limit: int | None = None,
              user_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11136,7 +11218,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -11156,7 +11238,7 @@

              Methods

              return self.api_call("conversations.requestSharedInvite.list", params=kwargs)

              Lists requests to add external users to channels with ability to filter. -https://api.slack.com/methods/conversations.requestSharedInvite.list

              +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list

              def conversations_setPurpose(self, *, channel: str, purpose: str, **kwargs) ‑> SlackResponse @@ -11174,13 +11256,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs)

              Sets the purpose for a conversation. -https://api.slack.com/methods/conversations.setPurpose

              +https://docs.slack.dev/reference/methods/conversations.setPurpose

              def conversations_setTopic(self, *, channel: str, topic: str, **kwargs) ‑> SlackResponse @@ -11198,13 +11280,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs)

              Sets the topic for a conversation. -https://api.slack.com/methods/conversations.setTopic

              +https://docs.slack.dev/reference/methods/conversations.setTopic

              def conversations_unarchive(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -11221,13 +11303,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.unarchive

              def dialog_open(self, *, dialog: Dict[str, Any], trigger_id: str, **kwargs) ‑> SlackResponse @@ -11245,7 +11327,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -11253,7 +11335,7 @@

              Methods

              return self.api_call("dialog.open", json=kwargs)

              Open a dialog with a user. -https://api.slack.com/methods/dialog.open

              +https://docs.slack.dev/reference/methods/dialog.open

              def dnd_endDnd(self, **kwargs) ‑> SlackResponse @@ -11268,12 +11350,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs)

              Ends the current user's Do Not Disturb session immediately. -https://api.slack.com/methods/dnd.endDnd

              +https://docs.slack.dev/reference/methods/dnd.endDnd

              def dnd_endSnooze(self, **kwargs) ‑> SlackResponse @@ -11288,12 +11370,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs)

              Ends the current user's snooze mode immediately. -https://api.slack.com/methods/dnd.endSnooze

              +https://docs.slack.dev/reference/methods/dnd.endSnooze

              def dnd_info(self, *, team_id: str | None = None, user: str | None = None, **kwargs) ‑> SlackResponse @@ -11311,13 +11393,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs)

              Retrieves a user's current Do Not Disturb status. -https://api.slack.com/methods/dnd.info

              +https://docs.slack.dev/reference/methods/dnd.info

              def dnd_setSnooze(self, *, num_minutes: str | int, **kwargs) ‑> SlackResponse @@ -11334,13 +11416,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs)

              Turns on Do Not Disturb mode for the current user, or changes its duration. -https://api.slack.com/methods/dnd.setSnooze

              +https://docs.slack.dev/reference/methods/dnd.setSnooze

              def dnd_teamInfo(self, users: str | Sequence[str], team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -11357,7 +11439,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -11367,7 +11449,7 @@

              Methods

              return self.api_call("dnd.teamInfo", http_verb="GET", params=kwargs)

              Retrieves the Do Not Disturb status for users on a team. -https://api.slack.com/methods/dnd.teamInfo

              +https://docs.slack.dev/reference/methods/dnd.teamInfo

              def emoji_list(self, include_categories: bool | None = None, **kwargs) ‑> SlackResponse @@ -11383,13 +11465,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs)

              Lists custom emoji for a team. -https://api.slack.com/methods/emoji.list

              +https://docs.slack.dev/reference/methods/emoji.list

              def files_comments_delete(self, *, file: str, id: str, **kwargs) ‑> SlackResponse @@ -11407,13 +11489,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs)

              Deletes an existing comment on a file. -https://api.slack.com/methods/files.comments.delete

              +https://docs.slack.dev/reference/methods/files.comments.delete

              def files_completeUploadExternal(self,
              *,
              files: List[Dict[str, str]],
              channel_id: str | None = None,
              channels: List[str] | None = None,
              initial_comment: str | None = None,
              thread_ts: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11434,7 +11516,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -11450,7 +11532,7 @@

              Methods

              return self.api_call("files.completeUploadExternal", params=kwargs)

              Finishes an upload started with files.getUploadURLExternal. -https://api.slack.com/methods/files.completeUploadExternal

              +https://docs.slack.dev/reference/methods/files.completeUploadExternal

              def files_delete(self, *, file: str, **kwargs) ‑> SlackResponse @@ -11467,13 +11549,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/files.delete

              def files_getUploadURLExternal(self,
              *,
              filename: str,
              length: int,
              alt_txt: str | None = None,
              snippet_type: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11493,7 +11575,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -11506,7 +11588,7 @@

              Methods

              return self.api_call("files.getUploadURLExternal", params=kwargs)

              Gets a URL for an edge external upload. -https://api.slack.com/methods/files.getUploadURLExternal

              +https://docs.slack.dev/reference/methods/files.getUploadURLExternal

              def files_info(self,
              *,
              file: str,
              count: int | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              page: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11527,7 +11609,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -11541,7 +11623,7 @@

              Methods

              return self.api_call("files.info", http_verb="GET", params=kwargs)

              Gets information about a team file. -https://api.slack.com/methods/files.info

              +https://docs.slack.dev/reference/methods/files.info

              def files_list(self,
              *,
              channel: str | None = None,
              count: int | None = None,
              page: int | None = None,
              show_files_hidden_by_limit: bool | None = None,
              team_id: str | None = None,
              ts_from: str | None = None,
              ts_to: str | None = None,
              types: str | Sequence[str] | None = None,
              user: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11566,7 +11648,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -11587,7 +11669,7 @@

              Methods

              return self.api_call("files.list", http_verb="GET", params=kwargs)

              Lists & filters team files. -https://api.slack.com/methods/files.list

              +https://docs.slack.dev/reference/methods/files.list

              def files_remote_add(self,
              *,
              external_id: str,
              external_url: str,
              title: str,
              filetype: str | None = None,
              indexable_file_contents: str | bytes | io.IOBase | None = None,
              preview_image: str | bytes | io.IOBase | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11609,7 +11691,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -11636,7 +11718,7 @@

              Methods

              )

              Adds a file from a remote service. -https://api.slack.com/methods/files.remote.add

              +https://docs.slack.dev/reference/methods/files.remote.add

              def files_remote_info(self, *, external_id: str | None = None, file: str | None = None, **kwargs) ‑> SlackResponse @@ -11654,13 +11736,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs)

              Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.info

              +https://docs.slack.dev/reference/methods/files.remote.info

              def files_remote_list(self,
              *,
              channel: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              ts_from: str | None = None,
              ts_to: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11681,7 +11763,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -11695,7 +11777,7 @@

              Methods

              return self.api_call("files.remote.list", http_verb="GET", params=kwargs)

              Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.list

              +https://docs.slack.dev/reference/methods/files.remote.list

              def files_remote_remove(self, *, external_id: str | None = None, file: str | None = None, **kwargs) ‑> SlackResponse @@ -11713,13 +11795,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/files.remote.remove

              def files_remote_share(self,
              *,
              channels: str | Sequence[str],
              external_id: str | None = None,
              file: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11738,7 +11820,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -11750,7 +11832,7 @@

              Methods

              return self.api_call("files.remote.share", http_verb="GET", params=kwargs)

              Share a remote file into a channel. -https://api.slack.com/methods/files.remote.share

              +https://docs.slack.dev/reference/methods/files.remote.share

              def files_remote_update(self,
              *,
              external_id: str | None = None,
              external_url: str | None = None,
              file: str | None = None,
              title: str | None = None,
              filetype: str | None = None,
              indexable_file_contents: str | None = None,
              preview_image: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11773,7 +11855,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -11801,7 +11883,7 @@

              Methods

              )

              Updates an existing remote file. -https://api.slack.com/methods/files.remote.update

              +https://docs.slack.dev/reference/methods/files.remote.update

              def files_revokePublicURL(self, *, file: str, **kwargs) ‑> SlackResponse @@ -11818,13 +11900,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs)

              Revokes public/external sharing access for a file -https://api.slack.com/methods/files.revokePublicURL

              +https://docs.slack.dev/reference/methods/files.revokePublicURL

              def files_sharedPublicURL(self, *, file: str, **kwargs) ‑> SlackResponse @@ -11841,13 +11923,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs)

              Enables a file for public/external sharing. -https://api.slack.com/methods/files.sharedPublicURL

              +https://docs.slack.dev/reference/methods/files.sharedPublicURL

              def files_upload(self,
              *,
              file: str | bytes | io.IOBase | None = None,
              content: str | bytes | None = None,
              filename: str | None = None,
              filetype: str | None = None,
              initial_comment: str | None = None,
              thread_ts: str | None = None,
              title: str | None = None,
              channels: str | Sequence[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -11871,7 +11953,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -11904,7 +11986,7 @@

              Methods

              return self.api_call("files.upload", data=kwargs)

              Uploads or creates a file. -https://api.slack.com/methods/files.upload

              +https://docs.slack.dev/reference/methods/files.upload

              def files_upload_v2(self,
              *,
              filename: str | None = None,
              file: str | bytes | io.IOBase | os.PathLike | None = None,
              content: str | bytes | None = None,
              title: str | None = None,
              alt_txt: str | None = None,
              snippet_type: str | None = None,
              file_uploads: List[Dict[str, Any]] | None = None,
              channel: str | None = None,
              channels: List[str] | None = None,
              initial_comment: str | None = None,
              thread_ts: str | None = None,
              request_file_info: bool = True,
              **kwargs) ‑> SlackResponse
              @@ -11935,12 +12017,12 @@

              Methods

              ) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -12019,14 +12101,14 @@

              Methods

              This wrapper method provides an easy way to upload files using the following endpoints:

              @@ -12046,13 +12128,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs)

              Signal the failure to execute a function -https://api.slack.com/methods/functions.completeError

              +https://docs.slack.dev/reference/methods/functions.completeError

              def functions_completeSuccess(self, *, function_execution_id: str, outputs: Dict[str, Any], **kwargs) ‑> SlackResponse @@ -12070,13 +12152,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs)

              Signal the successful completion of a function -https://api.slack.com/methods/functions.completeSuccess

              +https://docs.slack.dev/reference/methods/functions.completeSuccess

              def groups_archive(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -12552,7 +12634,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -12562,7 +12644,7 @@

              Methods

              return self.api_call("migration.exchange", http_verb="GET", params=kwargs)

              For Enterprise Grid workspaces, map local user IDs to global user IDs -https://api.slack.com/methods/migration.exchange

              +https://docs.slack.dev/reference/methods/migration.exchange

              def mpim_close(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -12709,7 +12791,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12721,7 +12803,7 @@

              Methods

              )

              Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.access

              +https://docs.slack.dev/reference/methods/oauth.access

              def oauth_v2_access(self,
              *,
              client_id: str,
              client_secret: str,
              code: str | None = None,
              redirect_uri: str | None = None,
              grant_type: str | None = None,
              refresh_token: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12747,7 +12829,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12764,7 +12846,7 @@

              Methods

              )

              Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.v2.access

              +https://docs.slack.dev/reference/methods/oauth.v2.access

              def oauth_v2_exchange(self, *, token: str, client_id: str, client_secret: str, **kwargs) ‑> SlackResponse @@ -12783,13 +12865,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs)

              Exchanges a legacy access token for a new expiring access token and refresh token -https://api.slack.com/methods/oauth.v2.exchange

              +https://docs.slack.dev/reference/methods/oauth.v2.exchange

              def openid_connect_token(self,
              client_id: str,
              client_secret: str,
              code: str | None = None,
              redirect_uri: str | None = None,
              grant_type: str | None = None,
              refresh_token: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12810,7 +12892,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12827,7 +12909,7 @@

              Methods

              )

              Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. -https://api.slack.com/methods/openid.connect.token

              +https://docs.slack.dev/reference/methods/openid.connect.token

              def openid_connect_userInfo(self, **kwargs) ‑> SlackResponse @@ -12842,12 +12924,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs)

              Get the identity of a user who has authorized Sign in with Slack. -https://api.slack.com/methods/openid.connect.userInfo

              +https://docs.slack.dev/reference/methods/openid.connect.userInfo

              def pins_add(self, *, channel: str, timestamp: str | None = None, **kwargs) ‑> SlackResponse @@ -12865,13 +12947,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs)

              Pins an item to a channel. -https://api.slack.com/methods/pins.add

              +https://docs.slack.dev/reference/methods/pins.add

              def pins_list(self, *, channel: str, **kwargs) ‑> SlackResponse @@ -12888,13 +12970,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs)

              Lists items pinned to a channel. -https://api.slack.com/methods/pins.list

              +https://docs.slack.dev/reference/methods/pins.list

              def pins_remove(self, *, channel: str, timestamp: str | None = None, **kwargs) ‑> SlackResponse @@ -12912,13 +12994,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs)

              Un-pins an item from a channel. -https://api.slack.com/methods/pins.remove

              +https://docs.slack.dev/reference/methods/pins.remove

              def reactions_add(self, *, channel: str, name: str, timestamp: str, **kwargs) ‑> SlackResponse @@ -12937,13 +13019,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs)

              Adds a reaction to an item. -https://api.slack.com/methods/reactions.add

              +https://docs.slack.dev/reference/methods/reactions.add

              def reactions_get(self,
              *,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              full: bool | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -12964,7 +13046,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -12978,7 +13060,7 @@

              Methods

              return self.api_call("reactions.get", http_verb="GET", params=kwargs)

              Gets reactions for an item. -https://api.slack.com/methods/reactions.get

              +https://docs.slack.dev/reference/methods/reactions.get

              def reactions_list(self,
              *,
              count: int | None = None,
              cursor: str | None = None,
              full: bool | None = None,
              limit: int | None = None,
              page: int | None = None,
              team_id: str | None = None,
              user: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13001,7 +13083,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -13017,7 +13099,7 @@

              Methods

              return self.api_call("reactions.list", http_verb="GET", params=kwargs)

              Lists reactions made by a user. -https://api.slack.com/methods/reactions.list

              +https://docs.slack.dev/reference/methods/reactions.list

              def reactions_remove(self,
              *,
              name: str,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13038,7 +13120,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -13052,7 +13134,7 @@

              Methods

              return self.api_call("reactions.remove", params=kwargs)

              Removes a reaction from an item. -https://api.slack.com/methods/reactions.remove

              +https://docs.slack.dev/reference/methods/reactions.remove

              def reminders_add(self,
              *,
              text: str,
              time: str,
              team_id: str | None = None,
              user: str | None = None,
              recurrence: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13073,7 +13155,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -13087,7 +13169,7 @@

              Methods

              return self.api_call("reminders.add", params=kwargs)
              +https://docs.slack.dev/reference/methods/reminders.add

              def reminders_complete(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -13105,13 +13187,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs)
              +https://docs.slack.dev/reference/methods/reminders.complete

              def reminders_delete(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -13129,13 +13211,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/reminders.delete

              def reminders_info(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -13153,13 +13235,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs)

              Gets information about a reminder. -https://api.slack.com/methods/reminders.info

              +https://docs.slack.dev/reference/methods/reminders.info

              def reminders_list(self, *, team_id: str | None = None, **kwargs) ‑> SlackResponse @@ -13176,13 +13258,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs)

              Lists all reminders created by or for a given user. -https://api.slack.com/methods/reminders.list

              +https://docs.slack.dev/reference/methods/reminders.list

              def rtm_connect(self,
              *,
              batch_presence_aware: bool | None = None,
              presence_sub: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13200,13 +13282,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs)

              Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.connect

              +https://docs.slack.dev/reference/methods/rtm.connect

              def rtm_start(self,
              *,
              batch_presence_aware: bool | None = None,
              include_locale: bool | None = None,
              mpim_aware: bool | None = None,
              no_latest: bool | None = None,
              no_unreads: bool | None = None,
              presence_sub: bool | None = None,
              simple_latest: bool | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13229,7 +13311,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -13245,7 +13327,7 @@

              Methods

              return self.api_call("rtm.start", http_verb="GET", params=kwargs)

              Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.start

              +https://docs.slack.dev/reference/methods/rtm.start

              def search_all(self,
              *,
              query: str,
              count: int | None = None,
              highlight: bool | None = None,
              page: int | None = None,
              sort: str | None = None,
              sort_dir: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13268,7 +13350,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -13284,7 +13366,7 @@

              Methods

              return self.api_call("search.all", http_verb="GET", params=kwargs)

              Searches for messages and files matching a query. -https://api.slack.com/methods/search.all

              +https://docs.slack.dev/reference/methods/search.all

              def search_files(self,
              *,
              query: str,
              count: int | None = None,
              highlight: bool | None = None,
              page: int | None = None,
              sort: str | None = None,
              sort_dir: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13307,7 +13389,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -13323,7 +13405,7 @@

              Methods

              return self.api_call("search.files", http_verb="GET", params=kwargs)

              Searches for files matching a query. -https://api.slack.com/methods/search.files

              +https://docs.slack.dev/reference/methods/search.files

              def search_messages(self,
              *,
              query: str,
              count: int | None = None,
              cursor: str | None = None,
              highlight: bool | None = None,
              page: int | None = None,
              sort: str | None = None,
              sort_dir: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13347,7 +13429,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -13364,7 +13446,7 @@

              Methods

              return self.api_call("search.messages", http_verb="GET", params=kwargs)

              Searches for messages matching a query. -https://api.slack.com/methods/search.messages

              +https://docs.slack.dev/reference/methods/search.messages

              def stars_add(self,
              *,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13384,7 +13466,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -13397,7 +13479,7 @@

              Methods

              return self.api_call("stars.add", params=kwargs)
              +https://docs.slack.dev/reference/methods/stars.add

              def stars_list(self,
              *,
              count: int | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              page: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13418,7 +13500,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -13432,7 +13514,7 @@

              Methods

              return self.api_call("stars.list", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/stars.list

              def stars_remove(self,
              *,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13452,7 +13534,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -13465,7 +13547,7 @@

              Methods

              return self.api_call("stars.remove", params=kwargs)

              Removes a star from an item. -https://api.slack.com/methods/stars.remove

              +https://docs.slack.dev/reference/methods/stars.remove

              def team_accessLogs(self,
              *,
              before: str | int | None = None,
              count: str | int | None = None,
              page: str | int | None = None,
              team_id: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13487,7 +13569,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -13502,7 +13584,7 @@

              Methods

              return self.api_call("team.accessLogs", http_verb="GET", params=kwargs)

              Gets the access logs for the current team. -https://api.slack.com/methods/team.accessLogs

              +https://docs.slack.dev/reference/methods/team.accessLogs

              def team_billableInfo(self, *, team_id: str | None = None, user: str | None = None, **kwargs) ‑> SlackResponse @@ -13520,13 +13602,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs)

              Gets billable users information for the current team. -https://api.slack.com/methods/team.billableInfo

              +https://docs.slack.dev/reference/methods/team.billableInfo

              def team_billing_info(self, **kwargs) ‑> SlackResponse @@ -13541,12 +13623,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs)

              Reads a workspace's billing plan information. -https://api.slack.com/methods/team.billing.info

              +https://docs.slack.dev/reference/methods/team.billing.info

              def team_externalTeams_disconnect(self, *, target_team: str, **kwargs) ‑> SlackResponse @@ -13563,7 +13645,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -13573,7 +13655,7 @@

              Methods

              return self.api_call("team.externalTeams.disconnect", params=kwargs)
              +https://docs.slack.dev/reference/methods/team.externalTeams.disconnect

              def team_externalTeams_list(self,
              *,
              connection_status_filter: str | None = None,
              slack_connect_pref_filter: Sequence[str] | None = None,
              sort_direction: str | None = None,
              sort_field: str | None = None,
              workspace_filter: Sequence[str] | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13596,7 +13678,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -13620,7 +13702,7 @@

              Methods

              return self.api_call("team.externalTeams.list", http_verb="GET", params=kwargs)

              Returns a list of all the external teams connected and details about the connection. -https://api.slack.com/methods/team.externalTeams.list

              +https://docs.slack.dev/reference/methods/team.externalTeams.list

              def team_info(self, *, team: str | None = None, domain: str | None = None, **kwargs) ‑> SlackResponse @@ -13638,13 +13720,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs)

              Gets information about the current team. -https://api.slack.com/methods/team.info

              +https://docs.slack.dev/reference/methods/team.info

              def team_integrationLogs(self,
              *,
              app_id: str | None = None,
              change_type: str | None = None,
              count: str | int | None = None,
              page: str | int | None = None,
              service_id: str | None = None,
              team_id: str | None = None,
              user: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13667,7 +13749,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -13683,7 +13765,7 @@

              Methods

              return self.api_call("team.integrationLogs", http_verb="GET", params=kwargs)

              Gets the integration logs for the current team. -https://api.slack.com/methods/team.integrationLogs

              +https://docs.slack.dev/reference/methods/team.integrationLogs

              def team_preferences_list(self, **kwargs) ‑> SlackResponse @@ -13698,12 +13780,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs)

              Retrieve a list of a workspace's team preferences. -https://api.slack.com/methods/team.preferences.list

              +https://docs.slack.dev/reference/methods/team.preferences.list

              def team_profile_get(self, *, visibility: str | None = None, **kwargs) ‑> SlackResponse @@ -13720,13 +13802,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/team.profile.get

              def tooling_tokens_rotate(self, *, refresh_token: str, **kwargs) ‑> SlackResponse @@ -13743,13 +13825,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs)

              Exchanges a refresh token for a new app configuration token -https://api.slack.com/methods/tooling.tokens.rotate

              +https://docs.slack.dev/reference/methods/tooling.tokens.rotate

              def usergroups_create(self,
              *,
              name: str,
              channels: str | Sequence[str] | None = None,
              description: str | None = None,
              handle: str | None = None,
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13771,7 +13853,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -13789,7 +13871,7 @@

              Methods

              return self.api_call("usergroups.create", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.create

              def usergroups_disable(self,
              *,
              usergroup: str,
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13808,13 +13890,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs)

              Disable an existing User Group -https://api.slack.com/methods/usergroups.disable

              +https://docs.slack.dev/reference/methods/usergroups.disable

              def usergroups_enable(self,
              *,
              usergroup: str,
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13833,13 +13915,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.enable

              def usergroups_list(self,
              *,
              include_count: bool | None = None,
              include_disabled: bool | None = None,
              include_users: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13859,7 +13941,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -13872,7 +13954,7 @@

              Methods

              return self.api_call("usergroups.list", http_verb="GET", params=kwargs)

              List all User Groups for a team -https://api.slack.com/methods/usergroups.list

              +https://docs.slack.dev/reference/methods/usergroups.list

              def usergroups_update(self,
              *,
              usergroup: str,
              channels: str | Sequence[str] | None = None,
              description: str | None = None,
              handle: str | None = None,
              include_count: bool | None = None,
              name: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13895,7 +13977,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -13914,7 +13996,7 @@

              Methods

              return self.api_call("usergroups.update", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.update

              def usergroups_users_list(self,
              *,
              usergroup: str,
              include_disabled: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13933,7 +14015,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -13945,7 +14027,7 @@

              Methods

              return self.api_call("usergroups.users.list", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.users.list

              def usergroups_users_update(self,
              *,
              usergroup: str,
              users: str | Sequence[str],
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -13965,7 +14047,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -13981,7 +14063,7 @@

              Methods

              return self.api_call("usergroups.users.update", params=kwargs)

              Update the list of users for a User Group -https://api.slack.com/methods/usergroups.users.update

              +https://docs.slack.dev/reference/methods/usergroups.users.update

              def users_conversations(self,
              *,
              cursor: str | None = None,
              exclude_archived: bool | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              types: str | Sequence[str] | None = None,
              user: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -14003,7 +14085,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -14021,7 +14103,7 @@

              Methods

              return self.api_call("users.conversations", http_verb="GET", params=kwargs)

              List conversations the calling user may access. -https://api.slack.com/methods/users.conversations

              +https://docs.slack.dev/reference/methods/users.conversations

              def users_deletePhoto(self, **kwargs) ‑> SlackResponse @@ -14036,12 +14118,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/users.deletePhoto

              def users_discoverableContacts_lookup(self, email: str, **kwargs) ‑> SlackResponse @@ -14057,13 +14139,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs)

              Lookup an email address to see if someone is on Slack -https://api.slack.com/methods/users.discoverableContacts.lookup

              +https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup

              def users_getPresence(self, *, user: str, **kwargs) ‑> SlackResponse @@ -14080,13 +14162,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs)

              Gets user presence information. -https://api.slack.com/methods/users.getPresence

              +https://docs.slack.dev/reference/methods/users.getPresence

              def users_identity(self, **kwargs) ‑> SlackResponse @@ -14101,12 +14183,12 @@

              Methods

              **kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/users.identity

              def users_info(self, *, user: str, include_locale: bool | None = None, **kwargs) ‑> SlackResponse @@ -14124,13 +14206,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs)

              Gets information about a user. -https://api.slack.com/methods/users.info

              +https://docs.slack.dev/reference/methods/users.info

              def users_list(self,
              *,
              cursor: str | None = None,
              include_locale: bool | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -14150,7 +14232,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -14163,7 +14245,7 @@

              Methods

              return self.api_call("users.list", http_verb="GET", params=kwargs)

              Lists all users in a Slack team. -https://api.slack.com/methods/users.list

              +https://docs.slack.dev/reference/methods/users.list

              def users_lookupByEmail(self, *, email: str, **kwargs) ‑> SlackResponse @@ -14180,13 +14262,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs)

              Find a user with an email address. -https://api.slack.com/methods/users.lookupByEmail

              +https://docs.slack.dev/reference/methods/users.lookupByEmail

              def users_profile_get(self, *, user: str | None = None, include_labels: bool | None = None, **kwargs) ‑> SlackResponse @@ -14204,13 +14286,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs)

              Retrieves a user's profile information. -https://api.slack.com/methods/users.profile.get

              +https://docs.slack.dev/reference/methods/users.profile.get

              def users_profile_set(self,
              *,
              name: str | None = None,
              value: str | None = None,
              user: str | None = None,
              profile: Dict | None = None,
              **kwargs) ‑> SlackResponse
              @@ -14230,7 +14312,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -14245,7 +14327,7 @@

              Methods

              return self.api_call("users.profile.set", json=kwargs)

              Set the profile information for a user. -https://api.slack.com/methods/users.profile.set

              +https://docs.slack.dev/reference/methods/users.profile.set

              def users_setPhoto(self,
              *,
              image: str | io.IOBase,
              crop_w: str | int | None = None,
              crop_x: str | int | None = None,
              crop_y: str | int | None = None,
              **kwargs) ‑> SlackResponse
              @@ -14265,13 +14347,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs)
              +https://docs.slack.dev/reference/methods/users.setPhoto

              def users_setPresence(self, *, presence: str, **kwargs) ‑> SlackResponse @@ -14288,13 +14370,13 @@

              Methods

              **kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs)
              +https://docs.slack.dev/reference/methods/users.setPresence

              def views_open(self,
              *,
              trigger_id: str | None = None,
              interactivity_pointer: str | None = None,
              view: dict | View,
              **kwargs) ‑> SlackResponse
              @@ -14313,8 +14395,8 @@

              Methods

              **kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -14326,8 +14408,8 @@

              Methods

              return self.api_call("views.open", json=kwargs)
              +https://docs.slack.dev/reference/methods/views.open +See https://docs.slack.dev/surfaces/modals/ for details.

              def views_publish(self,
              *,
              user_id: str,
              view: dict | View,
              hash: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -14347,8 +14429,8 @@

              Methods

              ) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -14361,8 +14443,8 @@

              Methods

              Publish a static view for a User. Create or update the view that comprises an -app's Home tab (https://api.slack.com/surfaces/tabs) -https://api.slack.com/methods/views.publish

              +app's Home tab (https://docs.slack.dev/surfaces/app-home/) +https://docs.slack.dev/reference/methods/views.publish

              def views_push(self,
              *,
              trigger_id: str | None = None,
              interactivity_pointer: str | None = None,
              view: dict | View,
              **kwargs) ‑> SlackResponse
              @@ -14384,9 +14466,9 @@

              Methods

              Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -14401,9 +14483,9 @@

              Methods

              Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. -Read the modals documentation (https://api.slack.com/surfaces/modals) +Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. -https://api.slack.com/methods/views.push

              +https://docs.slack.dev/reference/methods/views.push

              def views_update(self,
              *,
              view: dict | View,
              external_id: str | None = None,
              view_id: str | None = None,
              hash: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -14425,9 +14507,9 @@

              Methods

              """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -14447,9 +14529,119 @@

              Methods

              Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. -See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) +See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. -https://api.slack.com/methods/views.update

              +https://docs.slack.dev/reference/methods/views.update

              + +
              +
              +
              + +Expand source code + +
              def workflows_featured_add(
              +    self,
              +    *,
              +    channel_id: str,
              +    trigger_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> SlackResponse:
              +    """Add featured workflows to a channel.
              +    https://docs.slack.dev/reference/methods/workflows.featured.add
              +    """
              +    kwargs.update({"channel_id": channel_id})
              +    if isinstance(trigger_ids, (list, tuple)):
              +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
              +    else:
              +        kwargs.update({"trigger_ids": trigger_ids})
              +    return self.api_call("workflows.featured.add", params=kwargs)
              +
              + +
              + +
              +
              + +Expand source code + +
              def workflows_featured_list(
              +    self,
              +    *,
              +    channel_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> SlackResponse:
              +    """List the featured workflows for specified channels.
              +    https://docs.slack.dev/reference/methods/workflows.featured.list
              +    """
              +    if isinstance(channel_ids, (list, tuple)):
              +        kwargs.update({"channel_ids": ",".join(channel_ids)})
              +    else:
              +        kwargs.update({"channel_ids": channel_ids})
              +    return self.api_call("workflows.featured.list", params=kwargs)
              +
              +

              List the featured workflows for specified channels. +https://docs.slack.dev/reference/methods/workflows.featured.list

              +
              + +
              +
              + +Expand source code + +
              def workflows_featured_remove(
              +    self,
              +    *,
              +    channel_id: str,
              +    trigger_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> SlackResponse:
              +    """Remove featured workflows from a channel.
              +    https://docs.slack.dev/reference/methods/workflows.featured.remove
              +    """
              +    kwargs.update({"channel_id": channel_id})
              +    if isinstance(trigger_ids, (list, tuple)):
              +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
              +    else:
              +        kwargs.update({"trigger_ids": trigger_ids})
              +    return self.api_call("workflows.featured.remove", params=kwargs)
              +
              + +
              + +
              +
              + +Expand source code + +
              def workflows_featured_set(
              +    self,
              +    *,
              +    channel_id: str,
              +    trigger_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> SlackResponse:
              +    """Set featured workflows for a channel.
              +    https://docs.slack.dev/reference/methods/workflows.featured.set
              +    """
              +    kwargs.update({"channel_id": channel_id})
              +    if isinstance(trigger_ids, (list, tuple)):
              +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
              +    else:
              +        kwargs.update({"trigger_ids": trigger_ids})
              +    return self.api_call("workflows.featured.set", params=kwargs)
              +
              +
              def workflows_stepCompleted(self, *, workflow_step_execute_id: str, outputs: dict | None = None, **kwargs) ‑> SlackResponse @@ -14467,7 +14659,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -14477,7 +14669,7 @@

              Methods

              return self.api_call("workflows.stepCompleted", json=kwargs)

              Indicate a successful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepCompleted

              +https://docs.slack.dev/reference/methods/workflows.stepCompleted

              def workflows_stepFailed(self, *, workflow_step_execute_id: str, error: Dict[str, str], **kwargs) ‑> SlackResponse @@ -14495,7 +14687,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -14508,7 +14700,7 @@

              Methods

              return self.api_call("workflows.stepFailed", json=kwargs)

              Indicate an unsuccessful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepFailed

              +https://docs.slack.dev/reference/methods/workflows.stepFailed

              def workflows_updateStep(self,
              *,
              workflow_step_edit_id: str,
              inputs: Dict[str, Any] | None = None,
              outputs: List[Dict[str, str]] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -14527,7 +14719,7 @@

              Methods

              **kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -14539,7 +14731,7 @@

              Methods

              return self.api_call("workflows.updateStep", json=kwargs)

              Update the configuration for a workflow extension step. -https://api.slack.com/methods/workflows.updateStep

              +https://docs.slack.dev/reference/methods/workflows.updateStep

              Inherited members

              @@ -14897,6 +15089,10 @@

              Web
            • views_publish
            • views_push
            • views_update
            • +
            • workflows_featured_add
            • +
            • workflows_featured_list
            • +
            • workflows_featured_remove
            • +
            • workflows_featured_set
            • workflows_stepCompleted
            • workflows_stepFailed
            • workflows_updateStep
            • diff --git a/docs/reference/web/internal_utils.html b/docs/reference/web/internal_utils.html index 9d8084d61..89227edce 100644 --- a/docs/reference/web/internal_utils.html +++ b/docs/reference/web/internal_utils.html @@ -95,7 +95,7 @@

              Returns

              Returns: The user agent string. - e.g. 'Python/3.6.7 slackclient/2.0.0 Darwin/17.7.0' + e.g. 'Python/3.7.17 slackclient/2.0.0 Darwin/17.7.0' """ # __name__ returns all classes, we only want the client client = "{0}/{1}".format("slackclient", version.__version__) @@ -110,7 +110,7 @@

              Returns

              Python version and OS version.

              Returns

              The user agent string. -e.g. 'Python/3.6.7 slackclient/2.0.0 Darwin/17.7.0'

              +e.g. 'Python/3.7.17 slackclient/2.0.0 Darwin/17.7.0'

              diff --git a/docs/reference/web/legacy_base_client.html b/docs/reference/web/legacy_base_client.html index a14a4ec62..2abe94377 100644 --- a/docs/reference/web/legacy_base_client.html +++ b/docs/reference/web/legacy_base_client.html @@ -580,7 +580,7 @@

              Classes

              On each HTTP request that Slack sends, we add an X-Slack-Signature HTTP header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview Args: signing_secret: Your application's signing secret, available in the Slack API dashboard @@ -633,7 +633,7 @@

              Static methods

              On each HTTP request that Slack sends, we add an X-Slack-Signature HTTP header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview Args: signing_secret: Your application's signing secret, available in the Slack API dashboard @@ -661,7 +661,7 @@

              Static methods

              On each HTTP request that Slack sends, we add an X-Slack-Signature HTTP header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. -https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview

              +https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview

              Args

              signing_secret
              diff --git a/docs/reference/web/legacy_client.html b/docs/reference/web/legacy_client.html index 63cbfc7f9..0ac5ac6b9 100644 --- a/docs/reference/web/legacy_client.html +++ b/docs/reference/web/legacy_client.html @@ -58,7 +58,7 @@

              Classes

              class LegacyWebClient(LegacyBaseClient):
                   """A WebClient allows apps to communicate with the Slack Platform's Web API.
               
              -    https://api.slack.com/methods
              +    https://docs.slack.dev/reference/methods
               
                   The Slack Web API is an interface for querying information from
                   and enacting change in a Slack workspace.
              @@ -129,7 +129,7 @@ 

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -151,7 +151,7 @@

              Classes

              Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -178,7 +178,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -199,7 +199,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -219,7 +219,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -239,7 +239,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -263,7 +263,7 @@

              Classes

              Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -290,7 +290,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -312,7 +312,7 @@

              Classes

              ) -> Union[Future, SlackResponse]: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -343,7 +343,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -371,7 +371,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -388,7 +388,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -410,7 +410,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -430,7 +430,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -449,7 +449,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -468,7 +468,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -484,7 +484,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -503,7 +503,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -522,7 +522,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -542,7 +542,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -557,7 +557,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -578,7 +578,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -598,7 +598,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -618,7 +618,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs) @@ -631,7 +631,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -648,7 +648,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs) @@ -660,7 +660,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs) @@ -673,7 +673,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs) @@ -691,7 +691,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -722,7 +722,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -734,7 +734,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -747,7 +747,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -763,7 +763,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -776,7 +776,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -796,7 +796,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -824,7 +824,7 @@

              Classes

              """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -851,7 +851,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -874,7 +874,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -897,7 +897,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -922,7 +922,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -946,7 +946,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -964,7 +964,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -976,7 +976,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -989,7 +989,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -1001,7 +1001,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -1026,7 +1026,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -1044,7 +1044,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1057,7 +1057,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1070,7 +1070,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1082,7 +1082,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1095,7 +1095,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1110,7 +1110,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1133,7 +1133,7 @@

              Classes

              ) -> Union[Future, SlackResponse]: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1151,7 +1151,7 @@

              Classes

              ) -> Union[Future, SlackResponse]: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1175,7 +1175,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1200,7 +1200,7 @@

              Classes

              ) -> Union[Future, SlackResponse]: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1222,7 +1222,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1244,7 +1244,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1264,7 +1264,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1286,7 +1286,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1301,7 +1301,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1321,7 +1321,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1338,7 +1338,7 @@

              Classes

              ) -> Union[Future, SlackResponse]: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1356,7 +1356,7 @@

              Classes

              ) -> Union[Future, SlackResponse]: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1378,7 +1378,7 @@

              Classes

              ) -> Union[Future, SlackResponse]: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1395,7 +1395,7 @@

              Classes

              ) -> Union[Future, SlackResponse]: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1413,7 +1413,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1427,7 +1427,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1447,7 +1447,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1466,7 +1466,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1487,7 +1487,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1508,7 +1508,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1528,7 +1528,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs) @@ -1542,7 +1542,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1554,7 +1554,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs) @@ -1567,7 +1567,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1580,7 +1580,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1593,7 +1593,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1606,7 +1606,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1620,7 +1620,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1638,7 +1638,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1656,7 +1656,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1675,7 +1675,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1695,7 +1695,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1727,7 +1727,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1751,7 +1751,7 @@

              Classes

              def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -1759,7 +1759,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1780,7 +1780,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs) @@ -1793,7 +1793,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs) @@ -1807,7 +1807,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs) @@ -1820,7 +1820,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs) @@ -1833,7 +1833,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs) @@ -1854,7 +1854,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1884,7 +1884,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1905,7 +1905,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1925,7 +1925,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1944,7 +1944,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1959,7 +1959,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs) @@ -1972,7 +1972,7 @@

              Classes

              ) -> Union[Future, SlackResponse]: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -1987,7 +1987,7 @@

              Classes

              ) -> Union[Future, SlackResponse]: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs) @@ -2000,7 +2000,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) @@ -2012,7 +2012,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2027,7 +2027,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs) @@ -2039,7 +2039,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs) @@ -2052,7 +2052,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2069,7 +2069,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2085,7 +2085,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2099,7 +2099,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return self.api_call("assistant.threads.setStatus", params=kwargs) @@ -2113,7 +2113,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2128,7 +2128,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2142,7 +2142,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2152,7 +2152,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs) @@ -2164,7 +2164,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs) @@ -2182,7 +2182,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2208,7 +2208,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2228,7 +2228,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2241,7 +2241,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2254,7 +2254,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2273,7 +2273,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2300,7 +2300,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2312,7 +2312,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2325,7 +2325,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2339,7 +2339,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2355,7 +2355,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2375,7 +2375,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs) @@ -2388,7 +2388,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs) @@ -2400,7 +2400,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs) @@ -2415,7 +2415,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2440,7 +2440,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2463,7 +2463,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs) @@ -2471,7 +2471,7 @@

              Classes

              # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def channels_archive( @@ -2650,7 +2650,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs) @@ -2664,7 +2664,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2683,7 +2683,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2696,7 +2696,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs) @@ -2716,10 +2716,11 @@

              Classes

              link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2735,11 +2736,12 @@

              Classes

              "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2763,10 +2765,11 @@

              Classes

              username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2787,11 +2790,12 @@

              Classes

              "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2800,7 +2804,7 @@

              Classes

              *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2811,10 +2815,11 @@

              Classes

              unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2831,11 +2836,12 @@

              Classes

              "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) @@ -2854,7 +2860,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2888,10 +2894,11 @@

              Classes

              parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2905,6 +2912,7 @@

              Classes

              "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2913,7 +2921,7 @@

              Classes

              kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) @@ -2929,7 +2937,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -2955,7 +2963,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -2979,7 +2987,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -2991,7 +2999,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs) @@ -3003,7 +3011,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs) @@ -3017,7 +3025,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs) @@ -3030,7 +3038,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -3039,7 +3047,7 @@

              Classes

              self, *, action: str, channel: str, target_team: str, **kwargs ) -> Union[Future, SlackResponse]: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3063,7 +3071,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3087,7 +3095,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3107,7 +3115,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3130,7 +3138,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3152,7 +3160,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs) @@ -3165,7 +3173,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs) @@ -3177,7 +3185,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs) @@ -3193,7 +3201,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3219,7 +3227,7 @@

              Classes

              ) -> Union[Future, SlackResponse]: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3232,7 +3240,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs) @@ -3246,7 +3254,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3260,7 +3268,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3279,7 +3287,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs) @@ -3298,7 +3306,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3324,7 +3332,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3345,7 +3353,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3363,7 +3371,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3390,7 +3398,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs) @@ -3403,7 +3411,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs) @@ -3415,7 +3423,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs) @@ -3428,7 +3436,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs) @@ -3441,7 +3449,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3453,7 +3461,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs) @@ -3462,7 +3470,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs) @@ -3474,7 +3482,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3486,7 +3494,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3498,7 +3506,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3513,7 +3521,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) @@ -3526,7 +3534,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs) @@ -3538,7 +3546,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs) @@ -3554,7 +3562,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3582,7 +3590,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3610,7 +3618,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3626,7 +3634,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3651,7 +3659,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3690,7 +3698,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3725,7 +3733,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3739,7 +3747,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3757,7 +3765,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs) @@ -3769,7 +3777,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs) @@ -3788,7 +3796,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3841,12 +3849,12 @@

              Classes

              ) -> Union[Future, SlackResponse]: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3932,7 +3940,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -3955,7 +3963,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -3978,7 +3986,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs) @@ -3991,7 +3999,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs) @@ -3999,7 +4007,7 @@

              Classes

              # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def groups_archive( @@ -4180,7 +4188,7 @@

              Classes

              # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def im_close( @@ -4256,7 +4264,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4268,7 +4276,7 @@

              Classes

              # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def mpim_close( @@ -4355,7 +4363,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4381,7 +4389,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4401,7 +4409,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs) @@ -4417,7 +4425,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4438,7 +4446,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs) @@ -4450,7 +4458,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs) @@ -4462,7 +4470,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4475,7 +4483,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs) @@ -4489,7 +4497,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs) @@ -4505,7 +4513,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4531,7 +4539,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4557,7 +4565,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4581,7 +4589,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4602,7 +4610,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs) @@ -4615,7 +4623,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs) @@ -4628,7 +4636,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4640,7 +4648,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4653,7 +4661,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4671,7 +4679,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4699,7 +4707,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4727,7 +4735,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4756,7 +4764,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4782,7 +4790,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -4805,7 +4813,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -4828,7 +4836,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -4852,7 +4860,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -4874,7 +4882,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) @@ -4884,7 +4892,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs) @@ -4895,7 +4903,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -4917,7 +4925,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4948,7 +4956,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs) @@ -4966,7 +4974,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -4988,7 +4996,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -4998,7 +5006,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs) @@ -5014,7 +5022,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -5040,7 +5048,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs) @@ -5054,7 +5062,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs) @@ -5069,7 +5077,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5094,7 +5102,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5121,7 +5129,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5142,7 +5150,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5169,7 +5177,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5191,7 +5199,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5202,7 +5210,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5212,7 +5220,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5224,7 +5232,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5239,7 +5247,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5258,7 +5266,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5273,7 +5281,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5285,7 +5293,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs) @@ -5296,7 +5304,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5309,7 +5317,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5324,7 +5332,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5347,8 +5355,8 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5371,9 +5379,9 @@

              Classes

              Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5396,9 +5404,9 @@

              Classes

              """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5425,8 +5433,8 @@

              Classes

              ) -> Union[Future, SlackResponse]: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5437,6 +5445,72 @@

              Classes

              # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -5445,7 +5519,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5462,7 +5536,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5483,7 +5557,7 @@

              Classes

              **kwargs, ) -> Union[Future, SlackResponse]: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -5495,7 +5569,7 @@

              Classes

              return self.api_call("workflows.updateStep", json=kwargs)

              A WebClient allows apps to communicate with the Slack Platform's Web API.

              -

              https://api.slack.com/methods

              +

              https://docs.slack.dev/reference/methods

              The Slack Web API is an interface for querying information from and enacting change in a Slack workspace.

              This client handles constructing and sending HTTP requests to Slack @@ -5575,7 +5649,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -5585,7 +5659,7 @@

              Methods

              return self.api_call("admin.analytics.getFile", params=kwargs)

              Retrieve analytics data for a given date, presented as a compressed JSON file -https://api.slack.com/methods/admin.analytics.getFile

              +https://docs.slack.dev/reference/methods/admin.analytics.getFile

              def admin_apps_activities_list(self,
              *,
              app_id: str | None = None,
              component_id: str | None = None,
              component_type: str | None = None,
              log_event_type: str | None = None,
              max_date_created: int | None = None,
              min_date_created: int | None = None,
              min_log_level: str | None = None,
              sort_direction: str | None = None,
              source: str | None = None,
              team_id: str | None = None,
              trace_id: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -5614,7 +5688,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -5636,7 +5710,7 @@

              Methods

              return self.api_call("admin.apps.activities.list", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.apps.activities.list

              def admin_apps_approve(self,
              *,
              app_id: str | None = None,
              request_id: str | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -5659,7 +5733,7 @@

              Methods

              Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -5680,7 +5754,7 @@

              Methods

              Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.approve

              +https://docs.slack.dev/reference/methods/admin.apps.approve

              def admin_apps_approved_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -5700,7 +5774,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -5713,7 +5787,7 @@

              Methods

              return self.api_call("admin.apps.approved.list", http_verb="GET", params=kwargs)

              List approved apps for an org or workspace. -https://api.slack.com/methods/admin.apps.approved.list

              +https://docs.slack.dev/reference/methods/admin.apps.approved.list

              def admin_apps_clearResolution(self,
              *,
              app_id: str,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -5732,7 +5806,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -5744,7 +5818,7 @@

              Methods

              return self.api_call("admin.apps.clearResolution", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.apps.clearResolution

              def admin_apps_config_lookup(self, *, app_ids: str | Sequence[str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -5761,7 +5835,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -5770,7 +5844,7 @@

              Methods

              return self.api_call("admin.apps.config.lookup", params=kwargs)

              Look up the app config for connectors by their IDs -https://api.slack.com/methods/admin.apps.config.lookup

              +https://docs.slack.dev/reference/methods/admin.apps.config.lookup

              def admin_apps_config_set(self,
              *,
              app_id: str,
              domain_restrictions: Dict[str, Any] | None = None,
              workflow_auth_strategy: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -5789,7 +5863,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -5802,7 +5876,7 @@

              Methods

              return self.api_call("admin.apps.config.set", params=kwargs)

              Set the app config for a connector -https://api.slack.com/methods/admin.apps.config.set

              +https://docs.slack.dev/reference/methods/admin.apps.config.set

              def admin_apps_requests_cancel(self,
              *,
              request_id: str,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -5821,7 +5895,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -5833,7 +5907,7 @@

              Methods

              return self.api_call("admin.apps.requests.cancel", http_verb="POST", params=kwargs)

              List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.cancel

              +https://docs.slack.dev/reference/methods/admin.apps.requests.cancel

              def admin_apps_requests_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -5852,7 +5926,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -5864,7 +5938,7 @@

              Methods

              return self.api_call("admin.apps.requests.list", http_verb="GET", params=kwargs)

              List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.list

              +https://docs.slack.dev/reference/methods/admin.apps.requests.list

              def admin_apps_restrict(self,
              *,
              app_id: str | None = None,
              request_id: str | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -5887,7 +5961,7 @@

              Methods

              Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -5908,7 +5982,7 @@

              Methods

              Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.restrict

              +https://docs.slack.dev/reference/methods/admin.apps.restrict

              def admin_apps_restricted_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              enterprise_id: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -5928,7 +6002,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -5941,7 +6015,7 @@

              Methods

              return self.api_call("admin.apps.restricted.list", http_verb="GET", params=kwargs)

              List restricted apps for an org or workspace. -https://api.slack.com/methods/admin.apps.restricted.list

              +https://docs.slack.dev/reference/methods/admin.apps.restricted.list

              def admin_apps_uninstall(self,
              *,
              app_id: str,
              enterprise_id: str | None = None,
              team_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -5961,7 +6035,7 @@

              Methods

              ) -> Union[Future, SlackResponse]: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -5975,7 +6049,7 @@

              Methods

              Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. -https://api.slack.com/methods/admin.apps.uninstall

              +https://docs.slack.dev/reference/methods/admin.apps.uninstall

              def admin_auth_policy_assignEntities(self,
              *,
              entity_ids: str | Sequence[str],
              policy_name: str,
              entity_type: str,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -5994,7 +6068,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6005,7 +6079,7 @@

              Methods

              return self.api_call("admin.auth.policy.assignEntities", http_verb="POST", params=kwargs)

              Assign entities to a particular authentication policy. -https://api.slack.com/methods/admin.auth.policy.assignEntities

              +https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities

              def admin_auth_policy_getEntities(self,
              *,
              policy_name: str,
              cursor: str | None = None,
              entity_type: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -6025,7 +6099,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -6037,7 +6111,7 @@

              Methods

              return self.api_call("admin.auth.policy.getEntities", http_verb="POST", params=kwargs)

              Fetch all the entities assigned to a particular authentication policy by name. -https://api.slack.com/methods/admin.auth.policy.getEntities

              +https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities

              def admin_auth_policy_removeEntities(self,
              *,
              entity_ids: str | Sequence[str],
              policy_name: str,
              entity_type: str,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -6056,7 +6130,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6067,7 +6141,7 @@

              Methods

              return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs)

              Remove specified entities from a specified authentication policy. -https://api.slack.com/methods/admin.auth.policy.removeEntities

              +https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities

              def admin_barriers_create(self,
              *,
              barriered_from_usergroup_ids: str | Sequence[str],
              primary_usergroup_id: str,
              restricted_subjects: str | Sequence[str],
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -6086,7 +6160,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6100,7 +6174,7 @@

              Methods

              return self.api_call("admin.barriers.create", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.barriers.create

              def admin_barriers_delete(self, *, barrier_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6117,13 +6191,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs)

              Delete an existing Information Barrier -https://api.slack.com/methods/admin.barriers.delete

              +https://docs.slack.dev/reference/methods/admin.barriers.delete

              def admin_barriers_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6141,7 +6215,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -6151,7 +6225,7 @@

              Methods

              return self.api_call("admin.barriers.list", http_verb="GET", params=kwargs)

              Get all Information Barriers for your organization -https://api.slack.com/methods/admin.barriers.list

              +https://docs.slack.dev/reference/methods/admin.barriers.list

              def admin_barriers_update(self,
              *,
              barrier_id: str,
              barriered_from_usergroup_ids: str | Sequence[str],
              primary_usergroup_id: str,
              restricted_subjects: str | Sequence[str],
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -6171,7 +6245,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6185,7 +6259,7 @@

              Methods

              return self.api_call("admin.barriers.update", http_verb="POST", params=kwargs)

              Update an existing Information Barrier -https://api.slack.com/methods/admin.barriers.update

              +https://docs.slack.dev/reference/methods/admin.barriers.update

              def admin_conversations_archive(self, *, channel_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6202,13 +6276,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs)

              Archive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

              +https://docs.slack.dev/reference/methods/admin.conversations.archive

              def admin_conversations_bulkArchive(self, *, channel_ids: str | Sequence[str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6225,13 +6299,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs)

              Archive public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkArchive

              +https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive

              def admin_conversations_bulkDelete(self, *, channel_ids: str | Sequence[str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6272,7 +6346,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -6283,7 +6357,7 @@

              Methods

              return self.api_call("admin.conversations.bulkMove", params=kwargs)

              Move public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkMove

              +https://docs.slack.dev/reference/methods/admin.conversations.bulkMove

              def admin_conversations_convertToPrivate(self, *, channel_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6300,13 +6374,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs)

              Convert a public channel to a private channel. -https://api.slack.com/methods/admin.conversations.convertToPrivate

              +https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate

              def admin_conversations_convertToPublic(self, *, channel_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6323,13 +6397,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs)

              Convert a privte channel to a public channel. -https://api.slack.com/methods/admin.conversations.convertToPublic

              +https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic

              def admin_conversations_create(self,
              *,
              is_private: bool,
              name: str,
              description: str | None = None,
              org_wide: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -6350,7 +6424,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -6364,7 +6438,7 @@

              Methods

              return self.api_call("admin.conversations.create", params=kwargs)

              Create a public or private channel-based conversation. -https://api.slack.com/methods/admin.conversations.create

              +https://docs.slack.dev/reference/methods/admin.conversations.create

              def admin_conversations_createForObjects(self,
              *,
              object_id: str,
              salesforce_org_id: str,
              invite_object_team: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -6383,7 +6457,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -6391,7 +6465,7 @@

              Methods

              return self.api_call("admin.conversations.createForObjects", params=kwargs)

              Create a Salesforce channel for the corresponding object provided. -https://api.slack.com/methods/admin.conversations.createForObjects

              +https://docs.slack.dev/reference/methods/admin.conversations.createForObjects

              def admin_conversations_delete(self, *, channel_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6408,13 +6482,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.delete

              def admin_conversations_disconnectShared(self,
              *,
              channel_id: str,
              leaving_team_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -6432,7 +6506,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -6442,7 +6516,7 @@

              Methods

              return self.api_call("admin.conversations.disconnectShared", params=kwargs)

              Disconnect a connected channel from one or more workspaces. -https://api.slack.com/methods/admin.conversations.disconnectShared

              +https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared

              def admin_conversations_ekm_listOriginalConnectedChannelInfo(self,
              *,
              channel_ids: str | Sequence[str] | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              team_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -6464,7 +6538,7 @@

              Methods

              """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -6485,7 +6559,7 @@

              Methods

              List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. -https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

              +https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

              def admin_conversations_getConversationPrefs(self, *, channel_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6502,13 +6576,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs)

              Get conversation preferences for a public or private channel. -https://api.slack.com/methods/admin.conversations.getConversationPrefs

              +https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs

              def admin_conversations_getCustomRetention(self, *, channel_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6525,13 +6599,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention

              def admin_conversations_getTeams(self,
              *,
              channel_id: str,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -6550,7 +6624,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -6562,7 +6636,7 @@

              Methods

              return self.api_call("admin.conversations.getTeams", params=kwargs)

              Set the workspaces in an Enterprise grid org that connect to a channel. -https://api.slack.com/methods/admin.conversations.getTeams

              +https://docs.slack.dev/reference/methods/admin.conversations.getTeams

              def admin_conversations_invite(self, *, channel_id: str, user_ids: str | Sequence[str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6580,7 +6654,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -6591,7 +6665,7 @@

              Methods

              return self.api_call("admin.conversations.invite", params=kwargs)

              Invite a user to a public or private channel. -https://api.slack.com/methods/admin.conversations.invite

              +https://docs.slack.dev/reference/methods/admin.conversations.invite

              def admin_conversations_linkObjects(self, *, channel: str, record_id: str, salesforce_org_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6610,7 +6684,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -6622,7 +6696,7 @@

              Methods

              return self.api_call("admin.conversations.linkObjects", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.linkObjects

              def admin_conversations_lookup(self,
              *,
              last_message_activity_before: int,
              team_ids: str | Sequence[str],
              cursor: str | None = None,
              limit: int | None = None,
              max_member_count: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -6643,7 +6717,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -6660,7 +6734,7 @@

              Methods

              return self.api_call("admin.conversations.lookup", params=kwargs)

              Returns channels on the given team using the filters. -https://api.slack.com/methods/admin.conversations.lookup

              +https://docs.slack.dev/reference/methods/admin.conversations.lookup

              def admin_conversations_removeCustomRetention(self, *, channel_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6677,13 +6751,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention

              def admin_conversations_rename(self, *, channel_id: str, name: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6701,13 +6775,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.rename

              def admin_conversations_restrictAccess_addGroup(self, *, channel_id: str, group_id: str, team_id: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6726,7 +6800,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -6742,7 +6816,7 @@

              Methods

              )

              Add an allowlist of IDP groups for accessing a channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup

              +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup

              def admin_conversations_restrictAccess_listGroups(self, *, channel_id: str, team_id: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6760,7 +6834,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -6775,7 +6849,7 @@

              Methods

              )
              +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups

              def admin_conversations_restrictAccess_removeGroup(self, *, channel_id: str, group_id: str, team_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6794,7 +6868,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -6810,7 +6884,7 @@

              Methods

              )

              Remove a linked IDP group linked from a private channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup

              +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup

              def admin_conversations_setConversationPrefs(self, *, channel_id: str, prefs: str | Dict[str, str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6876,7 +6950,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -6886,7 +6960,7 @@

              Methods

              return self.api_call("admin.conversations.setConversationPrefs", params=kwargs)

              Set the posting permissions for a public or private channel. -https://api.slack.com/methods/admin.conversations.setConversationPrefs

              +https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs

              def admin_conversations_setCustomRetention(self, *, channel_id: str, duration_days: int, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6904,13 +6978,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention

              def admin_conversations_setTeams(self,
              *,
              channel_id: str,
              org_channel: bool | None = None,
              target_team_ids: str | Sequence[str] | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -6930,7 +7004,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -6946,7 +7020,7 @@

              Methods

              return self.api_call("admin.conversations.setTeams", params=kwargs)

              Set the workspaces in an Enterprise grid org that connect to a public or private channel. -https://api.slack.com/methods/admin.conversations.setTeams

              +https://docs.slack.dev/reference/methods/admin.conversations.setTeams

              def admin_conversations_unarchive(self, *, channel_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6963,13 +7037,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs)

              Unarchive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

              +https://docs.slack.dev/reference/methods/admin.conversations.archive

              def admin_conversations_unlinkObjects(self, *, channel: str, new_name: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -6987,7 +7061,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -6998,7 +7072,7 @@

              Methods

              return self.api_call("admin.conversations.unlinkObjects", params=kwargs)

              Unlink a Salesforce record from a channel. -https://api.slack.com/methods/admin.conversations.unlinkObjects

              +https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects

              def admin_emoji_add(self, *, name: str, url: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7016,13 +7090,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.emoji.add

              def admin_emoji_addAlias(self, *, alias_for: str, name: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7040,13 +7114,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.emoji.addAlias

              def admin_emoji_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7064,13 +7138,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs)

              List emoji for an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.list

              +https://docs.slack.dev/reference/methods/admin.emoji.list

              def admin_emoji_remove(self, *, name: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7087,13 +7161,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs)

              Remove an emoji across an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.remove

              +https://docs.slack.dev/reference/methods/admin.emoji.remove

              def admin_emoji_rename(self, *, name: str, new_name: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7111,13 +7185,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.emoji.rename

              def admin_functions_list(self,
              *,
              app_ids: str | Sequence[str],
              team_id: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7137,7 +7211,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -7153,7 +7227,7 @@

              Methods

              return self.api_call("admin.functions.list", params=kwargs)

              Look up functions by a set of apps -https://api.slack.com/methods/admin.functions.list

              +https://docs.slack.dev/reference/methods/admin.functions.list

              def admin_functions_permissions_lookup(self, *, function_ids: str | Sequence[str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7171,7 +7245,7 @@

              Methods

              ) -> Union[Future, SlackResponse]: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -7181,7 +7255,7 @@

              Methods

              Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. -https://api.slack.com/methods/admin.functions.permissions.lookup

              +https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup

              def admin_functions_permissions_set(self,
              *,
              function_id: str,
              visibility: str,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7201,7 +7275,7 @@

              Methods

              ) -> Union[Future, SlackResponse]: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -7218,7 +7292,7 @@

              Methods

              Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities -https://api.slack.com/methods/admin.functions.permissions.set

              +https://docs.slack.dev/reference/methods/admin.functions.permissions.set

              def admin_inviteRequests_approve(self, *, invite_request_id: str, team_id: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7236,13 +7310,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.inviteRequests.approve

              def admin_inviteRequests_approved_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7261,7 +7335,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -7273,7 +7347,7 @@

              Methods

              return self.api_call("admin.inviteRequests.approved.list", params=kwargs)

              List all approved workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.approved.list

              +https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list

              def admin_inviteRequests_denied_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7292,7 +7366,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -7304,7 +7378,7 @@

              Methods

              return self.api_call("admin.inviteRequests.denied.list", params=kwargs)

              List all denied workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.denied.list

              +https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list

              def admin_inviteRequests_deny(self, *, invite_request_id: str, team_id: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7322,13 +7396,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.inviteRequests.deny

              def admin_inviteRequests_list(self, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7364,7 +7438,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7378,7 +7452,7 @@

              Methods

              return self.api_call("admin.roles.addAssignments", params=kwargs)

              Adds members to the specified role with the specified scopes -https://api.slack.com/methods/admin.roles.addAssignments

              +https://docs.slack.dev/reference/methods/admin.roles.addAssignments

              def admin_roles_listAssignments(self,
              *,
              role_ids: str | Sequence[str] | None = None,
              entity_ids: str | Sequence[str] | None = None,
              cursor: str | None = None,
              limit: str | int | None = None,
              sort_dir: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7400,7 +7474,7 @@

              Methods

              ) -> Union[Future, SlackResponse]: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -7415,7 +7489,7 @@

              Methods

              Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities -https://api.slack.com/methods/admin.roles.listAssignments

              +https://docs.slack.dev/reference/methods/admin.roles.listAssignments

              def admin_roles_removeAssignments(self,
              *,
              role_id: str,
              entity_ids: str | Sequence[str],
              user_ids: str | Sequence[str],
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7434,7 +7508,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7448,7 +7522,7 @@

              Methods

              return self.api_call("admin.roles.removeAssignments", params=kwargs)

              Removes a set of users from a role for the given scopes and entities -https://api.slack.com/methods/admin.roles.removeAssignments

              +https://docs.slack.dev/reference/methods/admin.roles.removeAssignments

              def admin_teams_admins_list(self, *, team_id: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7467,7 +7541,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -7479,7 +7553,7 @@

              Methods

              return self.api_call("admin.teams.admins.list", http_verb="GET", params=kwargs)

              List all of the admins on a given workspace. -https://api.slack.com/methods/admin.inviteRequests.list

              +https://docs.slack.dev/reference/methods/admin.inviteRequests.list

              def admin_teams_create(self,
              *,
              team_domain: str,
              team_name: str,
              team_description: str | None = None,
              team_discoverability: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7499,7 +7573,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -7512,7 +7586,7 @@

              Methods

              return self.api_call("admin.teams.create", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.create

              def admin_teams_list(self, *, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7530,13 +7604,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs)

              List all teams on an Enterprise organization. -https://api.slack.com/methods/admin.teams.list

              +https://docs.slack.dev/reference/methods/admin.teams.list

              def admin_teams_owners_list(self, *, team_id: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7555,13 +7629,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs)

              List all of the admins on a given workspace. -https://api.slack.com/methods/admin.teams.owners.list

              +https://docs.slack.dev/reference/methods/admin.teams.owners.list

              def admin_teams_settings_info(self, *, team_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7578,13 +7652,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs)

              Fetch information about settings in a workspace -https://api.slack.com/methods/admin.teams.settings.info

              +https://docs.slack.dev/reference/methods/admin.teams.settings.info

              def admin_teams_settings_setDefaultChannels(self, *, team_id: str, channel_ids: str | Sequence[str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7602,7 +7676,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -7612,7 +7686,7 @@

              Methods

              return self.api_call("admin.teams.settings.setDefaultChannels", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels

              def admin_teams_settings_setDescription(self, *, team_id: str, description: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7630,13 +7704,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription

              def admin_teams_settings_setDiscoverability(self, *, team_id: str, discoverability: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7654,13 +7728,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability

              def admin_teams_settings_setIcon(self, *, team_id: str, image_url: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7678,13 +7752,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon

              def admin_teams_settings_setName(self, *, team_id: str, name: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7702,13 +7776,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.teams.settings.setName

              def admin_usergroups_addChannels(self,
              *,
              channel_ids: str | Sequence[str],
              usergroup_id: str,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7727,7 +7801,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7737,7 +7811,7 @@

              Methods

              return self.api_call("admin.usergroups.addChannels", params=kwargs)

              Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.addChannels

              +https://docs.slack.dev/reference/methods/admin.usergroups.addChannels

              def admin_usergroups_addTeams(self,
              *,
              usergroup_id: str,
              team_ids: str | Sequence[str],
              auto_provision: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7756,7 +7830,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -7766,7 +7840,7 @@

              Methods

              return self.api_call("admin.usergroups.addTeams", params=kwargs)

              Associate one or more default workspaces with an organization-wide IDP group. -https://api.slack.com/methods/admin.usergroups.addTeams

              +https://docs.slack.dev/reference/methods/admin.usergroups.addTeams

              def admin_usergroups_listChannels(self,
              *,
              usergroup_id: str,
              include_num_members: bool | None = None,
              team_id: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7785,7 +7859,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -7797,7 +7871,7 @@

              Methods

              return self.api_call("admin.usergroups.listChannels", params=kwargs)

              Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.listChannels

              +https://docs.slack.dev/reference/methods/admin.usergroups.listChannels

              def admin_usergroups_removeChannels(self, *, usergroup_id: str, channel_ids: str | Sequence[str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7815,7 +7889,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7825,7 +7899,7 @@

              Methods

              return self.api_call("admin.usergroups.removeChannels", params=kwargs)

              Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.removeChannels

              +https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels

              def admin_users_assign(self,
              *,
              team_id: str,
              user_id: str,
              channel_ids: str | Sequence[str] | None = None,
              is_restricted: bool | None = None,
              is_ultra_restricted: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7846,7 +7920,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -7863,7 +7937,7 @@

              Methods

              return self.api_call("admin.users.assign", params=kwargs)

              Add an Enterprise user to a workspace. -https://api.slack.com/methods/admin.users.assign

              +https://docs.slack.dev/reference/methods/admin.users.assign

              def admin_users_invite(self,
              *,
              team_id: str,
              email: str,
              channel_ids: str | Sequence[str],
              custom_message: str | None = None,
              email_password_policy_enabled: bool | None = None,
              guest_expiration_ts: str | float | None = None,
              is_restricted: bool | None = None,
              is_ultra_restricted: bool | None = None,
              real_name: str | None = None,
              resend: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7889,7 +7963,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -7911,10 +7985,10 @@

              Methods

              return self.api_call("admin.users.invite", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.users.invite

              -def admin_users_list(self,
              *,
              team_id: str,
              include_deactivated_user_workspaces: bool | None = None,
              is_active: bool | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              +def admin_users_list(self,
              *,
              team_id: str | None = None,
              include_deactivated_user_workspaces: bool | None = None,
              is_active: bool | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -7924,7 +7998,7 @@

              Methods

              def admin_users_list(
                   self,
                   *,
              -    team_id: str,
              +    team_id: Optional[str] = None,
                   include_deactivated_user_workspaces: Optional[bool] = None,
                   is_active: Optional[bool] = None,
                   cursor: Optional[str] = None,
              @@ -7932,7 +8006,7 @@ 

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -7946,7 +8020,7 @@

              Methods

              return self.api_call("admin.users.list", params=kwargs)
              +https://docs.slack.dev/reference/methods/admin.users.list

              def admin_users_remove(self, *, team_id: str, user_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7964,13 +8038,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs)

              Remove a user from a workspace. -https://api.slack.com/methods/admin.users.remove

              +https://docs.slack.dev/reference/methods/admin.users.remove

              def admin_users_session_clearSettings(self, *, user_ids: str | Sequence[str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -7988,7 +8062,7 @@

              Methods

              ) -> Union[Future, SlackResponse]: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -7998,7 +8072,7 @@

              Methods

              Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. -https://api.slack.com/methods/admin.users.session.clearSettings

              +https://docs.slack.dev/reference/methods/admin.users.session.clearSettings

              def admin_users_session_getSettings(self, *, user_ids: str | Sequence[str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8016,7 +8090,7 @@

              Methods

              ) -> Union[Future, SlackResponse]: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8026,7 +8100,7 @@

              Methods

              Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. -https://api.slack.com/methods/admin.users.session.getSettings

              +https://docs.slack.dev/reference/methods/admin.users.session.getSettings

              def admin_users_session_invalidate(self, *, session_id: str, team_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8044,13 +8118,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs)

              Invalidate a single session for a user by session_id. -https://api.slack.com/methods/admin.users.session.invalidate

              +https://docs.slack.dev/reference/methods/admin.users.session.invalidate

              def admin_users_session_list(self,
              *,
              cursor: str | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              user_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8070,7 +8144,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -8083,7 +8157,7 @@

              Methods

              return self.api_call("admin.users.session.list", params=kwargs)

              Lists all active user sessions for an organization -https://api.slack.com/methods/admin.users.session.list

              +https://docs.slack.dev/reference/methods/admin.users.session.list

              def admin_users_session_reset(self,
              *,
              user_id: str,
              mobile_only: bool | None = None,
              web_only: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8102,7 +8176,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -8114,7 +8188,7 @@

              Methods

              return self.api_call("admin.users.session.reset", params=kwargs)

              Wipes all valid sessions on all devices for a given user. -https://api.slack.com/methods/admin.users.session.reset

              +https://docs.slack.dev/reference/methods/admin.users.session.reset

              def admin_users_session_resetBulk(self,
              *,
              user_ids: str | Sequence[str],
              mobile_only: bool | None = None,
              web_only: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8133,7 +8207,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8148,7 +8222,7 @@

              Methods

              return self.api_call("admin.users.session.resetBulk", params=kwargs)

              Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users -https://api.slack.com/methods/admin.users.session.resetBulk

              +https://docs.slack.dev/reference/methods/admin.users.session.resetBulk

              def admin_users_session_setSettings(self,
              *,
              user_ids: str | Sequence[str],
              desktop_app_browser_quit: bool | None = None,
              duration: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8168,7 +8242,7 @@

              Methods

              ) -> Union[Future, SlackResponse]: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8184,7 +8258,7 @@

              Methods

              Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. -https://api.slack.com/methods/admin.users.session.setSettings

              +https://docs.slack.dev/reference/methods/admin.users.session.setSettings

              def admin_users_setAdmin(self, *, team_id: str, user_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8202,13 +8276,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs)

              Set an existing guest, regular user, or owner to be an admin user. -https://api.slack.com/methods/admin.users.setAdmin

              +https://docs.slack.dev/reference/methods/admin.users.setAdmin

              def admin_users_setExpiration(self, *, expiration_ts: int, user_id: str, team_id: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8227,13 +8301,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs)

              Set an expiration for a guest user. -https://api.slack.com/methods/admin.users.setExpiration

              +https://docs.slack.dev/reference/methods/admin.users.setExpiration

              def admin_users_setOwner(self, *, team_id: str, user_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8251,13 +8325,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs)

              Set an existing guest, regular user, or admin user to be a workspace owner. -https://api.slack.com/methods/admin.users.setOwner

              +https://docs.slack.dev/reference/methods/admin.users.setOwner

              def admin_users_setRegular(self, *, team_id: str, user_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8275,13 +8349,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs)

              Set an existing guest user, admin user, or owner to be a regular user. -https://api.slack.com/methods/admin.users.setRegular

              +https://docs.slack.dev/reference/methods/admin.users.setRegular

              def admin_users_unsupportedVersions_export(self,
              *,
              date_end_of_support: str | int | None = None,
              date_sessions_started: str | int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8300,7 +8374,7 @@

              Methods

              ) -> Union[Future, SlackResponse]: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -8312,7 +8386,7 @@

              Methods

              Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. -https://api.slack.com/methods/admin.users.unsupportedVersions.export

              +https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export

              def admin_workflows_collaborators_add(self,
              *,
              collaborator_ids: str | Sequence[str],
              workflow_ids: str | Sequence[str],
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8330,7 +8404,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8343,7 +8417,7 @@

              Methods

              return self.api_call("admin.workflows.collaborators.add", params=kwargs)

              Add collaborators to workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.add

              +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add

              def admin_workflows_collaborators_remove(self,
              *,
              collaborator_ids: str | Sequence[str],
              workflow_ids: str | Sequence[str],
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8361,7 +8435,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8374,7 +8448,7 @@

              Methods

              return self.api_call("admin.workflows.collaborators.remove", params=kwargs)

              Remove collaborators from workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.remove

              +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove

              def admin_workflows_permissions_lookup(self,
              *,
              workflow_ids: str | Sequence[str],
              max_workflow_triggers: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8392,7 +8466,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8406,7 +8480,7 @@

              Methods

              return self.api_call("admin.workflows.permissions.lookup", params=kwargs)

              Look up the permissions for a set of workflows -https://api.slack.com/methods/admin.workflows.permissions.lookup

              +https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup

              def admin_workflows_unpublish(self, *, workflow_ids: str | Sequence[str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8472,7 +8546,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8481,7 +8555,7 @@

              Methods

              return self.api_call("admin.workflows.unpublish", params=kwargs)

              Unpublish workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.unpublish

              +https://docs.slack.dev/reference/methods/admin.workflows.unpublish

              def api_test(self, *, error: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8498,13 +8572,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs)

              Checks API calling code. -https://api.slack.com/methods/api.test

              +https://docs.slack.dev/reference/methods/api.test

              def apps_connections_open(self, *, app_token: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8522,14 +8596,14 @@

              Methods

              ) -> Union[Future, SlackResponse]: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs)

              Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads -https://api.slack.com/methods/apps.connections.open

              +https://docs.slack.dev/reference/methods/apps.connections.open

              def apps_event_authorizations_list(self,
              *,
              event_context: str,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8549,14 +8623,14 @@

              Methods

              ) -> Union[Future, SlackResponse]: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs)

              Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. -https://api.slack.com/methods/apps.event.authorizations.list

              +https://docs.slack.dev/reference/methods/apps.event.authorizations.list

              def apps_manifest_create(self, *, manifest: str | Dict[str, Any], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8573,7 +8647,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8582,7 +8656,7 @@

              Methods

              return self.api_call("apps.manifest.create", params=kwargs)

              Create an app from an app manifest -https://api.slack.com/methods/apps.manifest.create

              +https://docs.slack.dev/reference/methods/apps.manifest.create

              def apps_manifest_delete(self, *, app_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8599,13 +8673,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs)

              Permanently deletes an app created through app manifests -https://api.slack.com/methods/apps.manifest.delete

              +https://docs.slack.dev/reference/methods/apps.manifest.delete

              def apps_manifest_export(self, *, app_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8622,13 +8696,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs)

              Export an app manifest from an existing app -https://api.slack.com/methods/apps.manifest.export

              +https://docs.slack.dev/reference/methods/apps.manifest.export

              def apps_manifest_update(self, *, app_id: str, manifest: str | Dict[str, Any], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8646,7 +8720,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8656,7 +8730,7 @@

              Methods

              return self.api_call("apps.manifest.update", params=kwargs)

              Update an app from an app manifest -https://api.slack.com/methods/apps.manifest.update

              +https://docs.slack.dev/reference/methods/apps.manifest.update

              def apps_manifest_validate(self, *, manifest: str | Dict[str, Any], app_id: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8674,7 +8748,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8684,7 +8758,7 @@

              Methods

              return self.api_call("apps.manifest.validate", params=kwargs)
              +https://docs.slack.dev/reference/methods/apps.manifest.validate

              def apps_uninstall(self, *, client_id: str, client_secret: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8702,13 +8776,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs)

              Uninstalls your app from a workspace. -https://api.slack.com/methods/apps.uninstall

              +https://docs.slack.dev/reference/methods/apps.uninstall

              def assistant_threads_setStatus(self, *, channel_id: str, thread_ts: str, status: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8727,13 +8801,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return self.api_call("assistant.threads.setStatus", params=kwargs)
              +https://docs.slack.dev/reference/methods/assistant.threads.setStatus

              def assistant_threads_setSuggestedPrompts(self,
              *,
              channel_id: str,
              thread_ts: str,
              title: str | None = None,
              prompts: List[Dict[str, str]],
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8753,7 +8827,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -8761,7 +8835,7 @@

              Methods

              return self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
              +https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

              def assistant_threads_setTitle(self, *, channel_id: str, thread_ts: str, title: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8780,13 +8854,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs)
              +https://docs.slack.dev/reference/methods/assistant.threads.setTitle

              def auth_revoke(self, *, test: bool | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8803,13 +8877,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/auth.revoke

              def auth_teams_list(self,
              cursor: str | None = None,
              limit: int | None = None,
              include_icon: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8827,13 +8901,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs)

              List the workspaces a token can access. -https://api.slack.com/methods/auth.teams.list

              +https://docs.slack.dev/reference/methods/auth.teams.list

              def auth_test(self, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8848,12 +8922,12 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs)

              Checks authentication & identity. -https://api.slack.com/methods/auth.test

              +https://docs.slack.dev/reference/methods/auth.test

              def bookmarks_add(self,
              *,
              channel_id: str,
              title: str,
              type: str,
              emoji: str | None = None,
              entity_id: str | None = None,
              link: str | None = None,
              parent_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8876,7 +8950,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -8892,7 +8966,7 @@

              Methods

              return self.api_call("bookmarks.add", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/bookmarks.add

              def bookmarks_edit(self,
              *,
              bookmark_id: str,
              channel_id: str,
              emoji: str | None = None,
              link: str | None = None,
              title: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -8913,7 +8987,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -8927,7 +9001,7 @@

              Methods

              return self.api_call("bookmarks.edit", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/bookmarks.edit

              def bookmarks_list(self, *, channel_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8944,13 +9018,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs)

              List bookmark for the channel. -https://api.slack.com/methods/bookmarks.list

              +https://docs.slack.dev/reference/methods/bookmarks.list

              def bookmarks_remove(self, *, bookmark_id: str, channel_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8968,13 +9042,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs)

              Remove bookmark from the channel. -https://api.slack.com/methods/bookmarks.remove

              +https://docs.slack.dev/reference/methods/bookmarks.remove

              def bots_info(self, *, bot: str | None = None, team_id: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -8992,13 +9066,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs)

              Gets information about a bot user. -https://api.slack.com/methods/bots.info

              +https://docs.slack.dev/reference/methods/bots.info

              def calls_add(self,
              *,
              external_unique_id: str,
              join_url: str,
              created_by: str | None = None,
              date_start: int | None = None,
              desktop_app_join_url: str | None = None,
              external_display_id: str | None = None,
              title: str | None = None,
              users: str | Sequence[Dict[str, str]] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -9022,7 +9096,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -9042,7 +9116,7 @@

              Methods

              return self.api_call("calls.add", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/calls.add

              def calls_end(self, *, id: str, duration: int | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -9060,13 +9134,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/calls.end

              def calls_info(self, *, id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -9083,13 +9157,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs)

              Returns information about a Call. -https://api.slack.com/methods/calls.info

              +https://docs.slack.dev/reference/methods/calls.info

              def calls_participants_add(self, *, id: str, users: str | Sequence[Dict[str, str]], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -9107,14 +9181,14 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.add", http_verb="POST", params=kwargs)

              Registers new participants added to a Call. -https://api.slack.com/methods/calls.participants.add

              +https://docs.slack.dev/reference/methods/calls.participants.add

              def calls_participants_remove(self, *, id: str, users: str | Sequence[Dict[str, str]], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -9132,14 +9206,14 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.remove", http_verb="POST", params=kwargs)

              Registers participants removed from a Call. -https://api.slack.com/methods/calls.participants.remove

              +https://docs.slack.dev/reference/methods/calls.participants.remove

              def calls_update(self,
              *,
              id: str,
              desktop_app_join_url: str | None = None,
              join_url: str | None = None,
              title: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -9159,7 +9233,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -9172,7 +9246,7 @@

              Methods

              return self.api_call("calls.update", http_verb="POST", params=kwargs)

              Updates information about a Call. -https://api.slack.com/methods/calls.update

              +https://docs.slack.dev/reference/methods/calls.update

              def canvases_access_delete(self,
              *,
              canvas_id: str,
              channel_ids: str | Sequence[str] | None = None,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -9191,7 +9265,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -9207,7 +9281,7 @@

              Methods

              return self.api_call("canvases.access.delete", params=kwargs)

              Create a Channel Canvas for a channel -https://api.slack.com/methods/canvases.access.delete

              +https://docs.slack.dev/reference/methods/canvases.access.delete

              def canvases_access_set(self,
              *,
              canvas_id: str,
              access_level: str,
              channel_ids: str | Sequence[str] | None = None,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -9227,7 +9301,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -9244,7 +9318,7 @@

              Methods

              return self.api_call("canvases.access.set", params=kwargs)

              Sets the access level to a canvas for specified entities -https://api.slack.com/methods/canvases.access.set

              +https://docs.slack.dev/reference/methods/canvases.access.set

              def canvases_create(self, *, title: str | None = None, document_content: Dict[str, str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -9262,13 +9336,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs)
              +https://docs.slack.dev/reference/methods/canvases.create

              def canvases_delete(self, *, canvas_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -9285,13 +9359,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/canvases.delete

              def canvases_edit(self, *, canvas_id: str, changes: Sequence[Dict[str, Any]], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -9309,13 +9383,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs)
              +https://docs.slack.dev/reference/methods/canvases.edit

              def canvases_sections_lookup(self, *, canvas_id: str, criteria: Dict[str, Any], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -9333,13 +9407,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs)

              Find sections matching the provided criteria -https://api.slack.com/methods/canvases.sections.lookup

              +https://docs.slack.dev/reference/methods/canvases.sections.lookup

              def channels_archive(self, *, channel: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -9673,13 +9747,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/chat.delete

              def chat_deleteScheduledMessage(self,
              *,
              channel: str,
              scheduled_message_id: str,
              as_user: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -9698,7 +9772,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -9710,7 +9784,7 @@

              Methods

              return self.api_call("chat.deleteScheduledMessage", params=kwargs)
              +https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage

              def chat_meMessage(self, *, channel: str, text: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -9752,16 +9826,16 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs)

              Share a me message into a channel. -https://api.slack.com/methods/chat.meMessage

              +https://docs.slack.dev/reference/methods/chat.meMessage

              -def chat_postEphemeral(self,
              *,
              channel: str,
              user: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              +def chat_postEphemeral(self,
              *,
              channel: str,
              user: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -9783,10 +9857,11 @@

              Methods

              link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -9802,19 +9877,20 @@

              Methods

              "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs)

              Sends an ephemeral message to a user in a channel. -https://api.slack.com/methods/chat.postEphemeral

              +https://docs.slack.dev/reference/methods/chat.postEphemeral

              -def chat_postMessage(self,
              *,
              channel: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              container_id: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              mrkdwn: bool | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              +def chat_postMessage(self,
              *,
              channel: str,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              container_id: str | None = None,
              icon_emoji: str | None = None,
              icon_url: str | None = None,
              mrkdwn: bool | None = None,
              link_names: bool | None = None,
              username: str | None = None,
              parse: str | None = None,
              metadata: Dict | Metadata | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -9841,10 +9917,11 @@

              Methods

              username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -9865,19 +9942,20 @@

              Methods

              "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs)

              Sends a message to a channel. -https://api.slack.com/methods/chat.postMessage

              +https://docs.slack.dev/reference/methods/chat.postMessage

              -def chat_scheduleMessage(self,
              *,
              channel: str,
              post_at: str | int,
              text: str,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              link_names: bool | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              +def chat_scheduleMessage(self,
              *,
              channel: str,
              post_at: str | int,
              text: str | None = None,
              as_user: bool | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              thread_ts: str | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              unfurl_links: bool | None = None,
              unfurl_media: bool | None = None,
              link_names: bool | None = None,
              metadata: Dict | Metadata | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -9889,7 +9967,7 @@

              Methods

              *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -9900,10 +9978,11 @@

              Methods

              unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -9920,16 +9999,17 @@

              Methods

              "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs)
              +https://docs.slack.dev/reference/methods/chat.scheduleMessage

              def chat_scheduledMessages_list(self,
              *,
              channel: str | None = None,
              cursor: str | None = None,
              latest: str | None = None,
              limit: int | None = None,
              oldest: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -9951,7 +10031,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -9966,7 +10046,7 @@

              Methods

              return self.api_call("chat.scheduledMessages.list", params=kwargs)
              +https://docs.slack.dev/reference/methods/chat.scheduledMessages.list

              def chat_unfurl(self,
              *,
              channel: str | None = None,
              ts: str | None = None,
              source: str | None = None,
              unfurl_id: str | None = None,
              unfurls: Dict[str, Dict] | None = None,
              user_auth_blocks: str | Sequence[Dict | Block] | None = None,
              user_auth_message: str | None = None,
              user_auth_required: bool | None = None,
              user_auth_url: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -9991,7 +10071,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -10012,10 +10092,10 @@

              Methods

              return self.api_call("chat.unfurl", json=kwargs)

              Provide custom unfurl behavior for user-posted URLs. -https://api.slack.com/methods/chat.unfurl

              +https://docs.slack.dev/reference/methods/chat.unfurl

              -def chat_update(self,
              *,
              channel: str,
              ts: str,
              text: str | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              as_user: bool | None = None,
              file_ids: str | Sequence[str] | None = None,
              link_names: bool | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              +def chat_update(self,
              *,
              channel: str,
              ts: str,
              text: str | None = None,
              attachments: str | Sequence[Dict | Attachment] | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              as_user: bool | None = None,
              file_ids: str | Sequence[str] | None = None,
              link_names: bool | None = None,
              parse: str | None = None,
              reply_broadcast: bool | None = None,
              metadata: Dict | Metadata | None = None,
              markdown_text: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10036,10 +10116,11 @@

              Methods

              parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -10053,6 +10134,7 @@

              Methods

              "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -10061,12 +10143,12 @@

              Methods

              kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs)

              Updates a message in a channel. -https://api.slack.com/methods/chat.update

              +https://docs.slack.dev/reference/methods/chat.update

              def conversations_acceptSharedInvite(self,
              *,
              channel_name: str,
              channel_id: str | None = None,
              invite_id: str | None = None,
              free_trial_accepted: bool | None = None,
              is_private: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10088,7 +10170,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -10105,7 +10187,7 @@

              Methods

              return self.api_call("conversations.acceptSharedInvite", http_verb="POST", params=kwargs)

              Accepts an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.acceptSharedInvite

              +https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite

              def conversations_approveSharedInvite(self, *, invite_id: str, target_team: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10123,13 +10205,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs)

              Approves an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.approveSharedInvite

              +https://docs.slack.dev/reference/methods/conversations.approveSharedInvite

              def conversations_archive(self, *, channel: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10146,13 +10228,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.archive

              def conversations_canvases_create(self, *, channel_id: str, document_content: Dict[str, str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10170,13 +10252,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.canvases.create

              def conversations_close(self, *, channel: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10193,13 +10275,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs)

              Closes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.close

              +https://docs.slack.dev/reference/methods/conversations.close

              def conversations_create(self,
              *,
              name: str,
              is_private: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10218,13 +10300,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs)

              Initiates a public or private channel-based conversation -https://api.slack.com/methods/conversations.create

              +https://docs.slack.dev/reference/methods/conversations.create

              def conversations_declineSharedInvite(self, *, invite_id: str, target_team: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10242,13 +10324,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs)

              Declines a Slack Connect channel invite. -https://api.slack.com/methods/conversations.declineSharedInvite

              +https://docs.slack.dev/reference/methods/conversations.declineSharedInvite

              def conversations_externalInvitePermissions_set(self, *, action: str, channel: str, target_team: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10262,7 +10344,7 @@

              Methods

              self, *, action: str, channel: str, target_team: str, **kwargs ) -> Union[Future, SlackResponse]: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -10274,7 +10356,7 @@

              Methods

              return self.api_call("conversations.externalInvitePermissions.set", params=kwargs)

              Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. -https://api.slack.com/methods/conversations.externalInvitePermissions.set

              +https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set

              def conversations_history(self,
              *,
              channel: str,
              cursor: str | None = None,
              inclusive: bool | None = None,
              include_all_metadata: bool | None = None,
              latest: str | None = None,
              limit: int | None = None,
              oldest: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10297,7 +10379,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -10313,7 +10395,7 @@

              Methods

              return self.api_call("conversations.history", http_verb="GET", params=kwargs)

              Fetches a conversation's history of messages and events. -https://api.slack.com/methods/conversations.history

              +https://docs.slack.dev/reference/methods/conversations.history

              def conversations_info(self,
              *,
              channel: str,
              include_locale: bool | None = None,
              include_num_members: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10332,7 +10414,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -10344,7 +10426,7 @@

              Methods

              return self.api_call("conversations.info", http_verb="GET", params=kwargs)

              Retrieve information about a conversation. -https://api.slack.com/methods/conversations.info

              +https://docs.slack.dev/reference/methods/conversations.info

              def conversations_invite(self,
              *,
              channel: str,
              users: str | Sequence[str],
              force: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10363,7 +10445,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -10378,7 +10460,7 @@

              Methods

              return self.api_call("conversations.invite", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.invite

              def conversations_inviteShared(self,
              *,
              channel: str,
              emails: str | Sequence[str] | None = None,
              user_ids: str | Sequence[str] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10397,7 +10479,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -10413,7 +10495,7 @@

              Methods

              return self.api_call("conversations.inviteShared", http_verb="GET", params=kwargs)

              Sends an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.inviteShared

              +https://docs.slack.dev/reference/methods/conversations.inviteShared

              def conversations_join(self, *, channel: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10430,13 +10512,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs)

              Joins an existing conversation. -https://api.slack.com/methods/conversations.join

              +https://docs.slack.dev/reference/methods/conversations.join

              def conversations_kick(self, *, channel: str, user: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10454,13 +10536,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs)

              Removes a user from a conversation. -https://api.slack.com/methods/conversations.kick

              +https://docs.slack.dev/reference/methods/conversations.kick

              def conversations_leave(self, *, channel: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10477,13 +10559,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.leave

              def conversations_list(self,
              *,
              cursor: str | None = None,
              exclude_archived: bool | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              types: str | Sequence[str] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10504,7 +10586,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -10521,7 +10603,7 @@

              Methods

              return self.api_call("conversations.list", http_verb="GET", params=kwargs)

              Lists all channels in a Slack team. -https://api.slack.com/methods/conversations.list

              +https://docs.slack.dev/reference/methods/conversations.list

              def conversations_listConnectInvites(self,
              *,
              count: int | None = None,
              cursor: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10541,14 +10623,14 @@

              Methods

              ) -> Union[Future, SlackResponse]: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs)

              List shared channel invites that have been generated or received but have not yet been approved by all parties. -https://api.slack.com/methods/conversations.listConnectInvites

              +https://docs.slack.dev/reference/methods/conversations.listConnectInvites

              def conversations_mark(self, *, channel: str, ts: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10566,13 +10648,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs)

              Sets the read cursor in a channel. -https://api.slack.com/methods/conversations.mark

              +https://docs.slack.dev/reference/methods/conversations.mark

              def conversations_members(self, *, channel: str, cursor: str | None = None, limit: int | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10591,13 +10673,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs)

              Retrieve members of a conversation. -https://api.slack.com/methods/conversations.members

              +https://docs.slack.dev/reference/methods/conversations.members

              def conversations_open(self,
              *,
              channel: str | None = None,
              return_im: bool | None = None,
              users: str | Sequence[str] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10616,7 +10698,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -10628,7 +10710,7 @@

              Methods

              return self.api_call("conversations.open", params=kwargs)

              Opens or resumes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.open

              +https://docs.slack.dev/reference/methods/conversations.open

              def conversations_rename(self, *, channel: str, name: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10646,13 +10728,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.rename

              def conversations_replies(self,
              *,
              channel: str,
              ts: str,
              cursor: str | None = None,
              inclusive: bool | None = None,
              include_all_metadata: bool | None = None,
              latest: str | None = None,
              limit: int | None = None,
              oldest: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10676,7 +10758,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -10693,7 +10775,7 @@

              Methods

              return self.api_call("conversations.replies", http_verb="GET", params=kwargs)

              Retrieve a thread of messages posted to a conversation -https://api.slack.com/methods/conversations.replies

              +https://docs.slack.dev/reference/methods/conversations.replies

              def conversations_requestSharedInvite_approve(self,
              *,
              invite_id: str,
              channel_id: str | None = None,
              is_external_limited: str | None = None,
              message: Dict[str, Any] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10713,7 +10795,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -10727,7 +10809,7 @@

              Methods

              return self.api_call("conversations.requestSharedInvite.approve", params=kwargs)

              Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. -https://api.slack.com/methods/conversations.requestSharedInvite.approve

              +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve

              def conversations_requestSharedInvite_deny(self, *, invite_id: str, message: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10745,13 +10827,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs)

              Deny a request to invite an external user to a channel. -https://api.slack.com/methods/conversations.requestSharedInvite.deny

              +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny

              def conversations_requestSharedInvite_list(self,
              *,
              cursor: str | None = None,
              include_approved: bool | None = None,
              include_denied: bool | None = None,
              include_expired: bool | None = None,
              invite_ids: str | Sequence[str] | None = None,
              limit: int | None = None,
              user_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -10774,7 +10856,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -10794,7 +10876,7 @@

              Methods

              return self.api_call("conversations.requestSharedInvite.list", params=kwargs)

              Lists requests to add external users to channels with ability to filter. -https://api.slack.com/methods/conversations.requestSharedInvite.list

              +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list

              def conversations_setPurpose(self, *, channel: str, purpose: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10812,13 +10894,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs)

              Sets the purpose for a conversation. -https://api.slack.com/methods/conversations.setPurpose

              +https://docs.slack.dev/reference/methods/conversations.setPurpose

              def conversations_setTopic(self, *, channel: str, topic: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10836,13 +10918,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs)

              Sets the topic for a conversation. -https://api.slack.com/methods/conversations.setTopic

              +https://docs.slack.dev/reference/methods/conversations.setTopic

              def conversations_unarchive(self, *, channel: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10859,13 +10941,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs)
              +https://docs.slack.dev/reference/methods/conversations.unarchive

              def dialog_open(self, *, dialog: Dict[str, Any], trigger_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10883,7 +10965,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -10891,7 +10973,7 @@

              Methods

              return self.api_call("dialog.open", json=kwargs)

              Open a dialog with a user. -https://api.slack.com/methods/dialog.open

              +https://docs.slack.dev/reference/methods/dialog.open

              def dnd_endDnd(self, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10906,12 +10988,12 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs)

              Ends the current user's Do Not Disturb session immediately. -https://api.slack.com/methods/dnd.endDnd

              +https://docs.slack.dev/reference/methods/dnd.endDnd

              def dnd_endSnooze(self, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10926,12 +11008,12 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs)

              Ends the current user's snooze mode immediately. -https://api.slack.com/methods/dnd.endSnooze

              +https://docs.slack.dev/reference/methods/dnd.endSnooze

              def dnd_info(self, *, team_id: str | None = None, user: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10949,13 +11031,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs)

              Retrieves a user's current Do Not Disturb status. -https://api.slack.com/methods/dnd.info

              +https://docs.slack.dev/reference/methods/dnd.info

              def dnd_setSnooze(self, *, num_minutes: str | int, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10972,13 +11054,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs)

              Turns on Do Not Disturb mode for the current user, or changes its duration. -https://api.slack.com/methods/dnd.setSnooze

              +https://docs.slack.dev/reference/methods/dnd.setSnooze

              def dnd_teamInfo(self, users: str | Sequence[str], team_id: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -10995,7 +11077,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -11005,7 +11087,7 @@

              Methods

              return self.api_call("dnd.teamInfo", http_verb="GET", params=kwargs)

              Retrieves the Do Not Disturb status for users on a team. -https://api.slack.com/methods/dnd.teamInfo

              +https://docs.slack.dev/reference/methods/dnd.teamInfo

              def emoji_list(self, include_categories: bool | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -11021,13 +11103,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs)

              Lists custom emoji for a team. -https://api.slack.com/methods/emoji.list

              +https://docs.slack.dev/reference/methods/emoji.list

              def files_comments_delete(self, *, file: str, id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -11045,13 +11127,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs)

              Deletes an existing comment on a file. -https://api.slack.com/methods/files.comments.delete

              +https://docs.slack.dev/reference/methods/files.comments.delete

              def files_completeUploadExternal(self,
              *,
              files: List[Dict[str, str]],
              channel_id: str | None = None,
              channels: List[str] | None = None,
              initial_comment: str | None = None,
              thread_ts: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -11072,7 +11154,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -11088,7 +11170,7 @@

              Methods

              return self.api_call("files.completeUploadExternal", params=kwargs)

              Finishes an upload started with files.getUploadURLExternal. -https://api.slack.com/methods/files.completeUploadExternal

              +https://docs.slack.dev/reference/methods/files.completeUploadExternal

              def files_delete(self, *, file: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -11105,13 +11187,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/files.delete

              def files_getUploadURLExternal(self,
              *,
              filename: str,
              length: int,
              alt_txt: str | None = None,
              snippet_type: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -11131,7 +11213,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -11144,7 +11226,7 @@

              Methods

              return self.api_call("files.getUploadURLExternal", params=kwargs)

              Gets a URL for an edge external upload. -https://api.slack.com/methods/files.getUploadURLExternal

              +https://docs.slack.dev/reference/methods/files.getUploadURLExternal

              def files_info(self,
              *,
              file: str,
              count: int | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              page: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -11165,7 +11247,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -11179,7 +11261,7 @@

              Methods

              return self.api_call("files.info", http_verb="GET", params=kwargs)

              Gets information about a team file. -https://api.slack.com/methods/files.info

              +https://docs.slack.dev/reference/methods/files.info

              def files_list(self,
              *,
              channel: str | None = None,
              count: int | None = None,
              page: int | None = None,
              show_files_hidden_by_limit: bool | None = None,
              team_id: str | None = None,
              ts_from: str | None = None,
              ts_to: str | None = None,
              types: str | Sequence[str] | None = None,
              user: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -11204,7 +11286,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -11225,7 +11307,7 @@

              Methods

              return self.api_call("files.list", http_verb="GET", params=kwargs)

              Lists & filters team files. -https://api.slack.com/methods/files.list

              +https://docs.slack.dev/reference/methods/files.list

              def files_remote_add(self,
              *,
              external_id: str,
              external_url: str,
              title: str,
              filetype: str | None = None,
              indexable_file_contents: str | bytes | io.IOBase | None = None,
              preview_image: str | bytes | io.IOBase | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -11247,7 +11329,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -11274,7 +11356,7 @@

              Methods

              )

              Adds a file from a remote service. -https://api.slack.com/methods/files.remote.add

              +https://docs.slack.dev/reference/methods/files.remote.add

              def files_remote_info(self, *, external_id: str | None = None, file: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -11292,13 +11374,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs)

              Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.info

              +https://docs.slack.dev/reference/methods/files.remote.info

              def files_remote_list(self,
              *,
              channel: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              ts_from: str | None = None,
              ts_to: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -11319,7 +11401,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -11333,7 +11415,7 @@

              Methods

              return self.api_call("files.remote.list", http_verb="GET", params=kwargs)

              Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.list

              +https://docs.slack.dev/reference/methods/files.remote.list

              def files_remote_remove(self, *, external_id: str | None = None, file: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -11351,13 +11433,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs)
              +https://docs.slack.dev/reference/methods/files.remote.remove

              def files_remote_share(self,
              *,
              channels: str | Sequence[str],
              external_id: str | None = None,
              file: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -11376,7 +11458,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -11388,7 +11470,7 @@

              Methods

              return self.api_call("files.remote.share", http_verb="GET", params=kwargs)

              Share a remote file into a channel. -https://api.slack.com/methods/files.remote.share

              +https://docs.slack.dev/reference/methods/files.remote.share

              def files_remote_update(self,
              *,
              external_id: str | None = None,
              external_url: str | None = None,
              file: str | None = None,
              title: str | None = None,
              filetype: str | None = None,
              indexable_file_contents: str | None = None,
              preview_image: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -11411,7 +11493,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -11439,7 +11521,7 @@

              Methods

              )

              Updates an existing remote file. -https://api.slack.com/methods/files.remote.update

              +https://docs.slack.dev/reference/methods/files.remote.update

              def files_revokePublicURL(self, *, file: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -11456,13 +11538,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs)

              Revokes public/external sharing access for a file -https://api.slack.com/methods/files.revokePublicURL

              +https://docs.slack.dev/reference/methods/files.revokePublicURL

              def files_sharedPublicURL(self, *, file: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -11479,13 +11561,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs)

              Enables a file for public/external sharing. -https://api.slack.com/methods/files.sharedPublicURL

              +https://docs.slack.dev/reference/methods/files.sharedPublicURL

              def files_upload(self,
              *,
              file: str | bytes | io.IOBase | None = None,
              content: str | bytes | None = None,
              filename: str | None = None,
              filetype: str | None = None,
              initial_comment: str | None = None,
              thread_ts: str | None = None,
              title: str | None = None,
              channels: str | Sequence[str] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -11509,7 +11591,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -11542,7 +11624,7 @@

              Methods

              return self.api_call("files.upload", data=kwargs)

              Uploads or creates a file. -https://api.slack.com/methods/files.upload

              +https://docs.slack.dev/reference/methods/files.upload

              def files_upload_v2(self,
              *,
              filename: str | None = None,
              file: str | bytes | io.IOBase | os.PathLike | None = None,
              content: str | bytes | None = None,
              title: str | None = None,
              alt_txt: str | None = None,
              snippet_type: str | None = None,
              file_uploads: List[Dict[str, Any]] | None = None,
              channel: str | None = None,
              channels: List[str] | None = None,
              initial_comment: str | None = None,
              thread_ts: str | None = None,
              request_file_info: bool = True,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -11573,12 +11655,12 @@

              Methods

              ) -> Union[Future, SlackResponse]: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -11657,14 +11739,14 @@

              Methods

              This wrapper method provides an easy way to upload files using the following endpoints:

              @@ -11684,13 +11766,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs)

              Signal the failure to execute a function -https://api.slack.com/methods/functions.completeError

              +https://docs.slack.dev/reference/methods/functions.completeError

              def functions_completeSuccess(self, *, function_execution_id: str, outputs: Dict[str, Any], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -11708,13 +11790,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs)

              Signal the successful completion of a function -https://api.slack.com/methods/functions.completeSuccess

              +https://docs.slack.dev/reference/methods/functions.completeSuccess

              def groups_archive(self, *, channel: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -12190,7 +12272,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -12200,7 +12282,7 @@

              Methods

              return self.api_call("migration.exchange", http_verb="GET", params=kwargs)

              For Enterprise Grid workspaces, map local user IDs to global user IDs -https://api.slack.com/methods/migration.exchange

              +https://docs.slack.dev/reference/methods/migration.exchange

              def mpim_close(self, *, channel: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -12347,7 +12429,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12359,7 +12441,7 @@

              Methods

              )

              Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.access

              +https://docs.slack.dev/reference/methods/oauth.access

              def oauth_v2_access(self,
              *,
              client_id: str,
              client_secret: str,
              code: str | None = None,
              redirect_uri: str | None = None,
              grant_type: str | None = None,
              refresh_token: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -12385,7 +12467,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12402,7 +12484,7 @@

              Methods

              )

              Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.v2.access

              +https://docs.slack.dev/reference/methods/oauth.v2.access

              def oauth_v2_exchange(self, *, token: str, client_id: str, client_secret: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -12421,13 +12503,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs)

              Exchanges a legacy access token for a new expiring access token and refresh token -https://api.slack.com/methods/oauth.v2.exchange

              +https://docs.slack.dev/reference/methods/oauth.v2.exchange

              def openid_connect_token(self,
              client_id: str,
              client_secret: str,
              code: str | None = None,
              redirect_uri: str | None = None,
              grant_type: str | None = None,
              refresh_token: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -12448,7 +12530,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12465,7 +12547,7 @@

              Methods

              )

              Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. -https://api.slack.com/methods/openid.connect.token

              +https://docs.slack.dev/reference/methods/openid.connect.token

              def openid_connect_userInfo(self, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -12480,12 +12562,12 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs)

              Get the identity of a user who has authorized Sign in with Slack. -https://api.slack.com/methods/openid.connect.userInfo

              +https://docs.slack.dev/reference/methods/openid.connect.userInfo

              def pins_add(self, *, channel: str, timestamp: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -12503,13 +12585,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs)

              Pins an item to a channel. -https://api.slack.com/methods/pins.add

              +https://docs.slack.dev/reference/methods/pins.add

              def pins_list(self, *, channel: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -12526,13 +12608,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs)

              Lists items pinned to a channel. -https://api.slack.com/methods/pins.list

              +https://docs.slack.dev/reference/methods/pins.list

              def pins_remove(self, *, channel: str, timestamp: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -12550,13 +12632,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs)

              Un-pins an item from a channel. -https://api.slack.com/methods/pins.remove

              +https://docs.slack.dev/reference/methods/pins.remove

              def reactions_add(self, *, channel: str, name: str, timestamp: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -12575,13 +12657,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs)

              Adds a reaction to an item. -https://api.slack.com/methods/reactions.add

              +https://docs.slack.dev/reference/methods/reactions.add

              def reactions_get(self,
              *,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              full: bool | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -12602,7 +12684,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -12616,7 +12698,7 @@

              Methods

              return self.api_call("reactions.get", http_verb="GET", params=kwargs)

              Gets reactions for an item. -https://api.slack.com/methods/reactions.get

              +https://docs.slack.dev/reference/methods/reactions.get

              def reactions_list(self,
              *,
              count: int | None = None,
              cursor: str | None = None,
              full: bool | None = None,
              limit: int | None = None,
              page: int | None = None,
              team_id: str | None = None,
              user: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -12639,7 +12721,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -12655,7 +12737,7 @@

              Methods

              return self.api_call("reactions.list", http_verb="GET", params=kwargs)

              Lists reactions made by a user. -https://api.slack.com/methods/reactions.list

              +https://docs.slack.dev/reference/methods/reactions.list

              def reactions_remove(self,
              *,
              name: str,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -12676,7 +12758,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -12690,7 +12772,7 @@

              Methods

              return self.api_call("reactions.remove", params=kwargs)

              Removes a reaction from an item. -https://api.slack.com/methods/reactions.remove

              +https://docs.slack.dev/reference/methods/reactions.remove

              def reminders_add(self,
              *,
              text: str,
              time: str,
              team_id: str | None = None,
              user: str | None = None,
              recurrence: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -12711,7 +12793,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -12725,7 +12807,7 @@

              Methods

              return self.api_call("reminders.add", params=kwargs)
              +https://docs.slack.dev/reference/methods/reminders.add

              def reminders_complete(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -12743,13 +12825,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs)
              +https://docs.slack.dev/reference/methods/reminders.complete

              def reminders_delete(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -12767,13 +12849,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs)
              +https://docs.slack.dev/reference/methods/reminders.delete

              def reminders_info(self, *, reminder: str, team_id: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -12791,13 +12873,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs)

              Gets information about a reminder. -https://api.slack.com/methods/reminders.info

              +https://docs.slack.dev/reference/methods/reminders.info

              def reminders_list(self, *, team_id: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -12814,13 +12896,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs)

              Lists all reminders created by or for a given user. -https://api.slack.com/methods/reminders.list

              +https://docs.slack.dev/reference/methods/reminders.list

              def rtm_connect(self,
              *,
              batch_presence_aware: bool | None = None,
              presence_sub: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -12838,13 +12920,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs)

              Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.connect

              +https://docs.slack.dev/reference/methods/rtm.connect

              def rtm_start(self,
              *,
              batch_presence_aware: bool | None = None,
              include_locale: bool | None = None,
              mpim_aware: bool | None = None,
              no_latest: bool | None = None,
              no_unreads: bool | None = None,
              presence_sub: bool | None = None,
              simple_latest: bool | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -12867,7 +12949,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -12883,7 +12965,7 @@

              Methods

              return self.api_call("rtm.start", http_verb="GET", params=kwargs)

              Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.start

              +https://docs.slack.dev/reference/methods/rtm.start

              def search_all(self,
              *,
              query: str,
              count: int | None = None,
              highlight: bool | None = None,
              page: int | None = None,
              sort: str | None = None,
              sort_dir: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -12906,7 +12988,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -12922,7 +13004,7 @@

              Methods

              return self.api_call("search.all", http_verb="GET", params=kwargs)

              Searches for messages and files matching a query. -https://api.slack.com/methods/search.all

              +https://docs.slack.dev/reference/methods/search.all

              def search_files(self,
              *,
              query: str,
              count: int | None = None,
              highlight: bool | None = None,
              page: int | None = None,
              sort: str | None = None,
              sort_dir: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -12945,7 +13027,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -12961,7 +13043,7 @@

              Methods

              return self.api_call("search.files", http_verb="GET", params=kwargs)

              Searches for files matching a query. -https://api.slack.com/methods/search.files

              +https://docs.slack.dev/reference/methods/search.files

              def search_messages(self,
              *,
              query: str,
              count: int | None = None,
              cursor: str | None = None,
              highlight: bool | None = None,
              page: int | None = None,
              sort: str | None = None,
              sort_dir: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -12985,7 +13067,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -13002,7 +13084,7 @@

              Methods

              return self.api_call("search.messages", http_verb="GET", params=kwargs)

              Searches for messages matching a query. -https://api.slack.com/methods/search.messages

              +https://docs.slack.dev/reference/methods/search.messages

              def stars_add(self,
              *,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13022,7 +13104,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -13035,7 +13117,7 @@

              Methods

              return self.api_call("stars.add", params=kwargs)
              +https://docs.slack.dev/reference/methods/stars.add

              def stars_list(self,
              *,
              count: int | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              page: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13056,7 +13138,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -13070,7 +13152,7 @@

              Methods

              return self.api_call("stars.list", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/stars.list

              def stars_remove(self,
              *,
              channel: str | None = None,
              file: str | None = None,
              file_comment: str | None = None,
              timestamp: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13090,7 +13172,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -13103,7 +13185,7 @@

              Methods

              return self.api_call("stars.remove", params=kwargs)

              Removes a star from an item. -https://api.slack.com/methods/stars.remove

              +https://docs.slack.dev/reference/methods/stars.remove

              def team_accessLogs(self,
              *,
              before: str | int | None = None,
              count: str | int | None = None,
              page: str | int | None = None,
              team_id: str | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13125,7 +13207,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -13140,7 +13222,7 @@

              Methods

              return self.api_call("team.accessLogs", http_verb="GET", params=kwargs)

              Gets the access logs for the current team. -https://api.slack.com/methods/team.accessLogs

              +https://docs.slack.dev/reference/methods/team.accessLogs

              def team_billableInfo(self, *, team_id: str | None = None, user: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13158,13 +13240,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs)

              Gets billable users information for the current team. -https://api.slack.com/methods/team.billableInfo

              +https://docs.slack.dev/reference/methods/team.billableInfo

              def team_billing_info(self, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13179,12 +13261,12 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs)

              Reads a workspace's billing plan information. -https://api.slack.com/methods/team.billing.info

              +https://docs.slack.dev/reference/methods/team.billing.info

              def team_externalTeams_disconnect(self, *, target_team: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13201,7 +13283,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -13211,7 +13293,7 @@

              Methods

              return self.api_call("team.externalTeams.disconnect", params=kwargs)
              +https://docs.slack.dev/reference/methods/team.externalTeams.disconnect

              def team_externalTeams_list(self,
              *,
              connection_status_filter: str | None = None,
              slack_connect_pref_filter: Sequence[str] | None = None,
              sort_direction: str | None = None,
              sort_field: str | None = None,
              workspace_filter: Sequence[str] | None = None,
              cursor: str | None = None,
              limit: int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13234,7 +13316,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -13258,7 +13340,7 @@

              Methods

              return self.api_call("team.externalTeams.list", http_verb="GET", params=kwargs)

              Returns a list of all the external teams connected and details about the connection. -https://api.slack.com/methods/team.externalTeams.list

              +https://docs.slack.dev/reference/methods/team.externalTeams.list

              def team_info(self, *, team: str | None = None, domain: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13276,13 +13358,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs)

              Gets information about the current team. -https://api.slack.com/methods/team.info

              +https://docs.slack.dev/reference/methods/team.info

              def team_integrationLogs(self,
              *,
              app_id: str | None = None,
              change_type: str | None = None,
              count: str | int | None = None,
              page: str | int | None = None,
              service_id: str | None = None,
              team_id: str | None = None,
              user: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13305,7 +13387,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -13321,7 +13403,7 @@

              Methods

              return self.api_call("team.integrationLogs", http_verb="GET", params=kwargs)

              Gets the integration logs for the current team. -https://api.slack.com/methods/team.integrationLogs

              +https://docs.slack.dev/reference/methods/team.integrationLogs

              def team_preferences_list(self, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13336,12 +13418,12 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs)

              Retrieve a list of a workspace's team preferences. -https://api.slack.com/methods/team.preferences.list

              +https://docs.slack.dev/reference/methods/team.preferences.list

              def team_profile_get(self, *, visibility: str | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13358,13 +13440,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/team.profile.get

              def tooling_tokens_rotate(self, *, refresh_token: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13381,13 +13463,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs)

              Exchanges a refresh token for a new app configuration token -https://api.slack.com/methods/tooling.tokens.rotate

              +https://docs.slack.dev/reference/methods/tooling.tokens.rotate

              def usergroups_create(self,
              *,
              name: str,
              channels: str | Sequence[str] | None = None,
              description: str | None = None,
              handle: str | None = None,
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13409,7 +13491,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -13427,7 +13509,7 @@

              Methods

              return self.api_call("usergroups.create", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.create

              def usergroups_disable(self,
              *,
              usergroup: str,
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13446,13 +13528,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs)

              Disable an existing User Group -https://api.slack.com/methods/usergroups.disable

              +https://docs.slack.dev/reference/methods/usergroups.disable

              def usergroups_enable(self,
              *,
              usergroup: str,
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13471,13 +13553,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.enable

              def usergroups_list(self,
              *,
              include_count: bool | None = None,
              include_disabled: bool | None = None,
              include_users: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13497,7 +13579,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -13510,7 +13592,7 @@

              Methods

              return self.api_call("usergroups.list", http_verb="GET", params=kwargs)

              List all User Groups for a team -https://api.slack.com/methods/usergroups.list

              +https://docs.slack.dev/reference/methods/usergroups.list

              def usergroups_update(self,
              *,
              usergroup: str,
              channels: str | Sequence[str] | None = None,
              description: str | None = None,
              handle: str | None = None,
              include_count: bool | None = None,
              name: str | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13533,7 +13615,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -13552,7 +13634,7 @@

              Methods

              return self.api_call("usergroups.update", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.update

              def usergroups_users_list(self,
              *,
              usergroup: str,
              include_disabled: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13571,7 +13653,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -13583,7 +13665,7 @@

              Methods

              return self.api_call("usergroups.users.list", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/usergroups.users.list

              def usergroups_users_update(self,
              *,
              usergroup: str,
              users: str | Sequence[str],
              include_count: bool | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13603,7 +13685,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -13619,7 +13701,7 @@

              Methods

              return self.api_call("usergroups.users.update", params=kwargs)

              Update the list of users for a User Group -https://api.slack.com/methods/usergroups.users.update

              +https://docs.slack.dev/reference/methods/usergroups.users.update

              def users_conversations(self,
              *,
              cursor: str | None = None,
              exclude_archived: bool | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              types: str | Sequence[str] | None = None,
              user: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13641,7 +13723,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -13659,7 +13741,7 @@

              Methods

              return self.api_call("users.conversations", http_verb="GET", params=kwargs)

              List conversations the calling user may access. -https://api.slack.com/methods/users.conversations

              +https://docs.slack.dev/reference/methods/users.conversations

              def users_deletePhoto(self, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13674,12 +13756,12 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/users.deletePhoto

              def users_discoverableContacts_lookup(self, email: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13695,13 +13777,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs)

              Lookup an email address to see if someone is on Slack -https://api.slack.com/methods/users.discoverableContacts.lookup

              +https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup

              def users_getPresence(self, *, user: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13718,13 +13800,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs)

              Gets user presence information. -https://api.slack.com/methods/users.getPresence

              +https://docs.slack.dev/reference/methods/users.getPresence

              def users_identity(self, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13739,12 +13821,12 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs)
              +https://docs.slack.dev/reference/methods/users.identity

              def users_info(self, *, user: str, include_locale: bool | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13762,13 +13844,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs)

              Gets information about a user. -https://api.slack.com/methods/users.info

              +https://docs.slack.dev/reference/methods/users.info

              def users_list(self,
              *,
              cursor: str | None = None,
              include_locale: bool | None = None,
              limit: int | None = None,
              team_id: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13788,7 +13870,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -13801,7 +13883,7 @@

              Methods

              return self.api_call("users.list", http_verb="GET", params=kwargs)

              Lists all users in a Slack team. -https://api.slack.com/methods/users.list

              +https://docs.slack.dev/reference/methods/users.list

              def users_lookupByEmail(self, *, email: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13818,13 +13900,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs)

              Find a user with an email address. -https://api.slack.com/methods/users.lookupByEmail

              +https://docs.slack.dev/reference/methods/users.lookupByEmail

              def users_profile_get(self, *, user: str | None = None, include_labels: bool | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13842,13 +13924,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs)

              Retrieves a user's profile information. -https://api.slack.com/methods/users.profile.get

              +https://docs.slack.dev/reference/methods/users.profile.get

              def users_profile_set(self,
              *,
              name: str | None = None,
              value: str | None = None,
              user: str | None = None,
              profile: Dict | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13868,7 +13950,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -13883,7 +13965,7 @@

              Methods

              return self.api_call("users.profile.set", json=kwargs)

              Set the profile information for a user. -https://api.slack.com/methods/users.profile.set

              +https://docs.slack.dev/reference/methods/users.profile.set

              def users_setPhoto(self,
              *,
              image: str | io.IOBase,
              crop_w: str | int | None = None,
              crop_x: str | int | None = None,
              crop_y: str | int | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13903,13 +13985,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs)
              +https://docs.slack.dev/reference/methods/users.setPhoto

              def users_setPresence(self, *, presence: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -13926,13 +14008,13 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs)
              +https://docs.slack.dev/reference/methods/users.setPresence

              def views_open(self,
              *,
              trigger_id: str | None = None,
              interactivity_pointer: str | None = None,
              view: dict | View,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13951,8 +14033,8 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -13964,8 +14046,8 @@

              Methods

              return self.api_call("views.open", json=kwargs)
              +https://docs.slack.dev/reference/methods/views.open +See https://docs.slack.dev/surfaces/modals/ for details.

              def views_publish(self,
              *,
              user_id: str,
              view: dict | View,
              hash: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -13985,8 +14067,8 @@

              Methods

              ) -> Union[Future, SlackResponse]: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -13999,8 +14081,8 @@

              Methods

              Publish a static view for a User. Create or update the view that comprises an -app's Home tab (https://api.slack.com/surfaces/tabs) -https://api.slack.com/methods/views.publish

              +app's Home tab (https://docs.slack.dev/surfaces/app-home/) +https://docs.slack.dev/reference/methods/views.publish

              def views_push(self,
              *,
              trigger_id: str | None = None,
              interactivity_pointer: str | None = None,
              view: dict | View,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -14022,9 +14104,9 @@

              Methods

              Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -14039,9 +14121,9 @@

              Methods

              Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. -Read the modals documentation (https://api.slack.com/surfaces/modals) +Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. -https://api.slack.com/methods/views.push

              +https://docs.slack.dev/reference/methods/views.push

              def views_update(self,
              *,
              view: dict | View,
              external_id: str | None = None,
              view_id: str | None = None,
              hash: str | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -14063,9 +14145,9 @@

              Methods

              """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -14085,9 +14167,119 @@

              Methods

              Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. -See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) +See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. -https://api.slack.com/methods/views.update

              +https://docs.slack.dev/reference/methods/views.update

              + +
              +
              +
              + +Expand source code + +
              def workflows_featured_add(
              +    self,
              +    *,
              +    channel_id: str,
              +    trigger_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> Union[Future, SlackResponse]:
              +    """Add featured workflows to a channel.
              +    https://docs.slack.dev/reference/methods/workflows.featured.add
              +    """
              +    kwargs.update({"channel_id": channel_id})
              +    if isinstance(trigger_ids, (list, tuple)):
              +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
              +    else:
              +        kwargs.update({"trigger_ids": trigger_ids})
              +    return self.api_call("workflows.featured.add", params=kwargs)
              +
              + +
              + +
              +
              + +Expand source code + +
              def workflows_featured_list(
              +    self,
              +    *,
              +    channel_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> Union[Future, SlackResponse]:
              +    """List the featured workflows for specified channels.
              +    https://docs.slack.dev/reference/methods/workflows.featured.list
              +    """
              +    if isinstance(channel_ids, (list, tuple)):
              +        kwargs.update({"channel_ids": ",".join(channel_ids)})
              +    else:
              +        kwargs.update({"channel_ids": channel_ids})
              +    return self.api_call("workflows.featured.list", params=kwargs)
              +
              +

              List the featured workflows for specified channels. +https://docs.slack.dev/reference/methods/workflows.featured.list

              +
              + +
              +
              + +Expand source code + +
              def workflows_featured_remove(
              +    self,
              +    *,
              +    channel_id: str,
              +    trigger_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> Union[Future, SlackResponse]:
              +    """Remove featured workflows from a channel.
              +    https://docs.slack.dev/reference/methods/workflows.featured.remove
              +    """
              +    kwargs.update({"channel_id": channel_id})
              +    if isinstance(trigger_ids, (list, tuple)):
              +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
              +    else:
              +        kwargs.update({"trigger_ids": trigger_ids})
              +    return self.api_call("workflows.featured.remove", params=kwargs)
              +
              + +
              + +
              +
              + +Expand source code + +
              def workflows_featured_set(
              +    self,
              +    *,
              +    channel_id: str,
              +    trigger_ids: Union[str, Sequence[str]],
              +    **kwargs,
              +) -> Union[Future, SlackResponse]:
              +    """Set featured workflows for a channel.
              +    https://docs.slack.dev/reference/methods/workflows.featured.set
              +    """
              +    kwargs.update({"channel_id": channel_id})
              +    if isinstance(trigger_ids, (list, tuple)):
              +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
              +    else:
              +        kwargs.update({"trigger_ids": trigger_ids})
              +    return self.api_call("workflows.featured.set", params=kwargs)
              +
              +
              def workflows_stepCompleted(self, *, workflow_step_execute_id: str, outputs: dict | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -14105,7 +14297,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -14115,7 +14307,7 @@

              Methods

              return self.api_call("workflows.stepCompleted", json=kwargs)

              Indicate a successful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepCompleted

              +https://docs.slack.dev/reference/methods/workflows.stepCompleted

              def workflows_stepFailed(self, *, workflow_step_execute_id: str, error: Dict[str, str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse @@ -14133,7 +14325,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -14146,7 +14338,7 @@

              Methods

              return self.api_call("workflows.stepFailed", json=kwargs)

              Indicate an unsuccessful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepFailed

              +https://docs.slack.dev/reference/methods/workflows.stepFailed

              def workflows_updateStep(self,
              *,
              workflow_step_edit_id: str,
              inputs: Dict[str, Any] | None = None,
              outputs: List[Dict[str, str]] | None = None,
              **kwargs) ‑> _asyncio.Future | LegacySlackResponse
              @@ -14165,7 +14357,7 @@

              Methods

              **kwargs, ) -> Union[Future, SlackResponse]: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -14177,7 +14369,7 @@

              Methods

              return self.api_call("workflows.updateStep", json=kwargs)

              Update the configuration for a workflow extension step. -https://api.slack.com/methods/workflows.updateStep

              +https://docs.slack.dev/reference/methods/workflows.updateStep

              Inherited members

              @@ -14510,6 +14702,10 @@

              views_publish
            • views_push
            • views_update
            • +
            • workflows_featured_add
            • +
            • workflows_featured_list
            • +
            • workflows_featured_remove
            • +
            • workflows_featured_set
            • workflows_stepCompleted
            • workflows_stepFailed
            • workflows_updateStep
            • diff --git a/docs/reference/webhook/async_client.html b/docs/reference/webhook/async_client.html index 9c1a83fd0..15c7e4a45 100644 --- a/docs/reference/webhook/async_client.html +++ b/docs/reference/webhook/async_client.html @@ -84,7 +84,7 @@

              Classes

              ): """API client for Incoming Webhooks and `response_url` - https://api.slack.com/messaging/webhooks + https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/ Args: url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`) @@ -302,7 +302,7 @@

              Classes

              return resp

              API client for Incoming Webhooks and response_url

              -

              https://api.slack.com/messaging/webhooks

              +

              https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/

              Args

              url
              diff --git a/docs/reference/webhook/client.html b/docs/reference/webhook/client.html index 6400d63d6..aebec5a3f 100644 --- a/docs/reference/webhook/client.html +++ b/docs/reference/webhook/client.html @@ -78,7 +78,7 @@

              Classes

              ): """API client for Incoming Webhooks and `response_url` - https://api.slack.com/messaging/webhooks + https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/ Args: url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`) @@ -297,19 +297,19 @@

              Classes

              http_resp = opener.open(req, timeout=self.timeout) else: http_resp = urlopen(req, context=self.ssl, timeout=self.timeout) - charset: str = http_resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] - response_body: str = http_resp.read().decode(charset) # type: ignore[union-attr] + charset: str = http_resp.headers.get_content_charset() or "utf-8" + response_body: str = http_resp.read().decode(charset) resp = WebhookResponse( url=url, - status_code=http_resp.status, # type: ignore[union-attr] + status_code=http_resp.status, body=response_body, - headers=http_resp.headers, # type: ignore[arg-type, union-attr] + headers=http_resp.headers, # type: ignore[arg-type] ) _debug_log_response(self.logger, resp) return resp

              API client for Incoming Webhooks and response_url

              -

              https://api.slack.com/messaging/webhooks

              +

              https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/

              Args

              url
              diff --git a/docs/reference/webhook/index.html b/docs/reference/webhook/index.html index 31f7a7e40..51c387ef4 100644 --- a/docs/reference/webhook/index.html +++ b/docs/reference/webhook/index.html @@ -100,7 +100,7 @@

              Classes

              ): """API client for Incoming Webhooks and `response_url` - https://api.slack.com/messaging/webhooks + https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/ Args: url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`) @@ -319,19 +319,19 @@

              Classes

              http_resp = opener.open(req, timeout=self.timeout) else: http_resp = urlopen(req, context=self.ssl, timeout=self.timeout) - charset: str = http_resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] - response_body: str = http_resp.read().decode(charset) # type: ignore[union-attr] + charset: str = http_resp.headers.get_content_charset() or "utf-8" + response_body: str = http_resp.read().decode(charset) resp = WebhookResponse( url=url, - status_code=http_resp.status, # type: ignore[union-attr] + status_code=http_resp.status, body=response_body, - headers=http_resp.headers, # type: ignore[arg-type, union-attr] + headers=http_resp.headers, # type: ignore[arg-type] ) _debug_log_response(self.logger, resp) return resp

              API client for Incoming Webhooks and response_url

              -

              https://api.slack.com/messaging/webhooks

              +

              https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/

              Args

              url
              diff --git a/integration_tests/web/test_conversations_connect.py b/integration_tests/web/test_conversations_connect.py index 0e5271c8f..1d988946c 100644 --- a/integration_tests/web/test_conversations_connect.py +++ b/integration_tests/web/test_conversations_connect.py @@ -22,7 +22,7 @@ class TestWebClient(unittest.TestCase): one for the inviting workspace(list and send invites) another for the recipient workspace (accept and approve) sent invites. Before being able to run this test suite, we also need to have manually created a slack connect shared channel and added - these two bots as members first. See: https://api.slack.com/apis/connect + these two bots as members first. See: https://docs.slack.dev/apis/slack-connect/ In addition to conversations.connect:* scopes, your sender bot token should have channels:manage scopes. """ diff --git a/pyproject.toml b/pyproject.toml index cb2e28d11..1a1c5761b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ classifiers = [ [project.urls] -Documentation = "https://slack.dev/python-slack-sdk/" +Documentation = "https://docs.slack.dev/tools/python-slack-sdk/" [tool.setuptools.packages.find] include = ["slack*", "slack_sdk*"] diff --git a/slack/deprecation.py b/slack/deprecation.py index 6352e66a7..8c5e8207b 100644 --- a/slack/deprecation.py +++ b/slack/deprecation.py @@ -9,6 +9,6 @@ def show_message(old: str, new: str) -> None: message = ( f"{old} package is deprecated. Please use {new} package instead. " - "For more info, go to https://slack.dev/python-slack-sdk/v3-migration/" + "For more info, go to https://docs.slack.dev/tools/python-slack-sdk/v3-migration/" ) warnings.warn(message) diff --git a/slack/signature/verifier.py b/slack/signature/verifier.py index f5923ced8..da9c6ef5e 100644 --- a/slack/signature/verifier.py +++ b/slack/signature/verifier.py @@ -17,7 +17,7 @@ def __init__(self, signing_secret: str, clock: Clock = Clock()): Slack signs its requests using a secret that's unique to your app. With the help of signing secrets, your app can more confidently verify whether requests from us are authentic. - https://api.slack.com/authentication/verifying-requests-from-slack + https://docs.slack.dev/authentication/verifying-requests-from-slack/ """ self.signing_secret = signing_secret self.clock = clock diff --git a/slack/web/base_client.py b/slack/web/base_client.py index dc52a9915..28f597411 100644 --- a/slack/web/base_client.py +++ b/slack/web/base_client.py @@ -472,7 +472,7 @@ def validate_slack_signature(*, signing_secret: str, data: str, timestamp: str, header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/ Args: signing_secret: Your application's signing secret, available in the diff --git a/slack/web/deprecation.py b/slack/web/deprecation.py index 5ce5f067e..059bf149f 100644 --- a/slack/web/deprecation.py +++ b/slack/web/deprecation.py @@ -1,7 +1,7 @@ import os import warnings -# https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api +# https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ deprecated_method_prefixes_2020_01 = [ "channels.", "groups.", @@ -25,6 +25,6 @@ def show_2020_01_deprecation(method_name: str): message = ( f"{method_name} is deprecated. Please use the Conversations API instead. " "For more info, go to " - "https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api" + "https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/" ) warnings.warn(message) diff --git a/slack_sdk/__init__.py b/slack_sdk/__init__.py index cb928798e..3adab865a 100644 --- a/slack_sdk/__init__.py +++ b/slack_sdk/__init__.py @@ -1,5 +1,5 @@ """ -* The SDK website: https://slack.dev/python-slack-sdk/ +* The SDK website: https://docs.slack.dev/tools/python-slack-sdk * PyPI package: https://pypi.org/project/slack-sdk/ Here is the list of key modules in this SDK: diff --git a/slack_sdk/audit_logs/__init__.py b/slack_sdk/audit_logs/__init__.py index 0460ad2eb..26a3b30d6 100644 --- a/slack_sdk/audit_logs/__init__.py +++ b/slack_sdk/audit_logs/__init__.py @@ -1,6 +1,6 @@ """Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization. -Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details. """ from .v1.client import AuditLogsClient from .v1.response import AuditLogsResponse diff --git a/slack_sdk/audit_logs/v1/__init__.py b/slack_sdk/audit_logs/v1/__init__.py index 24677fe37..9d03c76ce 100644 --- a/slack_sdk/audit_logs/v1/__init__.py +++ b/slack_sdk/audit_logs/v1/__init__.py @@ -1,4 +1,4 @@ """Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization. -Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details. """ diff --git a/slack_sdk/audit_logs/v1/async_client.py b/slack_sdk/audit_logs/v1/async_client.py index 24e22ec6a..7de8fd5b2 100644 --- a/slack_sdk/audit_logs/v1/async_client.py +++ b/slack_sdk/audit_logs/v1/async_client.py @@ -1,6 +1,6 @@ """Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization. -Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details. """ import json @@ -59,7 +59,7 @@ def __init__( retry_handlers: Optional[List[AsyncRetryHandler]] = None, ): """API client for Audit Logs API - See https://api.slack.com/admins/audit-logs for more details + See https://docs.slack.dev/admins/audit-logs-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` diff --git a/slack_sdk/audit_logs/v1/client.py b/slack_sdk/audit_logs/v1/client.py index b62bf72df..704b872fa 100644 --- a/slack_sdk/audit_logs/v1/client.py +++ b/slack_sdk/audit_logs/v1/client.py @@ -1,6 +1,6 @@ """Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization. -Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details. """ import json @@ -54,7 +54,7 @@ def __init__( retry_handlers: Optional[List[RetryHandler]] = None, ): """API client for Audit Logs API - See https://api.slack.com/admins/audit-logs for more details + See https://docs.slack.dev/admins/audit-logs-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` diff --git a/slack_sdk/models/attachments/__init__.py b/slack_sdk/models/attachments/__init__.py index e516ad35b..85695cfb1 100644 --- a/slack_sdk/models/attachments/__init__.py +++ b/slack_sdk/models/attachments/__init__.py @@ -19,8 +19,8 @@ class Action(JsonObject): """Action in attachments - https://api.slack.com/messaging/composing/layouts#attachments - https://api.slack.com/legacy/interactive-message-field-guide#message_action_fields + https://docs.slack.dev/messaging/formatting-message-text/#rich-layouts + https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#message_action_fields """ attributes = {"name", "text", "url"} @@ -66,7 +66,7 @@ def __init__( ): """Simple button for use inside attachments - https://api.slack.com/legacy/message-buttons + https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons/ Args: name: Name this specific action. The name will be returned to your @@ -108,7 +108,7 @@ class ActionLinkButton(Action): def __init__(self, *, text: str, url: str): """A simple interactive button that just opens a URL - https://api.slack.com/messaging/composing/layouts#attachments + https://docs.slack.dev/messaging/formatting-message-text/#rich-layouts Args: text: text to display on the button, eg 'Click Me!" @@ -150,7 +150,7 @@ class ActionUserSelector(AbstractActionSelector): def __init__(self, name: str, text: str, selected_user: Optional[Option] = None): """Automatically populate the selector with a list of users in the workspace. - https://api.slack.com/legacy/message-menus#allow_users_to_select_from_a_list_of_members + https://docs.slack.dev/legacy/legacy-messaging/legacy-adding-menus-to-messages/#menu_team_members Args: name: Name this specific action. The name will be returned to your @@ -172,7 +172,7 @@ def __init__(self, name: str, text: str, selected_channel: Optional[Option] = No Automatically populate the selector with a list of public channels in the workspace. - https://api.slack.com/legacy/message-menus#let_users_choose_one_of_their_workspace_s_channels + https://docs.slack.dev/legacy/legacy-messaging/legacy-adding-menus-to-messages/#menu_channels Args: name: Name this specific action. The name will be returned to your @@ -194,7 +194,7 @@ def __init__(self, name: str, text: str, selected_conversation: Optional[Option] Automatically populate the selector with a list of conversations they have in the workspace. - https://api.slack.com/legacy/message-menus#let_users_choose_one_of_their_conversations + https://docs.slack.dev/legacy/legacy-messaging/legacy-adding-menus-to-messages/#menu_conversations Args: name: Name this specific action. The name will be returned to your @@ -226,7 +226,7 @@ def __init__( """ Populate a message select menu from your own application dynamically. - https://api.slack.com/legacy/message-menus#populate_message_menus_dynamically + https://docs.slack.dev/legacy/legacy-messaging/legacy-adding-menus-to-messages/#menu_dynamic Args: name: Name this specific action. The name will be returned to your @@ -312,7 +312,7 @@ def __init__( A supplemental object that will display after the rest of the message. Considered legacy - recommended replacement is to use message blocks instead. - https://api.slack.com/reference/messaging/attachments#fields + https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments#fields Args: text: The main body text of the attachment. It can be formatted as @@ -444,7 +444,7 @@ def __init__( A bridge between legacy attachments and Block Kit formatting - pass a list of Block objects directly to this attachment. - https://api.slack.com/reference/messaging/attachments#fields + https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments#fields Args: blocks: a sequence of Block objects @@ -501,8 +501,8 @@ def __init__( An Attachment, but designed to contain interactive Actions Considered legacy - recommended replacement is to use message blocks instead. - https://api.slack.com/legacy/interactive-message-field-guide#attachment_fields - https://api.slack.com/reference/messaging/attachments#fields + https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#attachment_fields + https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments#fields Args: actions: A collection of Action objects to include in the attachment. diff --git a/slack_sdk/models/blocks/__init__.py b/slack_sdk/models/blocks/__init__.py index 455d28d5c..ecaa2e996 100644 --- a/slack_sdk/models/blocks/__init__.py +++ b/slack_sdk/models/blocks/__init__.py @@ -2,8 +2,8 @@ To learn more about Block Kit, please check the following resources and tools: -* https://api.slack.com/block-kit -* https://api.slack.com/reference/block-kit/blocks +* https://docs.slack.dev/block-kit/ +* https://docs.slack.dev/reference/block-kit/blocks * https://app.slack.com/block-kit-builder """ from .basic_components import ButtonStyles diff --git a/slack_sdk/models/blocks/basic_components.py b/slack_sdk/models/blocks/basic_components.py index d6a1aed97..3570656bc 100644 --- a/slack_sdk/models/blocks/basic_components.py +++ b/slack_sdk/models/blocks/basic_components.py @@ -85,7 +85,7 @@ def attributes(self) -> Set[str]: # type: ignore[override] def __init__(self, *, text: str, emoji: Optional[bool] = None): """A plain text object, meaning markdown characters will not be parsed as formatting information. - https://api.slack.com/reference/block-kit/composition-objects#text + https://docs.slack.dev/reference/block-kit/composition-objects/text-object Args: text (required): The text for the block. This field accepts any of the standard text formatting markup @@ -118,7 +118,7 @@ def attributes(self) -> Set[str]: # type: ignore[override] def __init__(self, *, text: str, verbatim: Optional[bool] = None): """A Markdown text object, meaning markdown characters will be parsed as formatting information. - https://api.slack.com/reference/block-kit/composition-objects#text + https://docs.slack.dev/reference/block-kit/composition-objects/text-object Args: text (required): The text for the block. This field accepts any of the standard text formatting markup @@ -188,13 +188,13 @@ def __init__( (StaticDialogSelectElement) Blocks: - https://api.slack.com/reference/block-kit/composition-objects#option + https://docs.slack.dev/reference/block-kit/composition-objects/option-object Dialogs: - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements Legacy interactive attachments: - https://api.slack.com/legacy/interactive-message-field-guide#option_fields + https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#option_fields Args: label: A short, user-facing string to label this option to users. @@ -330,13 +330,13 @@ def __init__( UI) and a list of Option objects. Blocks: - https://api.slack.com/reference/block-kit/composition-objects#option-group + https://docs.slack.dev/reference/block-kit/composition-objects/option-group-object Dialogs: - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements Legacy interactive attachments: - https://api.slack.com/legacy/interactive-message-field-guide#option_groups_to_place_within_message_menu_actions + https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#option_groups Args: label: Text to display at the top of this group of options. @@ -427,7 +427,7 @@ def __init__( An object that defines a dialog that provides a confirmation step to any interactive element. This dialog will ask the user to confirm their action by offering a confirm and deny button. - https://api.slack.com/reference/block-kit/composition-objects#confirm + https://docs.slack.dev/reference/block-kit/composition-objects/confirmation-dialog-object/ """ self._title = TextObject.parse(title, default_type=PlainTextObject.type) self._text = TextObject.parse(text, default_type=MarkdownTextObject.type) @@ -514,7 +514,7 @@ def __init__( ): """ Determines when a plain-text input element will return a block_actions interaction payload. - https://api.slack.com/reference/block-kit/composition-objects#dispatch_action_config + https://docs.slack.dev/reference/block-kit/composition-objects/dispatch-action-configuration-object """ self._trigger_actions_on = trigger_actions_on or [] @@ -571,7 +571,7 @@ def __init__( url: Optional[str] = None, ): """An object containing Slack file information to be used in an image block or image element. - https://api.slack.com/reference/block-kit/composition-objects#slack_file + https://docs.slack.dev/reference/block-kit/composition-objects/slack-file-object Args: id: Slack ID of the file. diff --git a/slack_sdk/models/blocks/block_elements.py b/slack_sdk/models/blocks/block_elements.py index 4f0fc6d2d..bcef28abe 100644 --- a/slack_sdk/models/blocks/block_elements.py +++ b/slack_sdk/models/blocks/block_elements.py @@ -28,7 +28,7 @@ class BlockElement(JsonObject, metaclass=ABCMeta): """Block Elements are things that exists inside of your Blocks. - https://api.slack.com/reference/block-kit/block-elements + https://docs.slack.dev/reference/block-kit/block-elements/ """ attributes = {"type"} @@ -205,7 +205,7 @@ def __init__( ): """An interactive element that inserts a button. The button can be a trigger for anything from opening a simple link to starting a complex workflow. - https://api.slack.com/reference/block-kit/block-elements#button + https://docs.slack.dev/reference/block-kit/block-elements/button-element/ Args: text (required): A text object that defines the button's text. @@ -277,7 +277,7 @@ def __init__( """A simple button that simply opens a given URL. You will still receive an interaction payload and will need to send an acknowledgement response. This is a helper class that makes creating links simpler. - https://api.slack.com/reference/block-kit/block-elements#button + https://docs.slack.dev/reference/block-kit/block-elements/button-element/ Args: text (required): A text object that defines the button's text. @@ -332,7 +332,7 @@ def __init__( **others: dict, ): """A checkbox group that allows a user to choose multiple items from a list of possible options. - https://api.slack.com/reference/block-kit/block-elements#checkboxes + https://docs.slack.dev/reference/block-kit/block-elements/checkboxes-element/ Args: action_id (required): An identifier for the action triggered when the checkbox group is changed. @@ -384,7 +384,7 @@ def __init__( """ An element which lets users easily select a date from a calendar style UI. Date picker elements can be used inside of SectionBlocks and ActionsBlocks. - https://api.slack.com/reference/block-kit/block-elements#datepicker + https://docs.slack.dev/reference/block-kit/block-elements/date-picker-element Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -447,7 +447,7 @@ def __init__( On desktop clients, this time picker will take the form of a dropdown list with free-text entry for precise choices. On mobile clients, the time picker will use native time picker UIs. - https://api.slack.com/reference/block-kit/block-elements#timepicker + https://docs.slack.dev/reference/block-kit/block-elements/time-picker-element Args: action_id (required): An identifier for the action triggered when a time is selected. @@ -509,7 +509,7 @@ def __init__( date picker will take the form of a dropdown calendar. Both options will have free-text entry for precise choices. On mobile clients, the time picker and date picker will use native UIs. - https://api.slack.com/reference/block-kit/block-elements#datetimepicker + https://docs.slack.dev/reference/block-kit/block-elements/date-picker-element/ Args: action_id (required): An identifier for the action triggered when a time is selected. You can use this @@ -564,7 +564,7 @@ def __init__( """An element to insert an image - this element can be used in section and context blocks only. If you want a block with only an image in it, you're looking for the image block. - https://api.slack.com/reference/block-kit/block-elements#image + https://docs.slack.dev/reference/block-kit/block-elements/image-element Args: alt_text (required): A plain-text summary of the image. This should not contain any markup. @@ -614,7 +614,7 @@ def __init__( **others: dict, ): """This is the simplest form of select menu, with a static list of options passed in when defining the element. - https://api.slack.com/reference/block-kit/block-elements#static_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#static_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -690,7 +690,7 @@ def __init__( ): """ This is the simplest form of select menu, with a static list of options passed in when defining the element. - https://api.slack.com/reference/block-kit/block-elements#static_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#static_multi_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -768,7 +768,7 @@ def __init__( **others: dict, ): """This is the simplest form of select menu, with a static list of options passed in when defining the element. - https://api.slack.com/reference/block-kit/block-elements#static_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#static_select Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -846,7 +846,7 @@ def __init__( """ This select menu will load its options from an external data source, allowing for a dynamic list of options. - https://api.slack.com/reference/block-kit/block-elements#external_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#external_select Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -903,7 +903,7 @@ def __init__( """ This select menu will load its options from an external data source, allowing for a dynamic list of options. - https://api.slack.com/reference/block-kit/block-elements#external_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -965,7 +965,7 @@ def __init__( """ This select menu will populate its options with a list of Slack users visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#users_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#users_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -1013,7 +1013,7 @@ def __init__( """ This select menu will populate its options with a list of Slack users visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#users_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#users_multi_select Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -1061,7 +1061,7 @@ def __init__( ): """Provides a way to filter the list of options in a conversations select menu or conversations multi-select menu. - https://api.slack.com/reference/block-kit/composition-objects#filter_conversations + https://docs.slack.dev/reference/block-kit/composition-objects/conversation-filter-object Args: include: Indicates which type of conversations should be included in the list. @@ -1120,7 +1120,7 @@ def __init__( """ This select menu will populate its options with a list of public and private channels, DMs, and MPIMs visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#conversation_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element/#conversations_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -1188,7 +1188,7 @@ def __init__( """ This multi-select menu will populate its options with a list of public and private channels, DMs, and MPIMs visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#conversation_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element/#conversation_multi_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -1251,7 +1251,7 @@ def __init__( """ This select menu will populate its options with a list of public channels visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#channel_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element/#channels_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -1304,7 +1304,7 @@ def __init__( """ This multi-select menu will populate its options with a list of public channels visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#channel_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#channel_multi_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -1413,7 +1413,7 @@ def __init__( where a user can enter freeform data. It can appear as a single-line field or a larger textarea using the multiline flag. Plain-text input elements can be used inside of SectionBlocks and ActionsBlocks. - https://api.slack.com/reference/block-kit/block-elements#input + https://docs.slack.dev/reference/block-kit/block-elements/plain-text-input-element Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -1477,7 +1477,7 @@ def __init__( **others: dict, ): """ - https://api.slack.com/reference/block-kit/block-elements#email + https://docs.slack.dev/reference/block-kit/block-elements/email-input-element Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -1534,7 +1534,7 @@ def __init__( """ A URL input element, similar to the Plain-text input element, creates a single line field where a user can enter URL-encoded data. - https://api.slack.com/reference/block-kit/block-elements#url + https://docs.slack.dev/reference/block-kit/block-elements/url-input-element Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -1595,7 +1595,7 @@ def __init__( **others: dict, ): """ - https://api.slack.com/reference/block-kit/block-elements#number + https://docs.slack.dev/reference/block-kit/block-elements/number-input-element/ Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -1655,7 +1655,7 @@ def __init__( **others: dict, ): """ - https://api.slack.com/reference/block-kit/block-elements#file_input + https://docs.slack.dev/reference/block-kit/block-elements/file-input-element Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -1701,7 +1701,7 @@ def __init__( **others: dict, ): """A radio button group that allows a user to choose one item from a list of possible options. - https://api.slack.com/reference/block-kit/block-elements#radio + https://docs.slack.dev/reference/block-kit/block-elements/radio-button-group-element Args: action_id (required): An identifier for the action triggered when the radio button group is changed. @@ -1761,7 +1761,7 @@ def __init__( buttons. You can also specify simple URL links as overflow menu options, instead of actions. - https://api.slack.com/reference/block-kit/block-elements#overflow + https://docs.slack.dev/reference/block-kit/block-elements/overflow-menu-element Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -1809,7 +1809,7 @@ def __init__( """Allows users to run a link trigger with customizable inputs Interactive component - but interactions with workflow button elements will not send block_actions events, since these are used to start new workflow runs. - https://api.slack.com/reference/block-kit/block-elements#workflow_button + https://docs.slack.dev/reference/block-kit/block-elements/workflow-button-element Args: text (required): A text object that defines the button's text. diff --git a/slack_sdk/models/blocks/blocks.py b/slack_sdk/models/blocks/blocks.py index 82a154056..a32c2c326 100644 --- a/slack_sdk/models/blocks/blocks.py +++ b/slack_sdk/models/blocks/blocks.py @@ -26,7 +26,7 @@ class Block(JsonObject): """Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. - https://api.slack.com/reference/block-kit/blocks + https://docs.slack.dev/reference/block-kit/blocks """ attributes = {"block_id", "type"} @@ -130,7 +130,7 @@ def __init__( **others: dict, ): """A section is one of the most flexible blocks available. - https://api.slack.com/reference/block-kit/blocks#section + https://docs.slack.dev/reference/block-kit/blocks/section-block Args: block_id (required): A string acting as a unique identifier for a block. @@ -198,7 +198,7 @@ def __init__( **others: dict, ): """A content divider, like an
              , to split up different blocks inside of a message. - https://api.slack.com/reference/block-kit/blocks#divider + https://docs.slack.dev/reference/block-kit/blocks/divider-block Args: block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. @@ -233,7 +233,7 @@ def __init__( **others: dict, ): """A simple image block, designed to make those cat photos really pop. - https://api.slack.com/reference/block-kit/blocks#image + https://docs.slack.dev/reference/block-kit/blocks/image-block Args: alt_text (required): A plain-text summary of the image. This should not contain any markup. @@ -300,7 +300,7 @@ def __init__( **others: dict, ): """A block that is used to hold interactive elements. - https://api.slack.com/reference/block-kit/blocks#actions + https://docs.slack.dev/reference/block-kit/blocks/actions-block Args: elements (required): An array of interactive element objects - buttons, select menus, overflow menus, @@ -338,7 +338,7 @@ def __init__( **others: dict, ): """Displays message context, which can include both images and text. - https://api.slack.com/reference/block-kit/blocks#context + https://docs.slack.dev/reference/block-kit/blocks/context-block Args: elements (required): An array of image elements and text objects. Maximum number of items is 10. @@ -379,7 +379,7 @@ def __init__( ): """A block that collects information from users - it can hold a plain-text input element, a select menu element, a multi-select menu element, or a datepicker. - https://api.slack.com/reference/block-kit/blocks#input + https://docs.slack.dev/reference/block-kit/blocks/input-block Args: label (required): A label that appears above an input element in the form of a text object @@ -441,7 +441,7 @@ def __init__( **others: dict, ): """Displays a remote file. - https://api.slack.com/reference/block-kit/blocks#file + https://docs.slack.dev/reference/block-kit/blocks/file-block Args: external_id (required): The external unique ID for this file. @@ -475,7 +475,7 @@ def __init__( **others: dict, ): """Displays a call information - https://api.slack.com/reference/block-kit/blocks#call + https://docs.slack.dev/reference/block-kit/blocks#call """ super().__init__(type=self.type, block_id=block_id) show_unknown_key_warning(self, others) @@ -501,7 +501,7 @@ def __init__( **others: dict, ): """A header is a plain-text block that displays in a larger, bold font. - https://api.slack.com/reference/block-kit/blocks#header + https://docs.slack.dev/reference/block-kit/blocks/header-block Args: block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. @@ -604,7 +604,7 @@ def __init__( (e.g. link unfurls, messages, modals, App Home) — anywhere you can put blocks! To use the video block within your app, you must have the links.embed:write scope. - https://api.slack.com/reference/block-kit/blocks#video + https://docs.slack.dev/reference/block-kit/blocks/video-block Args: block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. @@ -676,7 +676,7 @@ def __init__( **others: dict, ): """A block that is used to hold interactive elements. - https://api.slack.com/reference/block-kit/blocks#rich_text + https://docs.slack.dev/reference/block-kit/blocks/rich-text-block Args: elements (required): An array of rich text objects - diff --git a/slack_sdk/models/dialogs/__init__.py b/slack_sdk/models/dialogs/__init__.py index 82a40269e..cc67ed37e 100644 --- a/slack_sdk/models/dialogs/__init__.py +++ b/slack_sdk/models/dialogs/__init__.py @@ -111,7 +111,7 @@ class DialogTextField(DialogTextComponent): """ Text elements are single-line plain text fields. - https://api.slack.com/dialogs#text_elements + https://docs.slack.dev/legacy/legacy-dialogs/#text_elements """ type = "text" @@ -125,7 +125,7 @@ class DialogTextArea(DialogTextComponent): answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#textarea_elements """ type = "textarea" @@ -199,7 +199,7 @@ class DialogStaticSelector(AbstractDialogSelector): single item from a list. True to web roots, this selection is displayed as a dropdown menu. - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements """ data_source = "static" @@ -224,7 +224,7 @@ def __init__( A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -277,7 +277,7 @@ def __init__( assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -313,7 +313,7 @@ def __init__( You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -350,7 +350,7 @@ def __init__( private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -395,7 +395,7 @@ def __init__( A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -522,7 +522,7 @@ def text_field( """ Text elements are single-line plain text fields. - https://api.slack.com/dialogs#attributes_text_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -577,7 +577,7 @@ def text_area( character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#attributes_textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -630,7 +630,7 @@ def static_selector( A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -673,7 +673,7 @@ def external_selector( A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -716,7 +716,7 @@ def user_selector( assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -751,7 +751,7 @@ def channel_selector( You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -787,7 +787,7 @@ def conversation_selector( private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -858,7 +858,7 @@ class ActionStaticSelector(AbstractActionSelector): single item from a list. True to web roots, this selection is displayed as a dropdown menu. - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements """ data_source = "static" @@ -877,7 +877,7 @@ def __init__( Help users make clear, concise decisions by providing a menu of options within messages. - https://api.slack.com/docs/message-menus + https://docs.slack.dev/legacy/legacy-messaging/legacy-adding-menus-to-messages/ Args: name: Name this specific action. The name will be returned to your diff --git a/slack_sdk/models/messages/__init__.py b/slack_sdk/models/messages/__init__.py index 610624e1c..47d42ddc6 100644 --- a/slack_sdk/models/messages/__init__.py +++ b/slack_sdk/models/messages/__init__.py @@ -7,7 +7,7 @@ class Link(BaseObject): def __init__(self, *, url: str, text: str): """Base class used to generate links in Slack's not-quite Markdown, not quite HTML syntax - https://api.slack.com/reference/surfaces/formatting#linking_to_urls + https://docs.slack.dev/messaging/formatting-message-text/#linking_to_urls """ self.url = url self.text = text @@ -30,7 +30,7 @@ def __init__( link: Optional[str] = None, ): """Text containing a date or time should display that date in the local timezone of the person seeing the text. - https://api.slack.com/reference/surfaces/formatting#date-formatting + https://docs.slack.dev/messaging/formatting-message-text/#date-formatting """ if isinstance(date, datetime): epoch = int(date.timestamp()) @@ -55,7 +55,7 @@ class ObjectLink(Link): def __init__(self, *, object_id: str, text: str = ""): """Convenience class to create links to specific object types - https://api.slack.com/reference/surfaces/formatting#linking-channels + https://docs.slack.dev/messaging/formatting-message-text/#linking-channels """ prefix = self.prefix_mapping.get(object_id[0].upper(), "@") super().__init__(url=f"{prefix}{object_id}", text=text) @@ -64,7 +64,7 @@ def __init__(self, *, object_id: str, text: str = ""): class ChannelLink(Link): def __init__(self): """Represents an @channel link, which notifies everyone present in this channel. - https://api.slack.com/reference/surfaces/formatting + https://docs.slack.dev/messaging/formatting-message-text/ """ super().__init__(url="!channel", text="channel") @@ -72,7 +72,7 @@ def __init__(self): class HereLink(Link): def __init__(self): """Represents an @here link, which notifies all online users of this channel. - https://api.slack.com/reference/surfaces/formatting + https://docs.slack.dev/messaging/formatting-message-text/ """ super().__init__(url="!here", text="here") @@ -80,6 +80,6 @@ def __init__(self): class EveryoneLink(Link): def __init__(self): """Represents an @everyone link, which notifies all users of this workspace. - https://api.slack.com/reference/surfaces/formatting + https://docs.slack.dev/messaging/formatting-message-text/ """ super().__init__(url="!everyone", text="everyone") diff --git a/slack_sdk/models/messages/message.py b/slack_sdk/models/messages/message.py index 355e3befa..d4744aae7 100644 --- a/slack_sdk/models/messages/message.py +++ b/slack_sdk/models/messages/message.py @@ -35,7 +35,7 @@ def __init__( """ Create a message. - https://api.slack.com/messaging/composing#message-structure + https://docs.slack.dev/messaging/#message-structure Args: text: Plain or Slack Markdown-like text to display in the message. diff --git a/slack_sdk/models/metadata/__init__.py b/slack_sdk/models/metadata/__init__.py index 5a1b7a9e3..ddf24f1ae 100644 --- a/slack_sdk/models/metadata/__init__.py +++ b/slack_sdk/models/metadata/__init__.py @@ -5,7 +5,7 @@ class Metadata(JsonObject): """Message metadata - https://api.slack.com/metadata + https://docs.slack.dev/messaging/message-metadata/ """ attributes = { diff --git a/slack_sdk/models/views/__init__.py b/slack_sdk/models/views/__init__.py index 5bcc5a691..915f6eade 100644 --- a/slack_sdk/models/views/__init__.py +++ b/slack_sdk/models/views/__init__.py @@ -9,7 +9,7 @@ class View(JsonObject): """View object for modals and Home tabs. - https://api.slack.com/reference/surfaces/views + https://docs.slack.dev/reference/views/ """ types = ["modal", "home", "workflow_step"] diff --git a/slack_sdk/oauth/__init__.py b/slack_sdk/oauth/__init__.py index c16cd4972..286b87aa1 100644 --- a/slack_sdk/oauth/__init__.py +++ b/slack_sdk/oauth/__init__.py @@ -1,6 +1,6 @@ """Modules for implementing the Slack OAuth flow -https://slack.dev/python-slack-sdk/oauth/ +https://docs.slack.dev/tools/python-slack-sdk/oauth """ from .authorize_url_generator import AuthorizeUrlGenerator from .authorize_url_generator import OpenIDConnectAuthorizeUrlGenerator diff --git a/slack_sdk/oauth/installation_store/installation_store.py b/slack_sdk/oauth/installation_store/installation_store.py index 8003ba408..f01503408 100644 --- a/slack_sdk/oauth/installation_store/installation_store.py +++ b/slack_sdk/oauth/installation_store/installation_store.py @@ -1,6 +1,6 @@ """Slack installation data store -Refer to https://slack.dev/python-slack-sdk/oauth/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/oauth for details. """ from logging import Logger from typing import Optional diff --git a/slack_sdk/oauth/state_store/__init__.py b/slack_sdk/oauth/state_store/__init__.py index 9c96c2ed2..18eddaff6 100644 --- a/slack_sdk/oauth/state_store/__init__.py +++ b/slack_sdk/oauth/state_store/__init__.py @@ -1,6 +1,6 @@ """OAuth state parameter data store -Refer to https://slack.dev/python-slack-sdk/oauth/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/oauth for details. """ # from .amazon_s3_state_store import AmazonS3OAuthStateStore from .file import FileOAuthStateStore diff --git a/slack_sdk/scim/__init__.py b/slack_sdk/scim/__init__.py index b9db36556..901782a1c 100644 --- a/slack_sdk/scim/__init__.py +++ b/slack_sdk/scim/__init__.py @@ -2,7 +2,7 @@ SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack. -Refer to https://slack.dev/python-slack-sdk/scim/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/scim for details. """ from .v1.client import SCIMClient from .v1.response import SCIMResponse diff --git a/slack_sdk/scim/v1/__init__.py b/slack_sdk/scim/v1/__init__.py index e49bcddb0..2e2842568 100644 --- a/slack_sdk/scim/v1/__init__.py +++ b/slack_sdk/scim/v1/__init__.py @@ -2,5 +2,5 @@ SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack. -Refer to https://slack.dev/python-slack-sdk/scim/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/scim for details. """ diff --git a/slack_sdk/scim/v1/async_client.py b/slack_sdk/scim/v1/async_client.py index 9386c1716..87f836a74 100644 --- a/slack_sdk/scim/v1/async_client.py +++ b/slack_sdk/scim/v1/async_client.py @@ -73,7 +73,7 @@ def __init__( retry_handlers: Optional[List[AsyncRetryHandler]] = None, ): """API client for SCIM API - See https://api.slack.com/scim for more details + See https://docs.slack.dev/admins/scim-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` diff --git a/slack_sdk/scim/v1/client.py b/slack_sdk/scim/v1/client.py index d9a4c062d..82710c6cc 100644 --- a/slack_sdk/scim/v1/client.py +++ b/slack_sdk/scim/v1/client.py @@ -2,7 +2,7 @@ SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack. -Refer to https://slack.dev/python-slack-sdk/scim/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/scim/ for details. """ import json @@ -76,7 +76,7 @@ def __init__( retry_handlers: Optional[List[RetryHandler]] = None, ): """API client for SCIM API - See https://api.slack.com/scim for more details + See https://docs.slack.dev/admins/scim-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` diff --git a/slack_sdk/signature/__init__.py b/slack_sdk/signature/__init__.py index b9e97953f..aa46e5348 100644 --- a/slack_sdk/signature/__init__.py +++ b/slack_sdk/signature/__init__.py @@ -18,7 +18,7 @@ def __init__(self, signing_secret: str, clock: Clock = Clock()): Slack signs its requests using a secret that's unique to your app. With the help of signing secrets, your app can more confidently verify whether requests from us are authentic. - https://api.slack.com/authentication/verifying-requests-from-slack + https://docs.slack.dev/authentication/verifying-requests-from-slack/ """ self.signing_secret = signing_secret self.clock = clock diff --git a/slack_sdk/socket_mode/__init__.py b/slack_sdk/socket_mode/__init__.py index 4859abf41..6cdee82cb 100644 --- a/slack_sdk/socket_mode/__init__.py +++ b/slack_sdk/socket_mode/__init__.py @@ -2,7 +2,7 @@ You can use slack_sdk.socket_mode.SocketModeClient for managing Socket Mode connections and performing interactions with Slack. -https://api.slack.com/apis/connections/socket +https://docs.slack.dev/apis/events-api/using-socket-mode/ """ from .builtin import SocketModeClient diff --git a/slack_sdk/socket_mode/aiohttp/__init__.py b/slack_sdk/socket_mode/aiohttp/__init__.py index fb4bcb113..7fde17752 100644 --- a/slack_sdk/socket_mode/aiohttp/__init__.py +++ b/slack_sdk/socket_mode/aiohttp/__init__.py @@ -1,7 +1,7 @@ """aiohttp based Socket Mode client -* https://api.slack.com/apis/connections/socket -* https://slack.dev/python-slack-sdk/socket-mode/ +* https://docs.slack.dev/apis/events-api/using-socket-mode/ +* https://docs.slack.dev/tools/python-slack-sdk/socket-mode/ * https://pypi.org/project/aiohttp/ """ diff --git a/slack_sdk/socket_mode/builtin/client.py b/slack_sdk/socket_mode/builtin/client.py index c462cf171..be80e0526 100644 --- a/slack_sdk/socket_mode/builtin/client.py +++ b/slack_sdk/socket_mode/builtin/client.py @@ -1,7 +1,7 @@ """The built-in Socket Mode client -* https://api.slack.com/apis/connections/socket -* https://slack.dev/python-slack-sdk/socket-mode/ +* https://docs.slack.dev/apis/events-api/using-socket-mode/ +* https://docs.slack.dev/tools/python-slack-sdk/socket-mode/ """ diff --git a/slack_sdk/socket_mode/websocket_client/__init__.py b/slack_sdk/socket_mode/websocket_client/__init__.py index 250e00727..e3e050196 100644 --- a/slack_sdk/socket_mode/websocket_client/__init__.py +++ b/slack_sdk/socket_mode/websocket_client/__init__.py @@ -1,7 +1,7 @@ """websocket-client bassd Socket Mode client -* https://api.slack.com/apis/connections/socket -* https://slack.dev/python-slack-sdk/socket-mode/ +* https://docs.slack.dev/apis/events-api/using-socket-mode/ +* https://docs.slack.dev/tools/python-slack-sdk/socket-mode/ * https://pypi.org/project/websocket-client/ """ diff --git a/slack_sdk/socket_mode/websockets/__init__.py b/slack_sdk/socket_mode/websockets/__init__.py index b589aae01..eaa00cf65 100644 --- a/slack_sdk/socket_mode/websockets/__init__.py +++ b/slack_sdk/socket_mode/websockets/__init__.py @@ -1,7 +1,7 @@ """websockets bassd Socket Mode client -* https://api.slack.com/apis/connections/socket -* https://slack.dev/python-slack-sdk/socket-mode/ +* https://docs.slack.dev/apis/events-api/using-socket-mode/ +* https://docs.slack.dev/tools/python-slack-sdk/socket-mode/ * https://pypi.org/project/websockets/ """ diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index f9a31428a..d70a62267 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -37,7 +37,7 @@ class AsyncWebClient(AsyncBaseClient): """A WebClient allows apps to communicate with the Slack Platform's Web API. - https://api.slack.com/methods + https://docs.slack.dev/reference/methods The Slack Web API is an interface for querying information from and enacting change in a Slack workspace. @@ -108,7 +108,7 @@ async def admin_analytics_getFile( **kwargs, ) -> AsyncSlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -130,7 +130,7 @@ async def admin_apps_approve( Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -157,7 +157,7 @@ async def admin_apps_approved_list( **kwargs, ) -> AsyncSlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -178,7 +178,7 @@ async def admin_apps_clearResolution( **kwargs, ) -> AsyncSlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -198,7 +198,7 @@ async def admin_apps_requests_cancel( **kwargs, ) -> AsyncSlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -218,7 +218,7 @@ async def admin_apps_requests_list( **kwargs, ) -> AsyncSlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -242,7 +242,7 @@ async def admin_apps_restrict( Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -269,7 +269,7 @@ async def admin_apps_restricted_list( **kwargs, ) -> AsyncSlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -291,7 +291,7 @@ async def admin_apps_uninstall( ) -> AsyncSlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -322,7 +322,7 @@ async def admin_apps_activities_list( **kwargs, ) -> AsyncSlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -350,7 +350,7 @@ async def admin_apps_config_lookup( **kwargs, ) -> AsyncSlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -367,7 +367,7 @@ async def admin_apps_config_set( **kwargs, ) -> AsyncSlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -389,7 +389,7 @@ async def admin_auth_policy_getEntities( **kwargs, ) -> AsyncSlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -409,7 +409,7 @@ async def admin_auth_policy_assignEntities( **kwargs, ) -> AsyncSlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -428,7 +428,7 @@ async def admin_auth_policy_removeEntities( **kwargs, ) -> AsyncSlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -447,7 +447,7 @@ async def admin_conversations_createForObjects( **kwargs, ) -> AsyncSlackResponse: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -463,7 +463,7 @@ async def admin_conversations_linkObjects( **kwargs, ) -> AsyncSlackResponse: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -482,7 +482,7 @@ async def admin_conversations_unlinkObjects( **kwargs, ) -> AsyncSlackResponse: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -501,7 +501,7 @@ async def admin_barriers_create( **kwargs, ) -> AsyncSlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -521,7 +521,7 @@ async def admin_barriers_delete( **kwargs, ) -> AsyncSlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return await self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -536,7 +536,7 @@ async def admin_barriers_update( **kwargs, ) -> AsyncSlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -557,7 +557,7 @@ async def admin_barriers_list( **kwargs, ) -> AsyncSlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -577,7 +577,7 @@ async def admin_conversations_create( **kwargs, ) -> AsyncSlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -597,7 +597,7 @@ async def admin_conversations_delete( **kwargs, ) -> AsyncSlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.delete", params=kwargs) @@ -610,7 +610,7 @@ async def admin_conversations_invite( **kwargs, ) -> AsyncSlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -627,7 +627,7 @@ async def admin_conversations_archive( **kwargs, ) -> AsyncSlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.archive", params=kwargs) @@ -639,7 +639,7 @@ async def admin_conversations_unarchive( **kwargs, ) -> AsyncSlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.unarchive", params=kwargs) @@ -652,7 +652,7 @@ async def admin_conversations_rename( **kwargs, ) -> AsyncSlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return await self.api_call("admin.conversations.rename", params=kwargs) @@ -670,7 +670,7 @@ async def admin_conversations_search( **kwargs, ) -> AsyncSlackResponse: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -701,7 +701,7 @@ async def admin_conversations_convertToPrivate( **kwargs, ) -> AsyncSlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -713,7 +713,7 @@ async def admin_conversations_convertToPublic( **kwargs, ) -> AsyncSlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -726,7 +726,7 @@ async def admin_conversations_setConversationPrefs( **kwargs, ) -> AsyncSlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -742,7 +742,7 @@ async def admin_conversations_getConversationPrefs( **kwargs, ) -> AsyncSlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -755,7 +755,7 @@ async def admin_conversations_disconnectShared( **kwargs, ) -> AsyncSlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -775,7 +775,7 @@ async def admin_conversations_lookup( **kwargs, ) -> AsyncSlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -803,7 +803,7 @@ async def admin_conversations_ekm_listOriginalConnectedChannelInfo( """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -830,7 +830,7 @@ async def admin_conversations_restrictAccess_addGroup( **kwargs, ) -> AsyncSlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -853,7 +853,7 @@ async def admin_conversations_restrictAccess_listGroups( **kwargs, ) -> AsyncSlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -876,7 +876,7 @@ async def admin_conversations_restrictAccess_removeGroup( **kwargs, ) -> AsyncSlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -901,7 +901,7 @@ async def admin_conversations_setTeams( **kwargs, ) -> AsyncSlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -925,7 +925,7 @@ async def admin_conversations_getTeams( **kwargs, ) -> AsyncSlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -943,7 +943,7 @@ async def admin_conversations_getCustomRetention( **kwargs, ) -> AsyncSlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -955,7 +955,7 @@ async def admin_conversations_removeCustomRetention( **kwargs, ) -> AsyncSlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -968,7 +968,7 @@ async def admin_conversations_setCustomRetention( **kwargs, ) -> AsyncSlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return await self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -980,7 +980,7 @@ async def admin_conversations_bulkArchive( **kwargs, ) -> AsyncSlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return await self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -1005,7 +1005,7 @@ async def admin_conversations_bulkMove( **kwargs, ) -> AsyncSlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -1023,7 +1023,7 @@ async def admin_emoji_add( **kwargs, ) -> AsyncSlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return await self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1036,7 +1036,7 @@ async def admin_emoji_addAlias( **kwargs, ) -> AsyncSlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return await self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1049,7 +1049,7 @@ async def admin_emoji_list( **kwargs, ) -> AsyncSlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return await self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1061,7 +1061,7 @@ async def admin_emoji_remove( **kwargs, ) -> AsyncSlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return await self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1074,7 +1074,7 @@ async def admin_emoji_rename( **kwargs, ) -> AsyncSlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return await self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1089,7 +1089,7 @@ async def admin_functions_list( **kwargs, ) -> AsyncSlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1112,7 +1112,7 @@ async def admin_functions_permissions_lookup( ) -> AsyncSlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1130,7 +1130,7 @@ async def admin_functions_permissions_set( ) -> AsyncSlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1154,7 +1154,7 @@ async def admin_roles_addAssignments( **kwargs, ) -> AsyncSlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1179,7 +1179,7 @@ async def admin_roles_listAssignments( ) -> AsyncSlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1201,7 +1201,7 @@ async def admin_roles_removeAssignments( **kwargs, ) -> AsyncSlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1223,7 +1223,7 @@ async def admin_users_session_reset( **kwargs, ) -> AsyncSlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1243,7 +1243,7 @@ async def admin_users_session_resetBulk( **kwargs, ) -> AsyncSlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1265,7 +1265,7 @@ async def admin_users_session_invalidate( **kwargs, ) -> AsyncSlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return await self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1280,7 +1280,7 @@ async def admin_users_session_list( **kwargs, ) -> AsyncSlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1300,7 +1300,7 @@ async def admin_teams_settings_setDefaultChannels( **kwargs, ) -> AsyncSlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1317,7 +1317,7 @@ async def admin_users_session_getSettings( ) -> AsyncSlackResponse: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1335,7 +1335,7 @@ async def admin_users_session_setSettings( ) -> AsyncSlackResponse: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1357,7 +1357,7 @@ async def admin_users_session_clearSettings( ) -> AsyncSlackResponse: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1374,7 +1374,7 @@ async def admin_users_unsupportedVersions_export( ) -> AsyncSlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1392,7 +1392,7 @@ async def admin_inviteRequests_approve( **kwargs, ) -> AsyncSlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return await self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1406,7 +1406,7 @@ async def admin_inviteRequests_approved_list( **kwargs, ) -> AsyncSlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1426,7 +1426,7 @@ async def admin_inviteRequests_denied_list( **kwargs, ) -> AsyncSlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1445,7 +1445,7 @@ async def admin_inviteRequests_deny( **kwargs, ) -> AsyncSlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return await self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1466,7 +1466,7 @@ async def admin_teams_admins_list( **kwargs, ) -> AsyncSlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1487,7 +1487,7 @@ async def admin_teams_create( **kwargs, ) -> AsyncSlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1507,7 +1507,7 @@ async def admin_teams_list( **kwargs, ) -> AsyncSlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return await self.api_call("admin.teams.list", params=kwargs) @@ -1521,7 +1521,7 @@ async def admin_teams_owners_list( **kwargs, ) -> AsyncSlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return await self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1533,7 +1533,7 @@ async def admin_teams_settings_info( **kwargs, ) -> AsyncSlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return await self.api_call("admin.teams.settings.info", params=kwargs) @@ -1546,7 +1546,7 @@ async def admin_teams_settings_setDescription( **kwargs, ) -> AsyncSlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return await self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1559,7 +1559,7 @@ async def admin_teams_settings_setDiscoverability( **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return await self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1572,7 +1572,7 @@ async def admin_teams_settings_setIcon( **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return await self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1585,7 +1585,7 @@ async def admin_teams_settings_setName( **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return await self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1599,7 +1599,7 @@ async def admin_usergroups_addChannels( **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1617,7 +1617,7 @@ async def admin_usergroups_addTeams( **kwargs, ) -> AsyncSlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1635,7 +1635,7 @@ async def admin_usergroups_listChannels( **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1654,7 +1654,7 @@ async def admin_usergroups_removeChannels( **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1674,7 +1674,7 @@ async def admin_users_assign( **kwargs, ) -> AsyncSlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1706,7 +1706,7 @@ async def admin_users_invite( **kwargs, ) -> AsyncSlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1738,7 +1738,7 @@ async def admin_users_list( **kwargs, ) -> AsyncSlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1759,7 +1759,7 @@ async def admin_users_remove( **kwargs, ) -> AsyncSlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.remove", params=kwargs) @@ -1772,7 +1772,7 @@ async def admin_users_setAdmin( **kwargs, ) -> AsyncSlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setAdmin", params=kwargs) @@ -1786,7 +1786,7 @@ async def admin_users_setExpiration( **kwargs, ) -> AsyncSlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setExpiration", params=kwargs) @@ -1799,7 +1799,7 @@ async def admin_users_setOwner( **kwargs, ) -> AsyncSlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setOwner", params=kwargs) @@ -1812,7 +1812,7 @@ async def admin_users_setRegular( **kwargs, ) -> AsyncSlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setRegular", params=kwargs) @@ -1833,7 +1833,7 @@ async def admin_workflows_search( **kwargs, ) -> AsyncSlackResponse: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1863,7 +1863,7 @@ async def admin_workflows_permissions_lookup( **kwargs, ) -> AsyncSlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1884,7 +1884,7 @@ async def admin_workflows_collaborators_add( **kwargs, ) -> AsyncSlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1904,7 +1904,7 @@ async def admin_workflows_collaborators_remove( **kwargs, ) -> AsyncSlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1923,7 +1923,7 @@ async def admin_workflows_unpublish( **kwargs, ) -> AsyncSlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1938,7 +1938,7 @@ async def api_test( **kwargs, ) -> AsyncSlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return await self.api_call("api.test", params=kwargs) @@ -1951,7 +1951,7 @@ async def apps_connections_open( ) -> AsyncSlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return await self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -1966,7 +1966,7 @@ async def apps_event_authorizations_list( ) -> AsyncSlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return await self.api_call("apps.event.authorizations.list", params=kwargs) @@ -1979,7 +1979,7 @@ async def apps_uninstall( **kwargs, ) -> AsyncSlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return await self.api_call("apps.uninstall", params=kwargs) @@ -1991,7 +1991,7 @@ async def apps_manifest_create( **kwargs, ) -> AsyncSlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2006,7 +2006,7 @@ async def apps_manifest_delete( **kwargs, ) -> AsyncSlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return await self.api_call("apps.manifest.delete", params=kwargs) @@ -2018,7 +2018,7 @@ async def apps_manifest_export( **kwargs, ) -> AsyncSlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return await self.api_call("apps.manifest.export", params=kwargs) @@ -2031,7 +2031,7 @@ async def apps_manifest_update( **kwargs, ) -> AsyncSlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2048,7 +2048,7 @@ async def apps_manifest_validate( **kwargs, ) -> AsyncSlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2064,7 +2064,7 @@ async def tooling_tokens_rotate( **kwargs, ) -> AsyncSlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return await self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2078,7 +2078,7 @@ async def assistant_threads_setStatus( **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return await self.api_call("assistant.threads.setStatus", params=kwargs) @@ -2092,7 +2092,7 @@ async def assistant_threads_setTitle( **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return await self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2107,7 +2107,7 @@ async def assistant_threads_setSuggestedPrompts( **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2121,7 +2121,7 @@ async def auth_revoke( **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return await self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2131,7 +2131,7 @@ async def auth_test( **kwargs, ) -> AsyncSlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return await self.api_call("auth.test", params=kwargs) @@ -2143,7 +2143,7 @@ async def auth_teams_list( **kwargs, ) -> AsyncSlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return await self.api_call("auth.teams.list", params=kwargs) @@ -2161,7 +2161,7 @@ async def bookmarks_add( **kwargs, ) -> AsyncSlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2187,7 +2187,7 @@ async def bookmarks_edit( **kwargs, ) -> AsyncSlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2207,7 +2207,7 @@ async def bookmarks_list( **kwargs, ) -> AsyncSlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return await self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2220,7 +2220,7 @@ async def bookmarks_remove( **kwargs, ) -> AsyncSlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return await self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2233,7 +2233,7 @@ async def bots_info( **kwargs, ) -> AsyncSlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return await self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2252,7 +2252,7 @@ async def calls_add( **kwargs, ) -> AsyncSlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2279,7 +2279,7 @@ async def calls_end( **kwargs, ) -> AsyncSlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return await self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2291,7 +2291,7 @@ async def calls_info( **kwargs, ) -> AsyncSlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return await self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2304,7 +2304,7 @@ async def calls_participants_add( **kwargs, ) -> AsyncSlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2318,7 +2318,7 @@ async def calls_participants_remove( **kwargs, ) -> AsyncSlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2334,7 +2334,7 @@ async def calls_update( **kwargs, ) -> AsyncSlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2354,7 +2354,7 @@ async def canvases_create( **kwargs, ) -> AsyncSlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return await self.api_call("canvases.create", json=kwargs) @@ -2367,7 +2367,7 @@ async def canvases_edit( **kwargs, ) -> AsyncSlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return await self.api_call("canvases.edit", json=kwargs) @@ -2379,7 +2379,7 @@ async def canvases_delete( **kwargs, ) -> AsyncSlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return await self.api_call("canvases.delete", params=kwargs) @@ -2394,7 +2394,7 @@ async def canvases_access_set( **kwargs, ) -> AsyncSlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2419,7 +2419,7 @@ async def canvases_access_delete( **kwargs, ) -> AsyncSlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2442,7 +2442,7 @@ async def canvases_sections_lookup( **kwargs, ) -> AsyncSlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return await self.api_call("canvases.sections.lookup", params=kwargs) @@ -2450,7 +2450,7 @@ async def canvases_sections_lookup( # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def channels_archive( @@ -2629,7 +2629,7 @@ async def chat_delete( **kwargs, ) -> AsyncSlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return await self.api_call("chat.delete", params=kwargs) @@ -2643,7 +2643,7 @@ async def chat_deleteScheduledMessage( **kwargs, ) -> AsyncSlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2662,7 +2662,7 @@ async def chat_getPermalink( **kwargs, ) -> AsyncSlackResponse: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return await self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2675,7 +2675,7 @@ async def chat_meMessage( **kwargs, ) -> AsyncSlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return await self.api_call("chat.meMessage", params=kwargs) @@ -2699,7 +2699,7 @@ async def chat_postEphemeral( **kwargs, ) -> AsyncSlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2748,7 +2748,7 @@ async def chat_postMessage( **kwargs, ) -> AsyncSlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2798,7 +2798,7 @@ async def chat_scheduleMessage( **kwargs, ) -> AsyncSlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2839,7 +2839,7 @@ async def chat_unfurl( **kwargs, ) -> AsyncSlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2877,7 +2877,7 @@ async def chat_update( **kwargs, ) -> AsyncSlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2916,7 +2916,7 @@ async def chat_scheduledMessages_list( **kwargs, ) -> AsyncSlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -2942,7 +2942,7 @@ async def conversations_acceptSharedInvite( **kwargs, ) -> AsyncSlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -2966,7 +2966,7 @@ async def conversations_approveSharedInvite( **kwargs, ) -> AsyncSlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return await self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -2978,7 +2978,7 @@ async def conversations_archive( **kwargs, ) -> AsyncSlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return await self.api_call("conversations.archive", params=kwargs) @@ -2990,7 +2990,7 @@ async def conversations_close( **kwargs, ) -> AsyncSlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return await self.api_call("conversations.close", params=kwargs) @@ -3004,7 +3004,7 @@ async def conversations_create( **kwargs, ) -> AsyncSlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return await self.api_call("conversations.create", params=kwargs) @@ -3017,7 +3017,7 @@ async def conversations_declineSharedInvite( **kwargs, ) -> AsyncSlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return await self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -3026,7 +3026,7 @@ async def conversations_externalInvitePermissions_set( self, *, action: str, channel: str, target_team: str, **kwargs ) -> AsyncSlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3050,7 +3050,7 @@ async def conversations_history( **kwargs, ) -> AsyncSlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3074,7 +3074,7 @@ async def conversations_info( **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3094,7 +3094,7 @@ async def conversations_invite( **kwargs, ) -> AsyncSlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3117,7 +3117,7 @@ async def conversations_inviteShared( **kwargs, ) -> AsyncSlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3139,7 +3139,7 @@ async def conversations_join( **kwargs, ) -> AsyncSlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return await self.api_call("conversations.join", params=kwargs) @@ -3152,7 +3152,7 @@ async def conversations_kick( **kwargs, ) -> AsyncSlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return await self.api_call("conversations.kick", params=kwargs) @@ -3164,7 +3164,7 @@ async def conversations_leave( **kwargs, ) -> AsyncSlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return await self.api_call("conversations.leave", params=kwargs) @@ -3180,7 +3180,7 @@ async def conversations_list( **kwargs, ) -> AsyncSlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3206,7 +3206,7 @@ async def conversations_listConnectInvites( ) -> AsyncSlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return await self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3219,7 +3219,7 @@ async def conversations_mark( **kwargs, ) -> AsyncSlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return await self.api_call("conversations.mark", params=kwargs) @@ -3233,7 +3233,7 @@ async def conversations_members( **kwargs, ) -> AsyncSlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return await self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3247,7 +3247,7 @@ async def conversations_open( **kwargs, ) -> AsyncSlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3266,7 +3266,7 @@ async def conversations_rename( **kwargs, ) -> AsyncSlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return await self.api_call("conversations.rename", params=kwargs) @@ -3285,7 +3285,7 @@ async def conversations_replies( **kwargs, ) -> AsyncSlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3311,7 +3311,7 @@ async def conversations_requestSharedInvite_approve( **kwargs, ) -> AsyncSlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3332,7 +3332,7 @@ async def conversations_requestSharedInvite_deny( **kwargs, ) -> AsyncSlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return await self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3350,7 +3350,7 @@ async def conversations_requestSharedInvite_list( **kwargs, ) -> AsyncSlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3377,7 +3377,7 @@ async def conversations_setPurpose( **kwargs, ) -> AsyncSlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return await self.api_call("conversations.setPurpose", params=kwargs) @@ -3390,7 +3390,7 @@ async def conversations_setTopic( **kwargs, ) -> AsyncSlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return await self.api_call("conversations.setTopic", params=kwargs) @@ -3402,7 +3402,7 @@ async def conversations_unarchive( **kwargs, ) -> AsyncSlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return await self.api_call("conversations.unarchive", params=kwargs) @@ -3415,7 +3415,7 @@ async def conversations_canvases_create( **kwargs, ) -> AsyncSlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return await self.api_call("conversations.canvases.create", json=kwargs) @@ -3428,7 +3428,7 @@ async def dialog_open( **kwargs, ) -> AsyncSlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3440,7 +3440,7 @@ async def dnd_endDnd( **kwargs, ) -> AsyncSlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return await self.api_call("dnd.endDnd", params=kwargs) @@ -3449,7 +3449,7 @@ async def dnd_endSnooze( **kwargs, ) -> AsyncSlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return await self.api_call("dnd.endSnooze", params=kwargs) @@ -3461,7 +3461,7 @@ async def dnd_info( **kwargs, ) -> AsyncSlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return await self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3473,7 +3473,7 @@ async def dnd_setSnooze( **kwargs, ) -> AsyncSlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return await self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3485,7 +3485,7 @@ async def dnd_teamInfo( **kwargs, ) -> AsyncSlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3500,7 +3500,7 @@ async def emoji_list( **kwargs, ) -> AsyncSlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return await self.api_call("emoji.list", http_verb="GET", params=kwargs) @@ -3513,7 +3513,7 @@ async def files_comments_delete( **kwargs, ) -> AsyncSlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return await self.api_call("files.comments.delete", params=kwargs) @@ -3525,7 +3525,7 @@ async def files_delete( **kwargs, ) -> AsyncSlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return await self.api_call("files.delete", params=kwargs) @@ -3541,7 +3541,7 @@ async def files_info( **kwargs, ) -> AsyncSlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3569,7 +3569,7 @@ async def files_list( **kwargs, ) -> AsyncSlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3597,7 +3597,7 @@ async def files_remote_info( **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return await self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3613,7 +3613,7 @@ async def files_remote_list( **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3638,7 +3638,7 @@ async def files_remote_add( **kwargs, ) -> AsyncSlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3677,7 +3677,7 @@ async def files_remote_update( **kwargs, ) -> AsyncSlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3712,7 +3712,7 @@ async def files_remote_remove( **kwargs, ) -> AsyncSlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return await self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3726,7 +3726,7 @@ async def files_remote_share( **kwargs, ) -> AsyncSlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3744,7 +3744,7 @@ async def files_revokePublicURL( **kwargs, ) -> AsyncSlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return await self.api_call("files.revokePublicURL", params=kwargs) @@ -3756,7 +3756,7 @@ async def files_sharedPublicURL( **kwargs, ) -> AsyncSlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return await self.api_call("files.sharedPublicURL", params=kwargs) @@ -3775,7 +3775,7 @@ async def files_upload( **kwargs, ) -> AsyncSlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3828,12 +3828,12 @@ async def files_upload_v2( ) -> AsyncSlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3919,7 +3919,7 @@ async def files_getUploadURLExternal( **kwargs, ) -> AsyncSlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -3942,7 +3942,7 @@ async def files_completeUploadExternal( **kwargs, ) -> AsyncSlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -3965,7 +3965,7 @@ async def functions_completeSuccess( **kwargs, ) -> AsyncSlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return await self.api_call("functions.completeSuccess", params=kwargs) @@ -3978,7 +3978,7 @@ async def functions_completeError( **kwargs, ) -> AsyncSlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return await self.api_call("functions.completeError", params=kwargs) @@ -3986,7 +3986,7 @@ async def functions_completeError( # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def groups_archive( @@ -4167,7 +4167,7 @@ async def groups_unarchive( # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def im_close( @@ -4243,7 +4243,7 @@ async def migration_exchange( **kwargs, ) -> AsyncSlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4255,7 +4255,7 @@ async def migration_exchange( # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def mpim_close( @@ -4342,7 +4342,7 @@ async def oauth_v2_access( **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4368,7 +4368,7 @@ async def oauth_access( **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4388,7 +4388,7 @@ async def oauth_v2_exchange( **kwargs, ) -> AsyncSlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return await self.api_call("oauth.v2.exchange", params=kwargs) @@ -4404,7 +4404,7 @@ async def openid_connect_token( **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4425,7 +4425,7 @@ async def openid_connect_userInfo( **kwargs, ) -> AsyncSlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return await self.api_call("openid.connect.userInfo", params=kwargs) @@ -4437,7 +4437,7 @@ async def pins_add( **kwargs, ) -> AsyncSlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return await self.api_call("pins.add", params=kwargs) @@ -4449,7 +4449,7 @@ async def pins_list( **kwargs, ) -> AsyncSlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return await self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4462,7 +4462,7 @@ async def pins_remove( **kwargs, ) -> AsyncSlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return await self.api_call("pins.remove", params=kwargs) @@ -4476,7 +4476,7 @@ async def reactions_add( **kwargs, ) -> AsyncSlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return await self.api_call("reactions.add", params=kwargs) @@ -4492,7 +4492,7 @@ async def reactions_get( **kwargs, ) -> AsyncSlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4518,7 +4518,7 @@ async def reactions_list( **kwargs, ) -> AsyncSlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4544,7 +4544,7 @@ async def reactions_remove( **kwargs, ) -> AsyncSlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4568,7 +4568,7 @@ async def reminders_add( **kwargs, ) -> AsyncSlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4589,7 +4589,7 @@ async def reminders_complete( **kwargs, ) -> AsyncSlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.complete", params=kwargs) @@ -4602,7 +4602,7 @@ async def reminders_delete( **kwargs, ) -> AsyncSlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.delete", params=kwargs) @@ -4615,7 +4615,7 @@ async def reminders_info( **kwargs, ) -> AsyncSlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4627,7 +4627,7 @@ async def reminders_list( **kwargs, ) -> AsyncSlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return await self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4640,7 +4640,7 @@ async def rtm_connect( **kwargs, ) -> AsyncSlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return await self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4658,7 +4658,7 @@ async def rtm_start( **kwargs, ) -> AsyncSlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4686,7 +4686,7 @@ async def search_all( **kwargs, ) -> AsyncSlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4714,7 +4714,7 @@ async def search_files( **kwargs, ) -> AsyncSlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4743,7 +4743,7 @@ async def search_messages( **kwargs, ) -> AsyncSlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4769,7 +4769,7 @@ async def stars_add( **kwargs, ) -> AsyncSlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -4792,7 +4792,7 @@ async def stars_list( **kwargs, ) -> AsyncSlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -4815,7 +4815,7 @@ async def stars_remove( **kwargs, ) -> AsyncSlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -4839,7 +4839,7 @@ async def team_accessLogs( **kwargs, ) -> AsyncSlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -4861,7 +4861,7 @@ async def team_billableInfo( **kwargs, ) -> AsyncSlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return await self.api_call("team.billableInfo", http_verb="GET", params=kwargs) @@ -4871,7 +4871,7 @@ async def team_billing_info( **kwargs, ) -> AsyncSlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return await self.api_call("team.billing.info", params=kwargs) @@ -4882,7 +4882,7 @@ async def team_externalTeams_disconnect( **kwargs, ) -> AsyncSlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -4904,7 +4904,7 @@ async def team_externalTeams_list( **kwargs, ) -> AsyncSlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4935,7 +4935,7 @@ async def team_info( **kwargs, ) -> AsyncSlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return await self.api_call("team.info", http_verb="GET", params=kwargs) @@ -4953,7 +4953,7 @@ async def team_integrationLogs( **kwargs, ) -> AsyncSlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -4975,7 +4975,7 @@ async def team_profile_get( **kwargs, ) -> AsyncSlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return await self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -4985,7 +4985,7 @@ async def team_preferences_list( **kwargs, ) -> AsyncSlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return await self.api_call("team.preferences.list", params=kwargs) @@ -5001,7 +5001,7 @@ async def usergroups_create( **kwargs, ) -> AsyncSlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -5027,7 +5027,7 @@ async def usergroups_disable( **kwargs, ) -> AsyncSlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return await self.api_call("usergroups.disable", params=kwargs) @@ -5041,7 +5041,7 @@ async def usergroups_enable( **kwargs, ) -> AsyncSlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return await self.api_call("usergroups.enable", params=kwargs) @@ -5056,7 +5056,7 @@ async def usergroups_list( **kwargs, ) -> AsyncSlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5081,7 +5081,7 @@ async def usergroups_update( **kwargs, ) -> AsyncSlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5108,7 +5108,7 @@ async def usergroups_users_list( **kwargs, ) -> AsyncSlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5129,7 +5129,7 @@ async def usergroups_users_update( **kwargs, ) -> AsyncSlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5156,7 +5156,7 @@ async def users_conversations( **kwargs, ) -> AsyncSlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5178,7 +5178,7 @@ async def users_deletePhoto( **kwargs, ) -> AsyncSlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return await self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5189,7 +5189,7 @@ async def users_getPresence( **kwargs, ) -> AsyncSlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return await self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5199,7 +5199,7 @@ async def users_identity( **kwargs, ) -> AsyncSlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return await self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5211,7 +5211,7 @@ async def users_info( **kwargs, ) -> AsyncSlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return await self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5226,7 +5226,7 @@ async def users_list( **kwargs, ) -> AsyncSlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5245,7 +5245,7 @@ async def users_lookupByEmail( **kwargs, ) -> AsyncSlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return await self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5260,7 +5260,7 @@ async def users_setPhoto( **kwargs, ) -> AsyncSlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return await self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5272,7 +5272,7 @@ async def users_setPresence( **kwargs, ) -> AsyncSlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return await self.api_call("users.setPresence", params=kwargs) @@ -5283,7 +5283,7 @@ async def users_discoverableContacts_lookup( **kwargs, ) -> AsyncSlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return await self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5296,7 +5296,7 @@ async def users_profile_get( **kwargs, ) -> AsyncSlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return await self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5311,7 +5311,7 @@ async def users_profile_set( **kwargs, ) -> AsyncSlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5334,8 +5334,8 @@ async def views_open( **kwargs, ) -> AsyncSlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5358,9 +5358,9 @@ async def views_push( Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5383,9 +5383,9 @@ async def views_update( """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5412,8 +5412,8 @@ async def views_publish( ) -> AsyncSlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5432,7 +5432,7 @@ async def workflows_featured_add( **kwargs, ) -> AsyncSlackResponse: """Add featured workflows to a channel. - https://api.slack.com/methods/workflows.featured.add + https://docs.slack.dev/reference/methods/workflows.featured.add """ kwargs.update({"channel_id": channel_id}) if isinstance(trigger_ids, (list, tuple)): @@ -5448,7 +5448,7 @@ async def workflows_featured_list( **kwargs, ) -> AsyncSlackResponse: """List the featured workflows for specified channels. - https://api.slack.com/methods/workflows.featured.list + https://docs.slack.dev/reference/methods/workflows.featured.list """ if isinstance(channel_ids, (list, tuple)): kwargs.update({"channel_ids": ",".join(channel_ids)}) @@ -5464,7 +5464,7 @@ async def workflows_featured_remove( **kwargs, ) -> AsyncSlackResponse: """Remove featured workflows from a channel. - https://api.slack.com/methods/workflows.featured.remove + https://docs.slack.dev/reference/methods/workflows.featured.remove """ kwargs.update({"channel_id": channel_id}) if isinstance(trigger_ids, (list, tuple)): @@ -5481,7 +5481,7 @@ async def workflows_featured_set( **kwargs, ) -> AsyncSlackResponse: """Set featured workflows for a channel. - https://api.slack.com/methods/workflows.featured.set + https://docs.slack.dev/reference/methods/workflows.featured.set """ kwargs.update({"channel_id": channel_id}) if isinstance(trigger_ids, (list, tuple)): @@ -5498,7 +5498,7 @@ async def workflows_stepCompleted( **kwargs, ) -> AsyncSlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5515,7 +5515,7 @@ async def workflows_stepFailed( **kwargs, ) -> AsyncSlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5536,7 +5536,7 @@ async def workflows_updateStep( **kwargs, ) -> AsyncSlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: diff --git a/slack_sdk/web/base_client.py b/slack_sdk/web/base_client.py index 6c3714a45..1f5ad58c7 100644 --- a/slack_sdk/web/base_client.py +++ b/slack_sdk/web/base_client.py @@ -615,7 +615,7 @@ def validate_slack_signature(*, signing_secret: str, data: str, timestamp: str, header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview Args: signing_secret: Your application's signing secret, available in the diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index 1747e0d45..f51514010 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -27,7 +27,7 @@ class WebClient(BaseClient): """A WebClient allows apps to communicate with the Slack Platform's Web API. - https://api.slack.com/methods + https://docs.slack.dev/reference/methods The Slack Web API is an interface for querying information from and enacting change in a Slack workspace. @@ -98,7 +98,7 @@ def admin_analytics_getFile( **kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -120,7 +120,7 @@ def admin_apps_approve( Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -147,7 +147,7 @@ def admin_apps_approved_list( **kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -168,7 +168,7 @@ def admin_apps_clearResolution( **kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -188,7 +188,7 @@ def admin_apps_requests_cancel( **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -208,7 +208,7 @@ def admin_apps_requests_list( **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -232,7 +232,7 @@ def admin_apps_restrict( Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -259,7 +259,7 @@ def admin_apps_restricted_list( **kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -281,7 +281,7 @@ def admin_apps_uninstall( ) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -312,7 +312,7 @@ def admin_apps_activities_list( **kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -340,7 +340,7 @@ def admin_apps_config_lookup( **kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -357,7 +357,7 @@ def admin_apps_config_set( **kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -379,7 +379,7 @@ def admin_auth_policy_getEntities( **kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -399,7 +399,7 @@ def admin_auth_policy_assignEntities( **kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -418,7 +418,7 @@ def admin_auth_policy_removeEntities( **kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -437,7 +437,7 @@ def admin_conversations_createForObjects( **kwargs, ) -> SlackResponse: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -453,7 +453,7 @@ def admin_conversations_linkObjects( **kwargs, ) -> SlackResponse: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -472,7 +472,7 @@ def admin_conversations_unlinkObjects( **kwargs, ) -> SlackResponse: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -491,7 +491,7 @@ def admin_barriers_create( **kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -511,7 +511,7 @@ def admin_barriers_delete( **kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -526,7 +526,7 @@ def admin_barriers_update( **kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -547,7 +547,7 @@ def admin_barriers_list( **kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -567,7 +567,7 @@ def admin_conversations_create( **kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -587,7 +587,7 @@ def admin_conversations_delete( **kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs) @@ -600,7 +600,7 @@ def admin_conversations_invite( **kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -617,7 +617,7 @@ def admin_conversations_archive( **kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs) @@ -629,7 +629,7 @@ def admin_conversations_unarchive( **kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs) @@ -642,7 +642,7 @@ def admin_conversations_rename( **kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs) @@ -660,7 +660,7 @@ def admin_conversations_search( **kwargs, ) -> SlackResponse: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -691,7 +691,7 @@ def admin_conversations_convertToPrivate( **kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -703,7 +703,7 @@ def admin_conversations_convertToPublic( **kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -716,7 +716,7 @@ def admin_conversations_setConversationPrefs( **kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -732,7 +732,7 @@ def admin_conversations_getConversationPrefs( **kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -745,7 +745,7 @@ def admin_conversations_disconnectShared( **kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -765,7 +765,7 @@ def admin_conversations_lookup( **kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -793,7 +793,7 @@ def admin_conversations_ekm_listOriginalConnectedChannelInfo( """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -820,7 +820,7 @@ def admin_conversations_restrictAccess_addGroup( **kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -843,7 +843,7 @@ def admin_conversations_restrictAccess_listGroups( **kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -866,7 +866,7 @@ def admin_conversations_restrictAccess_removeGroup( **kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -891,7 +891,7 @@ def admin_conversations_setTeams( **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -915,7 +915,7 @@ def admin_conversations_getTeams( **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -933,7 +933,7 @@ def admin_conversations_getCustomRetention( **kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -945,7 +945,7 @@ def admin_conversations_removeCustomRetention( **kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -958,7 +958,7 @@ def admin_conversations_setCustomRetention( **kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -970,7 +970,7 @@ def admin_conversations_bulkArchive( **kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -995,7 +995,7 @@ def admin_conversations_bulkMove( **kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -1013,7 +1013,7 @@ def admin_emoji_add( **kwargs, ) -> SlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1026,7 +1026,7 @@ def admin_emoji_addAlias( **kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1039,7 +1039,7 @@ def admin_emoji_list( **kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1051,7 +1051,7 @@ def admin_emoji_remove( **kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1064,7 +1064,7 @@ def admin_emoji_rename( **kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1079,7 +1079,7 @@ def admin_functions_list( **kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1102,7 +1102,7 @@ def admin_functions_permissions_lookup( ) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1120,7 +1120,7 @@ def admin_functions_permissions_set( ) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1144,7 +1144,7 @@ def admin_roles_addAssignments( **kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1169,7 +1169,7 @@ def admin_roles_listAssignments( ) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1191,7 +1191,7 @@ def admin_roles_removeAssignments( **kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1213,7 +1213,7 @@ def admin_users_session_reset( **kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1233,7 +1233,7 @@ def admin_users_session_resetBulk( **kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1255,7 +1255,7 @@ def admin_users_session_invalidate( **kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1270,7 +1270,7 @@ def admin_users_session_list( **kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1290,7 +1290,7 @@ def admin_teams_settings_setDefaultChannels( **kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1307,7 +1307,7 @@ def admin_users_session_getSettings( ) -> SlackResponse: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1325,7 +1325,7 @@ def admin_users_session_setSettings( ) -> SlackResponse: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1347,7 +1347,7 @@ def admin_users_session_clearSettings( ) -> SlackResponse: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1364,7 +1364,7 @@ def admin_users_unsupportedVersions_export( ) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1382,7 +1382,7 @@ def admin_inviteRequests_approve( **kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1396,7 +1396,7 @@ def admin_inviteRequests_approved_list( **kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1416,7 +1416,7 @@ def admin_inviteRequests_denied_list( **kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1435,7 +1435,7 @@ def admin_inviteRequests_deny( **kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1456,7 +1456,7 @@ def admin_teams_admins_list( **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1477,7 +1477,7 @@ def admin_teams_create( **kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1497,7 +1497,7 @@ def admin_teams_list( **kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs) @@ -1511,7 +1511,7 @@ def admin_teams_owners_list( **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1523,7 +1523,7 @@ def admin_teams_settings_info( **kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs) @@ -1536,7 +1536,7 @@ def admin_teams_settings_setDescription( **kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1549,7 +1549,7 @@ def admin_teams_settings_setDiscoverability( **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1562,7 +1562,7 @@ def admin_teams_settings_setIcon( **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1575,7 +1575,7 @@ def admin_teams_settings_setName( **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1589,7 +1589,7 @@ def admin_usergroups_addChannels( **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1607,7 +1607,7 @@ def admin_usergroups_addTeams( **kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1625,7 +1625,7 @@ def admin_usergroups_listChannels( **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1644,7 +1644,7 @@ def admin_usergroups_removeChannels( **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1664,7 +1664,7 @@ def admin_users_assign( **kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1696,7 +1696,7 @@ def admin_users_invite( **kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1728,7 +1728,7 @@ def admin_users_list( **kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1749,7 +1749,7 @@ def admin_users_remove( **kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs) @@ -1762,7 +1762,7 @@ def admin_users_setAdmin( **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs) @@ -1776,7 +1776,7 @@ def admin_users_setExpiration( **kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs) @@ -1789,7 +1789,7 @@ def admin_users_setOwner( **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs) @@ -1802,7 +1802,7 @@ def admin_users_setRegular( **kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs) @@ -1823,7 +1823,7 @@ def admin_workflows_search( **kwargs, ) -> SlackResponse: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1853,7 +1853,7 @@ def admin_workflows_permissions_lookup( **kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1874,7 +1874,7 @@ def admin_workflows_collaborators_add( **kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1894,7 +1894,7 @@ def admin_workflows_collaborators_remove( **kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1913,7 +1913,7 @@ def admin_workflows_unpublish( **kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1928,7 +1928,7 @@ def api_test( **kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs) @@ -1941,7 +1941,7 @@ def apps_connections_open( ) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -1956,7 +1956,7 @@ def apps_event_authorizations_list( ) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs) @@ -1969,7 +1969,7 @@ def apps_uninstall( **kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) @@ -1981,7 +1981,7 @@ def apps_manifest_create( **kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -1996,7 +1996,7 @@ def apps_manifest_delete( **kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs) @@ -2008,7 +2008,7 @@ def apps_manifest_export( **kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs) @@ -2021,7 +2021,7 @@ def apps_manifest_update( **kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2038,7 +2038,7 @@ def apps_manifest_validate( **kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2054,7 +2054,7 @@ def tooling_tokens_rotate( **kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2068,7 +2068,7 @@ def assistant_threads_setStatus( **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return self.api_call("assistant.threads.setStatus", params=kwargs) @@ -2082,7 +2082,7 @@ def assistant_threads_setTitle( **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2097,7 +2097,7 @@ def assistant_threads_setSuggestedPrompts( **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2111,7 +2111,7 @@ def auth_revoke( **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2121,7 +2121,7 @@ def auth_test( **kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs) @@ -2133,7 +2133,7 @@ def auth_teams_list( **kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs) @@ -2151,7 +2151,7 @@ def bookmarks_add( **kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2177,7 +2177,7 @@ def bookmarks_edit( **kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2197,7 +2197,7 @@ def bookmarks_list( **kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2210,7 +2210,7 @@ def bookmarks_remove( **kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2223,7 +2223,7 @@ def bots_info( **kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2242,7 +2242,7 @@ def calls_add( **kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2269,7 +2269,7 @@ def calls_end( **kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2281,7 +2281,7 @@ def calls_info( **kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2294,7 +2294,7 @@ def calls_participants_add( **kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2308,7 +2308,7 @@ def calls_participants_remove( **kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2324,7 +2324,7 @@ def calls_update( **kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2344,7 +2344,7 @@ def canvases_create( **kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs) @@ -2357,7 +2357,7 @@ def canvases_edit( **kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs) @@ -2369,7 +2369,7 @@ def canvases_delete( **kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs) @@ -2384,7 +2384,7 @@ def canvases_access_set( **kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2409,7 +2409,7 @@ def canvases_access_delete( **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2432,7 +2432,7 @@ def canvases_sections_lookup( **kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs) @@ -2440,7 +2440,7 @@ def canvases_sections_lookup( # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def channels_archive( @@ -2619,7 +2619,7 @@ def chat_delete( **kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs) @@ -2633,7 +2633,7 @@ def chat_deleteScheduledMessage( **kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2652,7 +2652,7 @@ def chat_getPermalink( **kwargs, ) -> SlackResponse: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2665,7 +2665,7 @@ def chat_meMessage( **kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs) @@ -2689,7 +2689,7 @@ def chat_postEphemeral( **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2738,7 +2738,7 @@ def chat_postMessage( **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2788,7 +2788,7 @@ def chat_scheduleMessage( **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2829,7 +2829,7 @@ def chat_unfurl( **kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2867,7 +2867,7 @@ def chat_update( **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2906,7 +2906,7 @@ def chat_scheduledMessages_list( **kwargs, ) -> SlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -2932,7 +2932,7 @@ def conversations_acceptSharedInvite( **kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -2956,7 +2956,7 @@ def conversations_approveSharedInvite( **kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -2968,7 +2968,7 @@ def conversations_archive( **kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs) @@ -2980,7 +2980,7 @@ def conversations_close( **kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs) @@ -2994,7 +2994,7 @@ def conversations_create( **kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs) @@ -3007,7 +3007,7 @@ def conversations_declineSharedInvite( **kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -3016,7 +3016,7 @@ def conversations_externalInvitePermissions_set( self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3040,7 +3040,7 @@ def conversations_history( **kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3064,7 +3064,7 @@ def conversations_info( **kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3084,7 +3084,7 @@ def conversations_invite( **kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3107,7 +3107,7 @@ def conversations_inviteShared( **kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3129,7 +3129,7 @@ def conversations_join( **kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs) @@ -3142,7 +3142,7 @@ def conversations_kick( **kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs) @@ -3154,7 +3154,7 @@ def conversations_leave( **kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs) @@ -3170,7 +3170,7 @@ def conversations_list( **kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3196,7 +3196,7 @@ def conversations_listConnectInvites( ) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3209,7 +3209,7 @@ def conversations_mark( **kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs) @@ -3223,7 +3223,7 @@ def conversations_members( **kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3237,7 +3237,7 @@ def conversations_open( **kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3256,7 +3256,7 @@ def conversations_rename( **kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs) @@ -3275,7 +3275,7 @@ def conversations_replies( **kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3301,7 +3301,7 @@ def conversations_requestSharedInvite_approve( **kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3322,7 +3322,7 @@ def conversations_requestSharedInvite_deny( **kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3340,7 +3340,7 @@ def conversations_requestSharedInvite_list( **kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3367,7 +3367,7 @@ def conversations_setPurpose( **kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs) @@ -3380,7 +3380,7 @@ def conversations_setTopic( **kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs) @@ -3392,7 +3392,7 @@ def conversations_unarchive( **kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs) @@ -3405,7 +3405,7 @@ def conversations_canvases_create( **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs) @@ -3418,7 +3418,7 @@ def dialog_open( **kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3430,7 +3430,7 @@ def dnd_endDnd( **kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs) @@ -3439,7 +3439,7 @@ def dnd_endSnooze( **kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs) @@ -3451,7 +3451,7 @@ def dnd_info( **kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3463,7 +3463,7 @@ def dnd_setSnooze( **kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3475,7 +3475,7 @@ def dnd_teamInfo( **kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3490,7 +3490,7 @@ def emoji_list( **kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) @@ -3503,7 +3503,7 @@ def files_comments_delete( **kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs) @@ -3515,7 +3515,7 @@ def files_delete( **kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs) @@ -3531,7 +3531,7 @@ def files_info( **kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3559,7 +3559,7 @@ def files_list( **kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3587,7 +3587,7 @@ def files_remote_info( **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3603,7 +3603,7 @@ def files_remote_list( **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3628,7 +3628,7 @@ def files_remote_add( **kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3667,7 +3667,7 @@ def files_remote_update( **kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3702,7 +3702,7 @@ def files_remote_remove( **kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3716,7 +3716,7 @@ def files_remote_share( **kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3734,7 +3734,7 @@ def files_revokePublicURL( **kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs) @@ -3746,7 +3746,7 @@ def files_sharedPublicURL( **kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs) @@ -3765,7 +3765,7 @@ def files_upload( **kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3818,12 +3818,12 @@ def files_upload_v2( ) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3909,7 +3909,7 @@ def files_getUploadURLExternal( **kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -3932,7 +3932,7 @@ def files_completeUploadExternal( **kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -3955,7 +3955,7 @@ def functions_completeSuccess( **kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs) @@ -3968,7 +3968,7 @@ def functions_completeError( **kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs) @@ -3976,7 +3976,7 @@ def functions_completeError( # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def groups_archive( @@ -4157,7 +4157,7 @@ def groups_unarchive( # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def im_close( @@ -4233,7 +4233,7 @@ def migration_exchange( **kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4245,7 +4245,7 @@ def migration_exchange( # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def mpim_close( @@ -4332,7 +4332,7 @@ def oauth_v2_access( **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4358,7 +4358,7 @@ def oauth_access( **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4378,7 +4378,7 @@ def oauth_v2_exchange( **kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs) @@ -4394,7 +4394,7 @@ def openid_connect_token( **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4415,7 +4415,7 @@ def openid_connect_userInfo( **kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs) @@ -4427,7 +4427,7 @@ def pins_add( **kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs) @@ -4439,7 +4439,7 @@ def pins_list( **kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4452,7 +4452,7 @@ def pins_remove( **kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs) @@ -4466,7 +4466,7 @@ def reactions_add( **kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs) @@ -4482,7 +4482,7 @@ def reactions_get( **kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4508,7 +4508,7 @@ def reactions_list( **kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4534,7 +4534,7 @@ def reactions_remove( **kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4558,7 +4558,7 @@ def reminders_add( **kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4579,7 +4579,7 @@ def reminders_complete( **kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs) @@ -4592,7 +4592,7 @@ def reminders_delete( **kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs) @@ -4605,7 +4605,7 @@ def reminders_info( **kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4617,7 +4617,7 @@ def reminders_list( **kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4630,7 +4630,7 @@ def rtm_connect( **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4648,7 +4648,7 @@ def rtm_start( **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4676,7 +4676,7 @@ def search_all( **kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4704,7 +4704,7 @@ def search_files( **kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4733,7 +4733,7 @@ def search_messages( **kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4759,7 +4759,7 @@ def stars_add( **kwargs, ) -> SlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -4782,7 +4782,7 @@ def stars_list( **kwargs, ) -> SlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -4805,7 +4805,7 @@ def stars_remove( **kwargs, ) -> SlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -4829,7 +4829,7 @@ def team_accessLogs( **kwargs, ) -> SlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -4851,7 +4851,7 @@ def team_billableInfo( **kwargs, ) -> SlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) @@ -4861,7 +4861,7 @@ def team_billing_info( **kwargs, ) -> SlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs) @@ -4872,7 +4872,7 @@ def team_externalTeams_disconnect( **kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -4894,7 +4894,7 @@ def team_externalTeams_list( **kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4925,7 +4925,7 @@ def team_info( **kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs) @@ -4943,7 +4943,7 @@ def team_integrationLogs( **kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -4965,7 +4965,7 @@ def team_profile_get( **kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -4975,7 +4975,7 @@ def team_preferences_list( **kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs) @@ -4991,7 +4991,7 @@ def usergroups_create( **kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -5017,7 +5017,7 @@ def usergroups_disable( **kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs) @@ -5031,7 +5031,7 @@ def usergroups_enable( **kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs) @@ -5046,7 +5046,7 @@ def usergroups_list( **kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5071,7 +5071,7 @@ def usergroups_update( **kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5098,7 +5098,7 @@ def usergroups_users_list( **kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5119,7 +5119,7 @@ def usergroups_users_update( **kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5146,7 +5146,7 @@ def users_conversations( **kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5168,7 +5168,7 @@ def users_deletePhoto( **kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5179,7 +5179,7 @@ def users_getPresence( **kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5189,7 +5189,7 @@ def users_identity( **kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5201,7 +5201,7 @@ def users_info( **kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5216,7 +5216,7 @@ def users_list( **kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5235,7 +5235,7 @@ def users_lookupByEmail( **kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5250,7 +5250,7 @@ def users_setPhoto( **kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5262,7 +5262,7 @@ def users_setPresence( **kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs) @@ -5273,7 +5273,7 @@ def users_discoverableContacts_lookup( **kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5286,7 +5286,7 @@ def users_profile_get( **kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5301,7 +5301,7 @@ def users_profile_set( **kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5324,8 +5324,8 @@ def views_open( **kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5348,9 +5348,9 @@ def views_push( Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5373,9 +5373,9 @@ def views_update( """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5402,8 +5402,8 @@ def views_publish( ) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5422,7 +5422,7 @@ def workflows_featured_add( **kwargs, ) -> SlackResponse: """Add featured workflows to a channel. - https://api.slack.com/methods/workflows.featured.add + https://docs.slack.dev/reference/methods/workflows.featured.add """ kwargs.update({"channel_id": channel_id}) if isinstance(trigger_ids, (list, tuple)): @@ -5438,7 +5438,7 @@ def workflows_featured_list( **kwargs, ) -> SlackResponse: """List the featured workflows for specified channels. - https://api.slack.com/methods/workflows.featured.list + https://docs.slack.dev/reference/methods/workflows.featured.list """ if isinstance(channel_ids, (list, tuple)): kwargs.update({"channel_ids": ",".join(channel_ids)}) @@ -5454,7 +5454,7 @@ def workflows_featured_remove( **kwargs, ) -> SlackResponse: """Remove featured workflows from a channel. - https://api.slack.com/methods/workflows.featured.remove + https://docs.slack.dev/reference/methods/workflows.featured.remove """ kwargs.update({"channel_id": channel_id}) if isinstance(trigger_ids, (list, tuple)): @@ -5471,7 +5471,7 @@ def workflows_featured_set( **kwargs, ) -> SlackResponse: """Set featured workflows for a channel. - https://api.slack.com/methods/workflows.featured.set + https://docs.slack.dev/reference/methods/workflows.featured.set """ kwargs.update({"channel_id": channel_id}) if isinstance(trigger_ids, (list, tuple)): @@ -5488,7 +5488,7 @@ def workflows_stepCompleted( **kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5505,7 +5505,7 @@ def workflows_stepFailed( **kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5526,7 +5526,7 @@ def workflows_updateStep( **kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: diff --git a/slack_sdk/web/deprecation.py b/slack_sdk/web/deprecation.py index 5f7f87480..c81c4b754 100644 --- a/slack_sdk/web/deprecation.py +++ b/slack_sdk/web/deprecation.py @@ -1,7 +1,7 @@ import os import warnings -# https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api +# https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ deprecated_method_prefixes_2020_01 = [ "channels.", "groups.", @@ -30,7 +30,7 @@ def show_deprecation_warning_if_any(method_name: str): message = ( f"{method_name} is deprecated. Please use the Conversations API instead. " "For more info, go to " - "https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api" + "https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/" ) warnings.warn(message) @@ -39,7 +39,7 @@ def show_deprecation_warning_if_any(method_name: str): if len(matched_prefixes) > 0: message = ( f"{method_name} is deprecated. For more info, go to " - "https://api.slack.com/changelog/2023-07-its-later-already-for-stars-and-reminders" + "https://docs.slack.dev/changelog/2023-07-its-later-already-for-stars-and-reminders/" ) warnings.warn(message) @@ -48,6 +48,6 @@ def show_deprecation_warning_if_any(method_name: str): if len(matched_prefixes) > 0: message = ( f"{method_name} is deprecated. For more info, go to " - "https://api.slack.com/changelog/2023-08-workflow-steps-from-apps-step-back" + "https://docs.slack.dev/changelog/2023-08-workflow-steps-from-apps-step-back/" ) warnings.warn(message) diff --git a/slack_sdk/web/internal_utils.py b/slack_sdk/web/internal_utils.py index 1fd5f22fc..3b5e01c62 100644 --- a/slack_sdk/web/internal_utils.py +++ b/slack_sdk/web/internal_utils.py @@ -272,19 +272,19 @@ def _warn_if_message_text_content_is_missing(endpoint: str, kwargs: Dict[str, An "system push notifications, assistive technology such as screen readers, etc." ) - # https://api.slack.com/reference/messaging/attachments + # https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments # Check if the fallback field exists for all the attachments # Not all attachments have a fallback property; warn about this too! missing_fallback_message = ( f"Additionally, the attachment-level `fallback` argument is missing in the request payload for a {endpoint} call" " - To avoid this warning, it is recommended to always provide a top-level `text` argument when posting a" " message. Alternatively you can provide an attachment-level `fallback` argument, though this is now considered" - " a legacy field (see https://api.slack.com/reference/messaging/attachments#legacy_fields for more details)." + " a legacy field (see https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments#legacy_fields for more details)." # noqa: E501 ) # Additionally, specifically for attachments, there is a legacy field available at the attachment level called `fallback` # Even with a missing text, one can provide a `fallback` per attachment. - # More details here: https://api.slack.com/reference/messaging/attachments#legacy_fields + # More details here: https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments#legacy_fields attachments = kwargs.get("attachments") # Note that this method does not verify attachments # if the value is already serialized as a single str value. diff --git a/slack_sdk/web/legacy_base_client.py b/slack_sdk/web/legacy_base_client.py index 0d5c2ac2d..4b6b63027 100644 --- a/slack_sdk/web/legacy_base_client.py +++ b/slack_sdk/web/legacy_base_client.py @@ -565,7 +565,7 @@ def validate_slack_signature(*, signing_secret: str, data: str, timestamp: str, On each HTTP request that Slack sends, we add an X-Slack-Signature HTTP header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview Args: signing_secret: Your application's signing secret, available in the Slack API dashboard diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index ed2177644..d6b7789d1 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -39,7 +39,7 @@ class LegacyWebClient(LegacyBaseClient): """A WebClient allows apps to communicate with the Slack Platform's Web API. - https://api.slack.com/methods + https://docs.slack.dev/reference/methods The Slack Web API is an interface for querying information from and enacting change in a Slack workspace. @@ -110,7 +110,7 @@ def admin_analytics_getFile( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -132,7 +132,7 @@ def admin_apps_approve( Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -159,7 +159,7 @@ def admin_apps_approved_list( **kwargs, ) -> Union[Future, SlackResponse]: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -180,7 +180,7 @@ def admin_apps_clearResolution( **kwargs, ) -> Union[Future, SlackResponse]: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -200,7 +200,7 @@ def admin_apps_requests_cancel( **kwargs, ) -> Union[Future, SlackResponse]: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -220,7 +220,7 @@ def admin_apps_requests_list( **kwargs, ) -> Union[Future, SlackResponse]: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -244,7 +244,7 @@ def admin_apps_restrict( Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -271,7 +271,7 @@ def admin_apps_restricted_list( **kwargs, ) -> Union[Future, SlackResponse]: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -293,7 +293,7 @@ def admin_apps_uninstall( ) -> Union[Future, SlackResponse]: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -324,7 +324,7 @@ def admin_apps_activities_list( **kwargs, ) -> Union[Future, SlackResponse]: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -352,7 +352,7 @@ def admin_apps_config_lookup( **kwargs, ) -> Union[Future, SlackResponse]: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -369,7 +369,7 @@ def admin_apps_config_set( **kwargs, ) -> Union[Future, SlackResponse]: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -391,7 +391,7 @@ def admin_auth_policy_getEntities( **kwargs, ) -> Union[Future, SlackResponse]: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -411,7 +411,7 @@ def admin_auth_policy_assignEntities( **kwargs, ) -> Union[Future, SlackResponse]: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -430,7 +430,7 @@ def admin_auth_policy_removeEntities( **kwargs, ) -> Union[Future, SlackResponse]: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -449,7 +449,7 @@ def admin_conversations_createForObjects( **kwargs, ) -> Union[Future, SlackResponse]: """Create a Salesforce channel for the corresponding object provided. - https://api.slack.com/methods/admin.conversations.createForObjects + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects """ kwargs.update( {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} @@ -465,7 +465,7 @@ def admin_conversations_linkObjects( **kwargs, ) -> Union[Future, SlackResponse]: """Link a Salesforce record to a channel. - https://api.slack.com/methods/admin.conversations.linkObjects + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects """ kwargs.update( { @@ -484,7 +484,7 @@ def admin_conversations_unlinkObjects( **kwargs, ) -> Union[Future, SlackResponse]: """Unlink a Salesforce record from a channel. - https://api.slack.com/methods/admin.conversations.unlinkObjects + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects """ kwargs.update( { @@ -503,7 +503,7 @@ def admin_barriers_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -523,7 +523,7 @@ def admin_barriers_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -538,7 +538,7 @@ def admin_barriers_update( **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -559,7 +559,7 @@ def admin_barriers_list( **kwargs, ) -> Union[Future, SlackResponse]: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -579,7 +579,7 @@ def admin_conversations_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -599,7 +599,7 @@ def admin_conversations_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs) @@ -612,7 +612,7 @@ def admin_conversations_invite( **kwargs, ) -> Union[Future, SlackResponse]: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -629,7 +629,7 @@ def admin_conversations_archive( **kwargs, ) -> Union[Future, SlackResponse]: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs) @@ -641,7 +641,7 @@ def admin_conversations_unarchive( **kwargs, ) -> Union[Future, SlackResponse]: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs) @@ -654,7 +654,7 @@ def admin_conversations_rename( **kwargs, ) -> Union[Future, SlackResponse]: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs) @@ -672,7 +672,7 @@ def admin_conversations_search( **kwargs, ) -> Union[Future, SlackResponse]: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -703,7 +703,7 @@ def admin_conversations_convertToPrivate( **kwargs, ) -> Union[Future, SlackResponse]: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -715,7 +715,7 @@ def admin_conversations_convertToPublic( **kwargs, ) -> Union[Future, SlackResponse]: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -728,7 +728,7 @@ def admin_conversations_setConversationPrefs( **kwargs, ) -> Union[Future, SlackResponse]: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -744,7 +744,7 @@ def admin_conversations_getConversationPrefs( **kwargs, ) -> Union[Future, SlackResponse]: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -757,7 +757,7 @@ def admin_conversations_disconnectShared( **kwargs, ) -> Union[Future, SlackResponse]: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -777,7 +777,7 @@ def admin_conversations_lookup( **kwargs, ) -> Union[Future, SlackResponse]: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -805,7 +805,7 @@ def admin_conversations_ekm_listOriginalConnectedChannelInfo( """List all disconnected channels—i.e., channels that were once connected to other workspaces and then disconnected—and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -832,7 +832,7 @@ def admin_conversations_restrictAccess_addGroup( **kwargs, ) -> Union[Future, SlackResponse]: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -855,7 +855,7 @@ def admin_conversations_restrictAccess_listGroups( **kwargs, ) -> Union[Future, SlackResponse]: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -878,7 +878,7 @@ def admin_conversations_restrictAccess_removeGroup( **kwargs, ) -> Union[Future, SlackResponse]: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -903,7 +903,7 @@ def admin_conversations_setTeams( **kwargs, ) -> Union[Future, SlackResponse]: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -927,7 +927,7 @@ def admin_conversations_getTeams( **kwargs, ) -> Union[Future, SlackResponse]: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -945,7 +945,7 @@ def admin_conversations_getCustomRetention( **kwargs, ) -> Union[Future, SlackResponse]: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -957,7 +957,7 @@ def admin_conversations_removeCustomRetention( **kwargs, ) -> Union[Future, SlackResponse]: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -970,7 +970,7 @@ def admin_conversations_setCustomRetention( **kwargs, ) -> Union[Future, SlackResponse]: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -982,7 +982,7 @@ def admin_conversations_bulkArchive( **kwargs, ) -> Union[Future, SlackResponse]: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -1007,7 +1007,7 @@ def admin_conversations_bulkMove( **kwargs, ) -> Union[Future, SlackResponse]: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -1025,7 +1025,7 @@ def admin_emoji_add( **kwargs, ) -> Union[Future, SlackResponse]: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1038,7 +1038,7 @@ def admin_emoji_addAlias( **kwargs, ) -> Union[Future, SlackResponse]: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1051,7 +1051,7 @@ def admin_emoji_list( **kwargs, ) -> Union[Future, SlackResponse]: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1063,7 +1063,7 @@ def admin_emoji_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1076,7 +1076,7 @@ def admin_emoji_rename( **kwargs, ) -> Union[Future, SlackResponse]: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1091,7 +1091,7 @@ def admin_functions_list( **kwargs, ) -> Union[Future, SlackResponse]: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1114,7 +1114,7 @@ def admin_functions_permissions_lookup( ) -> Union[Future, SlackResponse]: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1132,7 +1132,7 @@ def admin_functions_permissions_set( ) -> Union[Future, SlackResponse]: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1156,7 +1156,7 @@ def admin_roles_addAssignments( **kwargs, ) -> Union[Future, SlackResponse]: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1181,7 +1181,7 @@ def admin_roles_listAssignments( ) -> Union[Future, SlackResponse]: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1203,7 +1203,7 @@ def admin_roles_removeAssignments( **kwargs, ) -> Union[Future, SlackResponse]: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1225,7 +1225,7 @@ def admin_users_session_reset( **kwargs, ) -> Union[Future, SlackResponse]: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1245,7 +1245,7 @@ def admin_users_session_resetBulk( **kwargs, ) -> Union[Future, SlackResponse]: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1267,7 +1267,7 @@ def admin_users_session_invalidate( **kwargs, ) -> Union[Future, SlackResponse]: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1282,7 +1282,7 @@ def admin_users_session_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1302,7 +1302,7 @@ def admin_teams_settings_setDefaultChannels( **kwargs, ) -> Union[Future, SlackResponse]: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1319,7 +1319,7 @@ def admin_users_session_getSettings( ) -> Union[Future, SlackResponse]: """Get user-specific session settings—the session duration and what happens when the client closes—given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1337,7 +1337,7 @@ def admin_users_session_setSettings( ) -> Union[Future, SlackResponse]: """Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1359,7 +1359,7 @@ def admin_users_session_clearSettings( ) -> Union[Future, SlackResponse]: """Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1376,7 +1376,7 @@ def admin_users_unsupportedVersions_export( ) -> Union[Future, SlackResponse]: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1394,7 +1394,7 @@ def admin_inviteRequests_approve( **kwargs, ) -> Union[Future, SlackResponse]: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1408,7 +1408,7 @@ def admin_inviteRequests_approved_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1428,7 +1428,7 @@ def admin_inviteRequests_denied_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1447,7 +1447,7 @@ def admin_inviteRequests_deny( **kwargs, ) -> Union[Future, SlackResponse]: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1468,7 +1468,7 @@ def admin_teams_admins_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1489,7 +1489,7 @@ def admin_teams_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1509,7 +1509,7 @@ def admin_teams_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs) @@ -1523,7 +1523,7 @@ def admin_teams_owners_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1535,7 +1535,7 @@ def admin_teams_settings_info( **kwargs, ) -> Union[Future, SlackResponse]: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs) @@ -1548,7 +1548,7 @@ def admin_teams_settings_setDescription( **kwargs, ) -> Union[Future, SlackResponse]: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1561,7 +1561,7 @@ def admin_teams_settings_setDiscoverability( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1574,7 +1574,7 @@ def admin_teams_settings_setIcon( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1587,7 +1587,7 @@ def admin_teams_settings_setName( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1601,7 +1601,7 @@ def admin_usergroups_addChannels( **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1619,7 +1619,7 @@ def admin_usergroups_addTeams( **kwargs, ) -> Union[Future, SlackResponse]: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1637,7 +1637,7 @@ def admin_usergroups_listChannels( **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1656,7 +1656,7 @@ def admin_usergroups_removeChannels( **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1676,7 +1676,7 @@ def admin_users_assign( **kwargs, ) -> Union[Future, SlackResponse]: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1708,7 +1708,7 @@ def admin_users_invite( **kwargs, ) -> Union[Future, SlackResponse]: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1740,7 +1740,7 @@ def admin_users_list( **kwargs, ) -> Union[Future, SlackResponse]: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1761,7 +1761,7 @@ def admin_users_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs) @@ -1774,7 +1774,7 @@ def admin_users_setAdmin( **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs) @@ -1788,7 +1788,7 @@ def admin_users_setExpiration( **kwargs, ) -> Union[Future, SlackResponse]: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs) @@ -1801,7 +1801,7 @@ def admin_users_setOwner( **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs) @@ -1814,7 +1814,7 @@ def admin_users_setRegular( **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs) @@ -1835,7 +1835,7 @@ def admin_workflows_search( **kwargs, ) -> Union[Future, SlackResponse]: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1865,7 +1865,7 @@ def admin_workflows_permissions_lookup( **kwargs, ) -> Union[Future, SlackResponse]: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1886,7 +1886,7 @@ def admin_workflows_collaborators_add( **kwargs, ) -> Union[Future, SlackResponse]: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1906,7 +1906,7 @@ def admin_workflows_collaborators_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1925,7 +1925,7 @@ def admin_workflows_unpublish( **kwargs, ) -> Union[Future, SlackResponse]: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1940,7 +1940,7 @@ def api_test( **kwargs, ) -> Union[Future, SlackResponse]: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs) @@ -1953,7 +1953,7 @@ def apps_connections_open( ) -> Union[Future, SlackResponse]: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -1968,7 +1968,7 @@ def apps_event_authorizations_list( ) -> Union[Future, SlackResponse]: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs) @@ -1981,7 +1981,7 @@ def apps_uninstall( **kwargs, ) -> Union[Future, SlackResponse]: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) @@ -1993,7 +1993,7 @@ def apps_manifest_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2008,7 +2008,7 @@ def apps_manifest_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs) @@ -2020,7 +2020,7 @@ def apps_manifest_export( **kwargs, ) -> Union[Future, SlackResponse]: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs) @@ -2033,7 +2033,7 @@ def apps_manifest_update( **kwargs, ) -> Union[Future, SlackResponse]: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2050,7 +2050,7 @@ def apps_manifest_validate( **kwargs, ) -> Union[Future, SlackResponse]: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2066,7 +2066,7 @@ def tooling_tokens_rotate( **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2080,7 +2080,7 @@ def assistant_threads_setStatus( **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) return self.api_call("assistant.threads.setStatus", params=kwargs) @@ -2094,7 +2094,7 @@ def assistant_threads_setTitle( **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2109,7 +2109,7 @@ def assistant_threads_setSuggestedPrompts( **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2123,7 +2123,7 @@ def auth_revoke( **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2133,7 +2133,7 @@ def auth_test( **kwargs, ) -> Union[Future, SlackResponse]: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs) @@ -2145,7 +2145,7 @@ def auth_teams_list( **kwargs, ) -> Union[Future, SlackResponse]: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs) @@ -2163,7 +2163,7 @@ def bookmarks_add( **kwargs, ) -> Union[Future, SlackResponse]: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2189,7 +2189,7 @@ def bookmarks_edit( **kwargs, ) -> Union[Future, SlackResponse]: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2209,7 +2209,7 @@ def bookmarks_list( **kwargs, ) -> Union[Future, SlackResponse]: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2222,7 +2222,7 @@ def bookmarks_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2235,7 +2235,7 @@ def bots_info( **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2254,7 +2254,7 @@ def calls_add( **kwargs, ) -> Union[Future, SlackResponse]: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2281,7 +2281,7 @@ def calls_end( **kwargs, ) -> Union[Future, SlackResponse]: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2293,7 +2293,7 @@ def calls_info( **kwargs, ) -> Union[Future, SlackResponse]: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2306,7 +2306,7 @@ def calls_participants_add( **kwargs, ) -> Union[Future, SlackResponse]: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2320,7 +2320,7 @@ def calls_participants_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2336,7 +2336,7 @@ def calls_update( **kwargs, ) -> Union[Future, SlackResponse]: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2356,7 +2356,7 @@ def canvases_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs) @@ -2369,7 +2369,7 @@ def canvases_edit( **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs) @@ -2381,7 +2381,7 @@ def canvases_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs) @@ -2396,7 +2396,7 @@ def canvases_access_set( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2421,7 +2421,7 @@ def canvases_access_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2444,7 +2444,7 @@ def canvases_sections_lookup( **kwargs, ) -> Union[Future, SlackResponse]: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs) @@ -2452,7 +2452,7 @@ def canvases_sections_lookup( # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def channels_archive( @@ -2631,7 +2631,7 @@ def chat_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs) @@ -2645,7 +2645,7 @@ def chat_deleteScheduledMessage( **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2664,7 +2664,7 @@ def chat_getPermalink( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2677,7 +2677,7 @@ def chat_meMessage( **kwargs, ) -> Union[Future, SlackResponse]: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs) @@ -2701,7 +2701,7 @@ def chat_postEphemeral( **kwargs, ) -> Union[Future, SlackResponse]: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2750,7 +2750,7 @@ def chat_postMessage( **kwargs, ) -> Union[Future, SlackResponse]: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2800,7 +2800,7 @@ def chat_scheduleMessage( **kwargs, ) -> Union[Future, SlackResponse]: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2841,7 +2841,7 @@ def chat_unfurl( **kwargs, ) -> Union[Future, SlackResponse]: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2879,7 +2879,7 @@ def chat_update( **kwargs, ) -> Union[Future, SlackResponse]: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2918,7 +2918,7 @@ def chat_scheduledMessages_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -2944,7 +2944,7 @@ def conversations_acceptSharedInvite( **kwargs, ) -> Union[Future, SlackResponse]: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -2968,7 +2968,7 @@ def conversations_approveSharedInvite( **kwargs, ) -> Union[Future, SlackResponse]: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -2980,7 +2980,7 @@ def conversations_archive( **kwargs, ) -> Union[Future, SlackResponse]: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs) @@ -2992,7 +2992,7 @@ def conversations_close( **kwargs, ) -> Union[Future, SlackResponse]: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs) @@ -3006,7 +3006,7 @@ def conversations_create( **kwargs, ) -> Union[Future, SlackResponse]: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs) @@ -3019,7 +3019,7 @@ def conversations_declineSharedInvite( **kwargs, ) -> Union[Future, SlackResponse]: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -3028,7 +3028,7 @@ def conversations_externalInvitePermissions_set( self, *, action: str, channel: str, target_team: str, **kwargs ) -> Union[Future, SlackResponse]: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3052,7 +3052,7 @@ def conversations_history( **kwargs, ) -> Union[Future, SlackResponse]: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3076,7 +3076,7 @@ def conversations_info( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3096,7 +3096,7 @@ def conversations_invite( **kwargs, ) -> Union[Future, SlackResponse]: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3119,7 +3119,7 @@ def conversations_inviteShared( **kwargs, ) -> Union[Future, SlackResponse]: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3141,7 +3141,7 @@ def conversations_join( **kwargs, ) -> Union[Future, SlackResponse]: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs) @@ -3154,7 +3154,7 @@ def conversations_kick( **kwargs, ) -> Union[Future, SlackResponse]: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs) @@ -3166,7 +3166,7 @@ def conversations_leave( **kwargs, ) -> Union[Future, SlackResponse]: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs) @@ -3182,7 +3182,7 @@ def conversations_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3208,7 +3208,7 @@ def conversations_listConnectInvites( ) -> Union[Future, SlackResponse]: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3221,7 +3221,7 @@ def conversations_mark( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs) @@ -3235,7 +3235,7 @@ def conversations_members( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3249,7 +3249,7 @@ def conversations_open( **kwargs, ) -> Union[Future, SlackResponse]: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3268,7 +3268,7 @@ def conversations_rename( **kwargs, ) -> Union[Future, SlackResponse]: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs) @@ -3287,7 +3287,7 @@ def conversations_replies( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3313,7 +3313,7 @@ def conversations_requestSharedInvite_approve( **kwargs, ) -> Union[Future, SlackResponse]: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3334,7 +3334,7 @@ def conversations_requestSharedInvite_deny( **kwargs, ) -> Union[Future, SlackResponse]: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3352,7 +3352,7 @@ def conversations_requestSharedInvite_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3379,7 +3379,7 @@ def conversations_setPurpose( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs) @@ -3392,7 +3392,7 @@ def conversations_setTopic( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs) @@ -3404,7 +3404,7 @@ def conversations_unarchive( **kwargs, ) -> Union[Future, SlackResponse]: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs) @@ -3417,7 +3417,7 @@ def conversations_canvases_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs) @@ -3430,7 +3430,7 @@ def dialog_open( **kwargs, ) -> Union[Future, SlackResponse]: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3442,7 +3442,7 @@ def dnd_endDnd( **kwargs, ) -> Union[Future, SlackResponse]: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs) @@ -3451,7 +3451,7 @@ def dnd_endSnooze( **kwargs, ) -> Union[Future, SlackResponse]: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs) @@ -3463,7 +3463,7 @@ def dnd_info( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3475,7 +3475,7 @@ def dnd_setSnooze( **kwargs, ) -> Union[Future, SlackResponse]: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3487,7 +3487,7 @@ def dnd_teamInfo( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3502,7 +3502,7 @@ def emoji_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) @@ -3515,7 +3515,7 @@ def files_comments_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs) @@ -3527,7 +3527,7 @@ def files_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs) @@ -3543,7 +3543,7 @@ def files_info( **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3571,7 +3571,7 @@ def files_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3599,7 +3599,7 @@ def files_remote_info( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3615,7 +3615,7 @@ def files_remote_list( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3640,7 +3640,7 @@ def files_remote_add( **kwargs, ) -> Union[Future, SlackResponse]: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3679,7 +3679,7 @@ def files_remote_update( **kwargs, ) -> Union[Future, SlackResponse]: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3714,7 +3714,7 @@ def files_remote_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3728,7 +3728,7 @@ def files_remote_share( **kwargs, ) -> Union[Future, SlackResponse]: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3746,7 +3746,7 @@ def files_revokePublicURL( **kwargs, ) -> Union[Future, SlackResponse]: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs) @@ -3758,7 +3758,7 @@ def files_sharedPublicURL( **kwargs, ) -> Union[Future, SlackResponse]: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs) @@ -3777,7 +3777,7 @@ def files_upload( **kwargs, ) -> Union[Future, SlackResponse]: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3830,12 +3830,12 @@ def files_upload_v2( ) -> Union[Future, SlackResponse]: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3921,7 +3921,7 @@ def files_getUploadURLExternal( **kwargs, ) -> Union[Future, SlackResponse]: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -3944,7 +3944,7 @@ def files_completeUploadExternal( **kwargs, ) -> Union[Future, SlackResponse]: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -3967,7 +3967,7 @@ def functions_completeSuccess( **kwargs, ) -> Union[Future, SlackResponse]: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs) @@ -3980,7 +3980,7 @@ def functions_completeError( **kwargs, ) -> Union[Future, SlackResponse]: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs) @@ -3988,7 +3988,7 @@ def functions_completeError( # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def groups_archive( @@ -4169,7 +4169,7 @@ def groups_unarchive( # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def im_close( @@ -4245,7 +4245,7 @@ def migration_exchange( **kwargs, ) -> Union[Future, SlackResponse]: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4257,7 +4257,7 @@ def migration_exchange( # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def mpim_close( @@ -4344,7 +4344,7 @@ def oauth_v2_access( **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4370,7 +4370,7 @@ def oauth_access( **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4390,7 +4390,7 @@ def oauth_v2_exchange( **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs) @@ -4406,7 +4406,7 @@ def openid_connect_token( **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4427,7 +4427,7 @@ def openid_connect_userInfo( **kwargs, ) -> Union[Future, SlackResponse]: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs) @@ -4439,7 +4439,7 @@ def pins_add( **kwargs, ) -> Union[Future, SlackResponse]: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs) @@ -4451,7 +4451,7 @@ def pins_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4464,7 +4464,7 @@ def pins_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs) @@ -4478,7 +4478,7 @@ def reactions_add( **kwargs, ) -> Union[Future, SlackResponse]: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs) @@ -4494,7 +4494,7 @@ def reactions_get( **kwargs, ) -> Union[Future, SlackResponse]: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4520,7 +4520,7 @@ def reactions_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4546,7 +4546,7 @@ def reactions_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4570,7 +4570,7 @@ def reminders_add( **kwargs, ) -> Union[Future, SlackResponse]: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4591,7 +4591,7 @@ def reminders_complete( **kwargs, ) -> Union[Future, SlackResponse]: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs) @@ -4604,7 +4604,7 @@ def reminders_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs) @@ -4617,7 +4617,7 @@ def reminders_info( **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4629,7 +4629,7 @@ def reminders_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4642,7 +4642,7 @@ def rtm_connect( **kwargs, ) -> Union[Future, SlackResponse]: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4660,7 +4660,7 @@ def rtm_start( **kwargs, ) -> Union[Future, SlackResponse]: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4688,7 +4688,7 @@ def search_all( **kwargs, ) -> Union[Future, SlackResponse]: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4716,7 +4716,7 @@ def search_files( **kwargs, ) -> Union[Future, SlackResponse]: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4745,7 +4745,7 @@ def search_messages( **kwargs, ) -> Union[Future, SlackResponse]: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4771,7 +4771,7 @@ def stars_add( **kwargs, ) -> Union[Future, SlackResponse]: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -4794,7 +4794,7 @@ def stars_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -4817,7 +4817,7 @@ def stars_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -4841,7 +4841,7 @@ def team_accessLogs( **kwargs, ) -> Union[Future, SlackResponse]: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -4863,7 +4863,7 @@ def team_billableInfo( **kwargs, ) -> Union[Future, SlackResponse]: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) @@ -4873,7 +4873,7 @@ def team_billing_info( **kwargs, ) -> Union[Future, SlackResponse]: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs) @@ -4884,7 +4884,7 @@ def team_externalTeams_disconnect( **kwargs, ) -> Union[Future, SlackResponse]: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -4906,7 +4906,7 @@ def team_externalTeams_list( **kwargs, ) -> Union[Future, SlackResponse]: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4937,7 +4937,7 @@ def team_info( **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs) @@ -4955,7 +4955,7 @@ def team_integrationLogs( **kwargs, ) -> Union[Future, SlackResponse]: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -4977,7 +4977,7 @@ def team_profile_get( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -4987,7 +4987,7 @@ def team_preferences_list( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs) @@ -5003,7 +5003,7 @@ def usergroups_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -5029,7 +5029,7 @@ def usergroups_disable( **kwargs, ) -> Union[Future, SlackResponse]: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs) @@ -5043,7 +5043,7 @@ def usergroups_enable( **kwargs, ) -> Union[Future, SlackResponse]: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs) @@ -5058,7 +5058,7 @@ def usergroups_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5083,7 +5083,7 @@ def usergroups_update( **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5110,7 +5110,7 @@ def usergroups_users_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5131,7 +5131,7 @@ def usergroups_users_update( **kwargs, ) -> Union[Future, SlackResponse]: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5158,7 +5158,7 @@ def users_conversations( **kwargs, ) -> Union[Future, SlackResponse]: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5180,7 +5180,7 @@ def users_deletePhoto( **kwargs, ) -> Union[Future, SlackResponse]: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5191,7 +5191,7 @@ def users_getPresence( **kwargs, ) -> Union[Future, SlackResponse]: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5201,7 +5201,7 @@ def users_identity( **kwargs, ) -> Union[Future, SlackResponse]: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5213,7 +5213,7 @@ def users_info( **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5228,7 +5228,7 @@ def users_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5247,7 +5247,7 @@ def users_lookupByEmail( **kwargs, ) -> Union[Future, SlackResponse]: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5262,7 +5262,7 @@ def users_setPhoto( **kwargs, ) -> Union[Future, SlackResponse]: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5274,7 +5274,7 @@ def users_setPresence( **kwargs, ) -> Union[Future, SlackResponse]: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs) @@ -5285,7 +5285,7 @@ def users_discoverableContacts_lookup( **kwargs, ) -> Union[Future, SlackResponse]: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5298,7 +5298,7 @@ def users_profile_get( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5313,7 +5313,7 @@ def users_profile_set( **kwargs, ) -> Union[Future, SlackResponse]: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5336,8 +5336,8 @@ def views_open( **kwargs, ) -> Union[Future, SlackResponse]: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5360,9 +5360,9 @@ def views_push( Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5385,9 +5385,9 @@ def views_update( """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5414,8 +5414,8 @@ def views_publish( ) -> Union[Future, SlackResponse]: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5434,7 +5434,7 @@ def workflows_featured_add( **kwargs, ) -> Union[Future, SlackResponse]: """Add featured workflows to a channel. - https://api.slack.com/methods/workflows.featured.add + https://docs.slack.dev/reference/methods/workflows.featured.add """ kwargs.update({"channel_id": channel_id}) if isinstance(trigger_ids, (list, tuple)): @@ -5450,7 +5450,7 @@ def workflows_featured_list( **kwargs, ) -> Union[Future, SlackResponse]: """List the featured workflows for specified channels. - https://api.slack.com/methods/workflows.featured.list + https://docs.slack.dev/reference/methods/workflows.featured.list """ if isinstance(channel_ids, (list, tuple)): kwargs.update({"channel_ids": ",".join(channel_ids)}) @@ -5466,7 +5466,7 @@ def workflows_featured_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Remove featured workflows from a channel. - https://api.slack.com/methods/workflows.featured.remove + https://docs.slack.dev/reference/methods/workflows.featured.remove """ kwargs.update({"channel_id": channel_id}) if isinstance(trigger_ids, (list, tuple)): @@ -5483,7 +5483,7 @@ def workflows_featured_set( **kwargs, ) -> Union[Future, SlackResponse]: """Set featured workflows for a channel. - https://api.slack.com/methods/workflows.featured.set + https://docs.slack.dev/reference/methods/workflows.featured.set """ kwargs.update({"channel_id": channel_id}) if isinstance(trigger_ids, (list, tuple)): @@ -5500,7 +5500,7 @@ def workflows_stepCompleted( **kwargs, ) -> Union[Future, SlackResponse]: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5517,7 +5517,7 @@ def workflows_stepFailed( **kwargs, ) -> Union[Future, SlackResponse]: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5538,7 +5538,7 @@ def workflows_updateStep( **kwargs, ) -> Union[Future, SlackResponse]: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: diff --git a/slack_sdk/webhook/async_client.py b/slack_sdk/webhook/async_client.py index a737b4e31..dded0491f 100644 --- a/slack_sdk/webhook/async_client.py +++ b/slack_sdk/webhook/async_client.py @@ -53,7 +53,7 @@ def __init__( ): """API client for Incoming Webhooks and `response_url` - https://api.slack.com/messaging/webhooks + https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/ Args: url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`) diff --git a/slack_sdk/webhook/client.py b/slack_sdk/webhook/client.py index 35059a554..d7f9f603d 100644 --- a/slack_sdk/webhook/client.py +++ b/slack_sdk/webhook/client.py @@ -48,7 +48,7 @@ def __init__( ): """API client for Incoming Webhooks and `response_url` - https://api.slack.com/messaging/webhooks + https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/ Args: url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`) diff --git a/tests/signature/test_signature_verifier.py b/tests/signature/test_signature_verifier.py index f2dc79a01..ef7ac0512 100644 --- a/tests/signature/test_signature_verifier.py +++ b/tests/signature/test_signature_verifier.py @@ -15,7 +15,7 @@ def setUp(self): def tearDown(self): pass - # https://api.slack.com/authentication/verifying-requests-from-slack + # https://docs.slack.dev/authentication/verifying-requests-from-slack/ signing_secret = "8f742231b10e8888abcd99yyyzzz85a5" body = "token=xyzz0WbapA4vBCDEFasx0q6G&team_id=T1DC2JH3J&team_domain=testteamnow&channel_id=G8PSS9T3V&channel_name=foobar&user_id=U2CERLKJA&user_name=roadrunner&command=%2Fwebhook-collect&text=&response_url=https%3A%2F%2Fhooks.slack.com%2Fcommands%2FT1DC2JH3J%2F397700885554%2F96rGlfmibIGlgcZRskXaIFfN&trigger_id=398738663015.47445629121.803a0bc887a14d10d2c447fce8b6703c" diff --git a/tests/slack_sdk/models/test_blocks.py b/tests/slack_sdk/models/test_blocks.py index f7d8c129b..f8753cccc 100644 --- a/tests/slack_sdk/models/test_blocks.py +++ b/tests/slack_sdk/models/test_blocks.py @@ -34,7 +34,7 @@ from . import STRING_3001_CHARS -# https://api.slack.com/reference/block-kit/blocks +# https://docs.slack.dev/reference/block-kit/blocks class BlockTests(unittest.TestCase): diff --git a/tests/slack_sdk/models/test_elements.py b/tests/slack_sdk/models/test_elements.py index 6a9545b5e..9aa3aa474 100644 --- a/tests/slack_sdk/models/test_elements.py +++ b/tests/slack_sdk/models/test_elements.py @@ -112,7 +112,7 @@ def test_document_3(self): input = { "type": "button", "text": {"type": "plain_text", "text": "Link Button"}, - "url": "https://api.slack.com/block-kit", + "url": "https://docs.slack.dev/block-kit/", } self.assertDictEqual(input, ButtonElement(**input).to_dict()) self.assertDictEqual(input, LinkButtonElement(**input).to_dict()) @@ -1039,7 +1039,7 @@ def test_document(self): }, { "text": {"type": "plain_text", "text": "*this is plain_text text*"}, - # https://api.slack.com/reference/block-kit/composition-objects#option + # https://docs.slack.dev/reference/block-kit/composition-objects/option-object "url": "https://www.example.com", }, ], diff --git a/tests/slack_sdk/signature/test_signature_verifier.py b/tests/slack_sdk/signature/test_signature_verifier.py index be3a0b72b..1635c1f62 100644 --- a/tests/slack_sdk/signature/test_signature_verifier.py +++ b/tests/slack_sdk/signature/test_signature_verifier.py @@ -15,7 +15,7 @@ def setUp(self): def tearDown(self): pass - # https://api.slack.com/authentication/verifying-requests-from-slack + # https://docs.slack.dev/authentication/verifying-requests-from-slack/ signing_secret = "8f742231b10e8888abcd99yyyzzz85a5" body = "token=xyzz0WbapA4vBCDEFasx0q6G&team_id=T1DC2JH3J&team_domain=testteamnow&channel_id=G8PSS9T3V&channel_name=foobar&user_id=U2CERLKJA&user_name=roadrunner&command=%2Fwebhook-collect&text=&response_url=https%3A%2F%2Fhooks.slack.com%2Fcommands%2FT1DC2JH3J%2F397700885554%2F96rGlfmibIGlgcZRskXaIFfN&trigger_id=398738663015.47445629121.803a0bc887a14d10d2c447fce8b6703c" diff --git a/tests/web/classes/test_blocks.py b/tests/web/classes/test_blocks.py index 4874b8514..4e9ce2fb2 100644 --- a/tests/web/classes/test_blocks.py +++ b/tests/web/classes/test_blocks.py @@ -19,7 +19,7 @@ from . import STRING_3001_CHARS -# https://api.slack.com/reference/block-kit/blocks +# https://docs.slack.dev/reference/block-kit/blocks class BlockTests(unittest.TestCase): diff --git a/tests/web/classes/test_elements.py b/tests/web/classes/test_elements.py index 27f49ebab..215ec8aac 100644 --- a/tests/web/classes/test_elements.py +++ b/tests/web/classes/test_elements.py @@ -60,7 +60,7 @@ def test_document_3(self): input = { "type": "button", "text": {"type": "plain_text", "text": "Link Button"}, - "url": "https://api.slack.com/block-kit", + "url": "https://docs.slack.dev/block-kit/", } self.assertDictEqual(input, ButtonElement(**input).to_dict()) self.assertDictEqual(input, LinkButtonElement(**input).to_dict()) @@ -635,7 +635,7 @@ def test_document(self): }, { "text": {"type": "plain_text", "text": "*this is plain_text text*"}, - # https://api.slack.com/reference/block-kit/composition-objects#option + # https://docs.slack.dev/reference/block-kit/composition-objects/option-object "url": "https://www.example.com", }, ], diff --git a/tutorial/01-creating-the-slack-app.md b/tutorial/01-creating-the-slack-app.md index f617bb348..81e3de76b 100644 --- a/tutorial/01-creating-the-slack-app.md +++ b/tutorial/01-creating-the-slack-app.md @@ -9,7 +9,7 @@ ### Give your app permissions -[Scopes](https://api.slack.com/scopes) give your app permission to do things (for example, post messages) in your development workspace. +[Scopes](https://docs.slack.dev/reference/scopes) give your app permission to do things (for example, post messages) in your development workspace. - Navigate to **OAuth & Permissions** on the sidebar to add scopes to your app @@ -19,8 +19,8 @@ For now, we'll only use one scope. -- Add the [`chat:write` scope](https://api.slack.com/scopes/chat:write) to grant your app the permission to post messages in channels it's a member of. -- Add the [`im:write` scope](https://api.slack.com/scopes/im:write) to grant your app the permission to post messages in DMs. +- Add the [`chat:write` scope](https://docs.slack.dev/reference/scopes/chat.write/) to grant your app the permission to post messages in channels it's a member of. +- Add the [`im:write` scope](https://docs.slack.dev/reference/scopes/im.write/) to grant your app the permission to post messages in DMs. 🎉 You should briefly see a success banner. diff --git a/tutorial/02-building-a-message.md b/tutorial/02-building-a-message.md index fa4416d0a..9f2481a84 100644 --- a/tutorial/02-building-a-message.md +++ b/tutorial/02-building-a-message.md @@ -2,7 +2,7 @@ The code for this step is available [here](PythOnBoardingBot/onboarding_tutorial.py). -> 💡 **[Block Kit](https://api.slack.com/block-kit)** is a UI framework for Slack apps that offers a balance of control and flexibility when building experiences in messages and other surfaces. Customize the order and appearance of information and guide users through your app's capabilities by composing, updating, sequencing, and stacking blocks — reusable components that work almost everywhere in Slack. You can experiment and prototype with Block Kit using the [Block Kit Builder](https://api.slack.com/tools/block-kit-builder). +> 💡 **[Block Kit](https://docs.slack.dev/block-kit/)** is a UI framework for Slack apps that offers a balance of control and flexibility when building experiences in messages and other surfaces. Customize the order and appearance of information and guide users through your app's capabilities by composing, updating, sequencing, and stacking blocks — reusable components that work almost everywhere in Slack. You can experiment and prototype with Block Kit using the [Block Kit Builder](https://api.slack.com/tools/block-kit-builder). We're going to be using Block Kit to build our onboarding tutorial messages. diff --git a/tutorial/03-responding-to-slack-events.md b/tutorial/03-responding-to-slack-events.md index b6a998800..70c904e50 100644 --- a/tutorial/03-responding-to-slack-events.md +++ b/tutorial/03-responding-to-slack-events.md @@ -81,7 +81,7 @@ def start_onboarding(user_id: str, channel: str, client: WebClient): ### Responding to events in Slack -When events occur in Slack there are two primary ways to be notified about them. We can send you an [HTTP Request through our Events API](https://api.slack.com/apis/connections/events-api), or you can stream events through a WebSocket connection with our [Socket Mode](https://api.slack.com/apis/connections/socket) API. If you're behind a firewall and cannot receive incoming web requests from Slack, we recommend going with Socket Mode. +When events occur in Slack there are two primary ways to be notified about them. We can send you an [HTTP Request through our Events API](https://docs.slack.dev/apis/events-api/), or you can stream events through a WebSocket connection with our [Socket Mode](https://docs.slack.dev/apis/events-api/using-socket-mode/) API. If you're behind a firewall and cannot receive incoming web requests from Slack, we recommend going with Socket Mode. In this tutorial we'll be using the Events API and the [Bolt for Python](https://github.com/slackapi/bolt-python). @@ -96,7 +96,7 @@ Back to our application, it's time to link our onboarding functionality to Slack # Note: Bolt provides a WebClient instance as an argument to the listener function # we've defined here, which we then use to access Slack Web API methods like conversations_open. -# For more info, checkout: https://slack.dev/bolt-python/concepts#message-listening +# For more info, checkout: https://docs.slack.dev/tools/bolt-python/concepts/message-listening @app.event("team_join") def onboarding_message(event, client): """Create and send an onboarding welcome message to new users. Save the diff --git a/tutorial/PythOnBoardingBot/app.py b/tutorial/PythOnBoardingBot/app.py index b24852a80..7245c71ab 100644 --- a/tutorial/PythOnBoardingBot/app.py +++ b/tutorial/PythOnBoardingBot/app.py @@ -38,7 +38,7 @@ def start_onboarding(user_id: str, channel: str, client: WebClient): # Note: Bolt provides a WebClient instance as an argument to the listener function # we've defined here, which we then use to access Slack Web API methods like conversations_open. -# For more info, checkout: https://slack.dev/bolt-python/concepts#message-listening +# For more info, checkout: https://docs.slack.dev/tools/bolt-python/concepts/message-listening @app.event("team_join") def onboarding_message(event, client): """Create and send an onboarding welcome message to new users. Save the From a5a2e5babc1197887738bced2b879567f152b7c9 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Mon, 6 Oct 2025 15:51:43 -0700 Subject: [PATCH 34/72] feat: add ai-enabled features text streaming methods, feedback blocks, and loading state (#1766) Co-authored-by: William Bergamin Co-authored-by: Michael Brooks Co-authored-by: Luke Russell <31357343+lukegalbraithrussell@users.noreply.github.com> --- docs/english/web.md | 110 ++++ docs/reference/index.html | 448 ++++++++++++++-- docs/reference/models/basic_objects.html | 1 + .../models/blocks/basic_components.html | 162 ++++++ .../models/blocks/block_elements.html | 208 +++++++ docs/reference/models/blocks/blocks.html | 116 ++++ docs/reference/models/blocks/index.html | 486 +++++++++++++++++ docs/reference/models/index.html | 1 + docs/reference/web/async_chat_stream.html | 506 ++++++++++++++++++ docs/reference/web/async_client.html | 448 ++++++++++++++-- docs/reference/web/chat_stream.html | 506 ++++++++++++++++++ docs/reference/web/client.html | 448 ++++++++++++++-- docs/reference/web/index.html | 458 ++++++++++++++-- docs/reference/web/legacy_client.html | 268 ++++++++-- scripts/codegen.py | 55 +- slack_sdk/models/blocks/__init__.py | 127 +++-- slack_sdk/models/blocks/basic_components.py | 67 ++- slack_sdk/models/blocks/block_elements.py | 119 +++- slack_sdk/models/blocks/blocks.py | 64 ++- slack_sdk/web/async_chat_stream.py | 212 ++++++++ slack_sdk/web/async_client.py | 202 +++++-- slack_sdk/web/chat_stream.py | 202 +++++++ slack_sdk/web/client.py | 202 +++++-- slack_sdk/web/legacy_client.py | 138 +++-- tests/slack_sdk/models/test_blocks.py | 82 ++- tests/slack_sdk/models/test_elements.py | 106 +++- tests/slack_sdk/models/test_objects.py | 76 ++- tests/slack_sdk/web/test_chat_stream.py | 188 +++++++ .../web/test_async_chat_stream.py | 193 +++++++ .../web/test_web_client_coverage.py | 32 +- .../web_response_chat_stream_test.json | 4 + ..._response_chat_stream_test_missing_ts.json | 3 + .../web_response_chat_stream_test_token1.json | 3 + .../web_response_chat_stream_test_token2.json | 3 + 34 files changed, 5805 insertions(+), 439 deletions(-) create mode 100644 docs/reference/web/async_chat_stream.html create mode 100644 docs/reference/web/chat_stream.html create mode 100644 slack_sdk/web/async_chat_stream.py create mode 100644 slack_sdk/web/chat_stream.py create mode 100644 tests/slack_sdk/web/test_chat_stream.py create mode 100644 tests/slack_sdk_async/web/test_async_chat_stream.py create mode 100644 tests/slack_sdk_fixture/web_response_chat_stream_test.json create mode 100644 tests/slack_sdk_fixture/web_response_chat_stream_test_missing_ts.json create mode 100644 tests/slack_sdk_fixture/web_response_chat_stream_test_token1.json create mode 100644 tests/slack_sdk_fixture/web_response_chat_stream_test_token2.json diff --git a/docs/english/web.md b/docs/english/web.md index 5069e5461..49d6c5871 100644 --- a/docs/english/web.md +++ b/docs/english/web.md @@ -33,6 +33,8 @@ except SlackApiError as e: assert e.response["error"] # str like 'invalid_auth', 'channel_not_found' ``` +### Sending ephemeral messages + Sending an ephemeral message, which is only visible to an assigned user in a specified channel, is nearly the same as sending a regular message but with an additional `user` parameter. ``` python @@ -51,6 +53,114 @@ response = client.chat_postEphemeral( See the [`chat.postEphemeral`](/reference/methods/chat.postEphemeral) API method for more details. +### Sending streaming messages {#sending-streaming-messages} + +You can have your app's messages stream in to replicate conventional AI chatbot behavior. This is done through three Web API methods: + +* [`chat_startStream`](/reference/methods/chat.startstream) +* [`chat_appendStream`](/reference/methods/chat.appendstream) +* [`chat_stopStream`](/reference/methods/chat.stopstream) + +:::tip[The Python Slack SDK provides a [`chat_stream()`](https://docs.slack.dev/tools/python-slack-sdk/reference/web/client.html#slack_sdk.web.client.WebClient.chat_stream) helper utility to streamline calling these methods.] + +See the [_Streaming messages_](/tools/bolt-python/concepts/message-sending#streaming-messages) section of the Bolt for Python docs for implementation instructions. + +::: + +#### Starting the message stream {#starting-stream} + +First you need to begin the message stream: + +```python +# Example: Stream a response to any message +@app.message() +def handle_message(message, client): + channel_id = event.get("channel") + team_id = event.get("team") + thread_ts = event.get("thread_ts") or event.get("ts") + user_id = event.get("user") + + # Start a new message stream + stream_response = client.chat_startStream( + channel=channel_id, + recipient_team_id=team_id, + recipient_user_id=user_id, + thread_ts=thread_ts, + ) + stream_ts = stream_response["ts"] +``` + +#### Appending content to the message stream {#appending-stream} + +With the stream started, you can then append text to it in chunks to convey a streaming effect. + +The structure of the text coming in will depend on your source. The following code snippet uses OpenAI's response structure as an example: + +```python +# continued from above + for event in returned_message: + if event.type == "response.output_text.delta": + client.chat_appendStream( + channel=channel_id, + ts=stream_ts, + markdown_text=f"{event.delta}" + ) + else: + continue +``` + +#### Stopping the message stream {#stopping-stream} + +Your app can then end the stream with the `chat_stopStream` method: + +```python +# continued from above + client.chat_stopStream( + channel=channel_id, + ts=stream_ts + ) +``` + +The method also provides you an opportunity to request user feedback on your app's responses using the [feedback buttons](/reference/block-kit/block-elements/feedback-buttons-element) block element within the [context actions](/reference/block-kit/blocks/context-actions-block) block. The user will be presented with thumbs up and thumbs down buttons which send an action to your app when pressed. + +```python +def create_feedback_block() -> List[Block]: + blocks: List[Block] = [ + ContextActionsBlock( + elements=[ + FeedbackButtonsElement( + action_id="feedback", + positive_button=FeedbackButtonObject( + text="Good Response", + accessibility_label="Submit positive feedback on this response", + value="good-feedback", + ), + negative_button=FeedbackButtonObject( + text="Bad Response", + accessibility_label="Submit negative feedback on this response", + value="bad-feedback", + ), + ) + ] + ) + ] + return blocks + +@app.message() +def handle_message(message, client): + # ... previous streaming code ... + + # Stop the stream and add interactive elements + feedback_block = create_feedback_block() + client.chat_stopStream( + channel=channel_id, + ts=stream_ts, + blocks=feedback_block + ) +``` + +See [Formatting messages with Block Kit](#block-kit) below for more details on using Block Kit with messages. + ## Formatting messages with Block Kit {#block-kit} Messages posted from apps can contain more than just text; they can also include full user interfaces composed of blocks using [Block Kit](/block-kit). diff --git a/docs/reference/index.html b/docs/reference/index.html index 6671d4f16..282903146 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -2201,13 +2201,17 @@

              Classes

              channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs) def assistant_threads_setTitle( self, @@ -2217,7 +2221,7 @@

              Classes

              title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) @@ -2232,7 +2236,7 @@

              Classes

              prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -2746,6 +2750,27 @@

              Classes

              # -------------------------- + def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> SlackResponse: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.appendStream", json=kwargs) + def chat_delete( self, *, @@ -2950,6 +2975,146 @@

              Classes

              # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) + def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return self.api_call("chat.scheduledMessages.list", params=kwargs) + + def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.startStream", json=kwargs) + + def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> SlackResponse: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.stopStream", json=kwargs) + + def chat_stream( + self, + *, + buffer_size: int = 256, + channel: str, + thread_ts: str, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> ChatStream: + """Stream markdown text into a conversation. + + This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, + the stream can be stopped with concluding arguments such as "blocks" for gathering feedback. + + The following methods are used: + + - chat.startStream: Starts a new streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.startStream). + - chat.appendStream: Appends text to an existing streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.appendStream). + - chat.stopStream: Stops a streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.stopStream). + + Args: + buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this + value decreases the number of method calls made for the same amount of text, which is useful to avoid rate + limits. Default: 256. + channel: An encoded ID that represents a channel, private group, or DM. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + ChatStream instance for managing the stream + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + return ChatStream( + self, + logger=self._logger, + channel=channel, + thread_ts=thread_ts, + recipient_team_id=recipient_team_id, + recipient_user_id=recipient_user_id, + buffer_size=buffer_size, + **kwargs, + ) + def chat_unfurl( self, *, @@ -3030,32 +3195,6 @@

              Classes

              # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) - def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> SlackResponse: - """Lists all scheduled messages. - https://docs.slack.dev/reference/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return self.api_call("chat.scheduledMessages.list", params=kwargs) - def conversations_acceptSharedInvite( self, *, @@ -8890,7 +9029,7 @@

              Methods

              https://docs.slack.dev/reference/methods/apps.uninstall

              -def assistant_threads_setStatus(self, *, channel_id: str, thread_ts: str, status: str, **kwargs) ‑> SlackResponse +def assistant_threads_setStatus(self,
              *,
              channel_id: str,
              thread_ts: str,
              status: str,
              loading_messages: List[str] | None = None,
              **kwargs) ‑> SlackResponse
              @@ -8903,15 +9042,19 @@

              Methods

              channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs)
              -

              Revokes a token. +

              @@ -8931,7 +9074,7 @@

              Methods

              prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -8939,7 +9082,7 @@

              Methods

              kwargs.update({"title": title}) return self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
              -

              Revokes a token. +

              Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

              @@ -8958,13 +9101,13 @@

              Methods

              title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs)
              -

              Revokes a token. +

              Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle

              @@ -9835,6 +9978,38 @@

              Methods

              Unarchives a channel.

              +
              +def chat_appendStream(self, *, channel: str, ts: str, markdown_text: str, **kwargs) ‑> SlackResponse +
              +
              +
              + +Expand source code + +
              def chat_appendStream(
              +    self,
              +    *,
              +    channel: str,
              +    ts: str,
              +    markdown_text: str,
              +    **kwargs,
              +) -> SlackResponse:
              +    """Appends text to an existing streaming conversation.
              +    https://docs.slack.dev/reference/methods/chat.appendStream
              +    """
              +    kwargs.update(
              +        {
              +            "channel": channel,
              +            "ts": ts,
              +            "markdown_text": markdown_text,
              +        }
              +    )
              +    kwargs = _remove_none_values(kwargs)
              +    return self.api_call("chat.appendStream", json=kwargs)
              +
              +

              Appends text to an existing streaming conversation. +https://docs.slack.dev/reference/methods/chat.appendStream

              +
              def chat_delete(self, *, channel: str, ts: str, as_user: bool | None = None, **kwargs) ‑> SlackResponse
              @@ -10153,6 +10328,195 @@

              Methods

              +
              +def chat_startStream(self,
              *,
              channel: str,
              thread_ts: str,
              markdown_text: str | None = None,
              recipient_team_id: str | None = None,
              recipient_user_id: str | None = None,
              **kwargs) ‑> SlackResponse
              +
              +
              +
              + +Expand source code + +
              def chat_startStream(
              +    self,
              +    *,
              +    channel: str,
              +    thread_ts: str,
              +    markdown_text: Optional[str] = None,
              +    recipient_team_id: Optional[str] = None,
              +    recipient_user_id: Optional[str] = None,
              +    **kwargs,
              +) -> SlackResponse:
              +    """Starts a new streaming conversation.
              +    https://docs.slack.dev/reference/methods/chat.startStream
              +    """
              +    kwargs.update(
              +        {
              +            "channel": channel,
              +            "thread_ts": thread_ts,
              +            "markdown_text": markdown_text,
              +            "recipient_team_id": recipient_team_id,
              +            "recipient_user_id": recipient_user_id,
              +        }
              +    )
              +    kwargs = _remove_none_values(kwargs)
              +    return self.api_call("chat.startStream", json=kwargs)
              +
              +

              Starts a new streaming conversation. +https://docs.slack.dev/reference/methods/chat.startStream

              +
              +
              +def chat_stopStream(self,
              *,
              channel: str,
              ts: str,
              markdown_text: str | None = None,
              blocks: str | Sequence[Dict | Block] | None = None,
              metadata: Dict | Metadata | None = None,
              **kwargs) ‑> SlackResponse
              +
              +
              +
              + +Expand source code + +
              def chat_stopStream(
              +    self,
              +    *,
              +    channel: str,
              +    ts: str,
              +    markdown_text: Optional[str] = None,
              +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
              +    metadata: Optional[Union[Dict, Metadata]] = None,
              +    **kwargs,
              +) -> SlackResponse:
              +    """Stops a streaming conversation.
              +    https://docs.slack.dev/reference/methods/chat.stopStream
              +    """
              +    kwargs.update(
              +        {
              +            "channel": channel,
              +            "ts": ts,
              +            "markdown_text": markdown_text,
              +            "blocks": blocks,
              +            "metadata": metadata,
              +        }
              +    )
              +    _parse_web_class_objects(kwargs)
              +    kwargs = _remove_none_values(kwargs)
              +    return self.api_call("chat.stopStream", json=kwargs)
              +
              + +
              +
              +def chat_stream(self,
              *,
              buffer_size: int = 256,
              channel: str,
              thread_ts: str,
              recipient_team_id: str | None = None,
              recipient_user_id: str | None = None,
              **kwargs) ‑> ChatStream
              +
              +
              +
              + +Expand source code + +
              def chat_stream(
              +    self,
              +    *,
              +    buffer_size: int = 256,
              +    channel: str,
              +    thread_ts: str,
              +    recipient_team_id: Optional[str] = None,
              +    recipient_user_id: Optional[str] = None,
              +    **kwargs,
              +) -> ChatStream:
              +    """Stream markdown text into a conversation.
              +
              +    This method starts a new chat stream in a conversation that can be appended to. After appending an entire message,
              +    the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.
              +
              +    The following methods are used:
              +
              +    - chat.startStream: Starts a new streaming conversation.
              +      [Reference](https://docs.slack.dev/reference/methods/chat.startStream).
              +    - chat.appendStream: Appends text to an existing streaming conversation.
              +      [Reference](https://docs.slack.dev/reference/methods/chat.appendStream).
              +    - chat.stopStream: Stops a streaming conversation.
              +      [Reference](https://docs.slack.dev/reference/methods/chat.stopStream).
              +
              +    Args:
              +        buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this
              +          value decreases the number of method calls made for the same amount of text, which is useful to avoid rate
              +          limits. Default: 256.
              +        channel: An encoded ID that represents a channel, private group, or DM.
              +        thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user
              +          request.
              +        recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when
              +          streaming to channels.
              +        recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
              +        **kwargs: Additional arguments passed to the underlying API calls.
              +
              +    Returns:
              +        ChatStream instance for managing the stream
              +
              +    Example:
              +        ```python
              +        streamer = client.chat_stream(
              +            channel="C0123456789",
              +            thread_ts="1700000001.123456",
              +            recipient_team_id="T0123456789",
              +            recipient_user_id="U0123456789",
              +        )
              +        streamer.append(markdown_text="**hello wo")
              +        streamer.append(markdown_text="rld!**")
              +        streamer.stop()
              +        ```
              +    """
              +    return ChatStream(
              +        self,
              +        logger=self._logger,
              +        channel=channel,
              +        thread_ts=thread_ts,
              +        recipient_team_id=recipient_team_id,
              +        recipient_user_id=recipient_user_id,
              +        buffer_size=buffer_size,
              +        **kwargs,
              +    )
              +
              +

              Stream markdown text into a conversation.

              +

              This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, +the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.

              +

              The following methods are used:

              +
                +
              • chat.startStream: Starts a new streaming conversation. +Reference.
              • +
              • chat.appendStream: Appends text to an existing streaming conversation. +Reference.
              • +
              • chat.stopStream: Stops a streaming conversation. +Reference.
              • +
              +

              Args

              +
              +
              buffer_size
              +
              The length of markdown_text to buffer in-memory before calling a stream method. Increasing this +value decreases the number of method calls made for the same amount of text, which is useful to avoid rate +limits. Default: 256.
              +
              channel
              +
              An encoded ID that represents a channel, private group, or DM.
              +
              thread_ts
              +
              Provide another message's ts value to reply to. Streamed messages should always be replies to a user +request.
              +
              recipient_team_id
              +
              The encoded ID of the team the user receiving the streaming text belongs to. Required when +streaming to channels.
              +
              recipient_user_id
              +
              The encoded ID of the user to receive the streaming text. Required when streaming to channels.
              +
              **kwargs
              +
              Additional arguments passed to the underlying API calls.
              +
              +

              Returns

              +

              ChatStream instance for managing the stream

              +

              Example

              +
              streamer = client.chat_stream(
              +    channel="C0123456789",
              +    thread_ts="1700000001.123456",
              +    recipient_team_id="T0123456789",
              +    recipient_user_id="U0123456789",
              +)
              +streamer.append(markdown_text="**hello wo")
              +streamer.append(markdown_text="rld!**")
              +streamer.stop()
              +
              +
              def chat_unfurl(self,
              *,
              channel: str | None = None,
              ts: str | None = None,
              source: str | None = None,
              unfurl_id: str | None = None,
              unfurls: Dict[str, Dict] | None = None,
              user_auth_blocks: str | Sequence[Dict | Block] | None = None,
              user_auth_message: str | None = None,
              user_auth_required: bool | None = None,
              user_auth_url: str | None = None,
              **kwargs) ‑> SlackResponse
              @@ -15119,6 +15483,7 @@

              WebClientchannels_setPurpose
            • channels_setTopic
            • channels_unarchive
            • +
            • chat_appendStream
            • chat_delete
            • chat_deleteScheduledMessage
            • chat_getPermalink
            • @@ -15127,6 +15492,9 @@

              WebClientchat_postMessage
            • chat_scheduleMessage
            • chat_scheduledMessages_list
            • +
            • chat_startStream
            • +
            • chat_stopStream
            • +
            • chat_stream
            • chat_unfurl
            • chat_update
            • conversations_acceptSharedInvite
            • diff --git a/docs/reference/models/basic_objects.html b/docs/reference/models/basic_objects.html index b49694566..972273cc9 100644 --- a/docs/reference/models/basic_objects.html +++ b/docs/reference/models/basic_objects.html @@ -194,6 +194,7 @@

              Subclasses

            • AttachmentField
            • ConfirmObject
            • DispatchActionConfig
            • +
            • FeedbackButtonObject
            • Option
            • OptionGroup
            • SlackFile
            • diff --git a/docs/reference/models/blocks/basic_components.html b/docs/reference/models/blocks/basic_components.html index 2d1205201..8a48c9a6a 100644 --- a/docs/reference/models/blocks/basic_components.html +++ b/docs/reference/models/blocks/basic_components.html @@ -341,6 +341,157 @@

              Inherited members

            +
            +class FeedbackButtonObject +(*,
            text: str | Dict[str, Any] | PlainTextObject,
            accessibility_label: str | None = None,
            value: str,
            **others: Dict[str, Any])
            +
            +
            +
            + +Expand source code + +
            class FeedbackButtonObject(JsonObject):
            +    attributes: Set[str] = set()
            +
            +    text_max_length = 75
            +    value_max_length = 2000
            +
            +    @classmethod
            +    def parse(cls, feedback_button: Union["FeedbackButtonObject", Dict[str, Any]]):
            +        if feedback_button:
            +            if isinstance(feedback_button, FeedbackButtonObject):
            +                return feedback_button
            +            elif isinstance(feedback_button, dict):
            +                return FeedbackButtonObject(**feedback_button)
            +            else:
            +                # Not yet implemented: show some warning here
            +                return None
            +        return None
            +
            +    def __init__(
            +        self,
            +        *,
            +        text: Union[str, Dict[str, Any], PlainTextObject],
            +        accessibility_label: Optional[str] = None,
            +        value: str,
            +        **others: Dict[str, Any],
            +    ):
            +        """
            +        A feedback button element object for either positive or negative feedback.
            +
            +        Args:
            +            text (required): An object containing some text. Maximum length for this field is 75 characters.
            +            accessibility_label: A label for longer descriptive text about a button element. This label will be read out by
            +                screen readers instead of the button `text` object.
            +            value (required): The button value. Maximum length for this field is 2000 characters.
            +        """
            +        self._text: Optional[TextObject] = PlainTextObject.parse(text, default_type=PlainTextObject.type)
            +        self._accessibility_label: Optional[str] = accessibility_label
            +        self._value: Optional[str] = value
            +        show_unknown_key_warning(self, others)
            +
            +    @JsonValidator(f"text attribute cannot exceed {text_max_length} characters")
            +    def text_length(self) -> bool:
            +        return self._text is None or len(self._text.text) <= self.text_max_length
            +
            +    @JsonValidator(f"value attribute cannot exceed {value_max_length} characters")
            +    def value_length(self) -> bool:
            +        return self._value is None or len(self._value) <= self.value_max_length
            +
            +    def to_dict(self) -> Dict[str, Any]:
            +        self.validate_json()
            +        json: Dict[str, Union[str, dict]] = {}
            +        if self._text:
            +            json["text"] = self._text.to_dict()
            +        if self._accessibility_label:
            +            json["accessibility_label"] = self._accessibility_label
            +        if self._value:
            +            json["value"] = self._value
            +        return json
            +
            +

            The base class for JSON serializable class objects

            +

            A feedback button element object for either positive or negative feedback.

            +

            Args

            +
            +
            text : required
            +
            An object containing some text. Maximum length for this field is 75 characters.
            +
            accessibility_label
            +
            A label for longer descriptive text about a button element. This label will be read out by +screen readers instead of the button text object.
            +
            value : required
            +
            The button value. Maximum length for this field is 2000 characters.
            +
            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes : Set[str]
            +
            +

            The type of the None singleton.

            +
            +
            var text_max_length
            +
            +

            The type of the None singleton.

            +
            +
            var value_max_length
            +
            +

            The type of the None singleton.

            +
            +
            +

            Static methods

            +
            +
            +def parse(feedback_button: ForwardRef('FeedbackButtonObject') | Dict[str, Any]) +
            +
            +
            +
            +
            +

            Methods

            +
            +
            +def text_length(self) ‑> bool +
            +
            +
            + +Expand source code + +
            @JsonValidator(f"text attribute cannot exceed {text_max_length} characters")
            +def text_length(self) -> bool:
            +    return self._text is None or len(self._text.text) <= self.text_max_length
            +
            +
            +
            +
            +def value_length(self) ‑> bool +
            +
            +
            + +Expand source code + +
            @JsonValidator(f"value attribute cannot exceed {value_max_length} characters")
            +def value_length(self) -> bool:
            +    return self._value is None or len(self._value) <= self.value_max_length
            +
            +
            +
            +
            +

            Inherited members

            + +
            class MarkdownTextObject (*, text: str, verbatim: bool | None = None) @@ -1427,6 +1578,17 @@

            FeedbackButtonObject

            + + +
          • MarkdownTextObject

            • attributes
            • diff --git a/docs/reference/models/blocks/block_elements.html b/docs/reference/models/blocks/block_elements.html index 0e14eb433..ac23c73a1 100644 --- a/docs/reference/models/blocks/block_elements.html +++ b/docs/reference/models/blocks/block_elements.html @@ -1843,6 +1843,89 @@

              Inherited members

            +
            +class FeedbackButtonsElement +(*,
            action_id: str | None = None,
            positive_button: dict | FeedbackButtonObject,
            negative_button: dict | FeedbackButtonObject,
            **others: dict)
            +
            +
            +
            + +Expand source code + +
            class FeedbackButtonsElement(InteractiveElement):
            +    type = "feedback_buttons"
            +
            +    @property
            +    def attributes(self) -> Set[str]:  # type: ignore[override]
            +        return super().attributes.union({"positive_button", "negative_button"})
            +
            +    def __init__(
            +        self,
            +        *,
            +        action_id: Optional[str] = None,
            +        positive_button: Union[dict, FeedbackButtonObject],
            +        negative_button: Union[dict, FeedbackButtonObject],
            +        **others: dict,
            +    ):
            +        """Buttons to indicate positive or negative feedback.
            +
            +        Args:
            +            action_id (required): An identifier for this action.
            +                You can use this when you receive an interaction payload to identify the source of the action.
            +                Should be unique among all other action_ids in the containing block.
            +                Maximum length for this field is 255 characters.
            +            positive_button (required): A button to indicate positive feedback.
            +            negative_button (required): A button to indicate negative feedback.
            +        """
            +        super().__init__(action_id=action_id, type=self.type)
            +        show_unknown_key_warning(self, others)
            +
            +        self.positive_button = FeedbackButtonObject.parse(positive_button)
            +        self.negative_button = FeedbackButtonObject.parse(negative_button)
            +
            +

            Block Elements are things that exists inside of your Blocks. +https://docs.slack.dev/reference/block-kit/block-elements/

            +

            Buttons to indicate positive or negative feedback.

            +

            Args

            +
            +
            action_id : required
            +
            An identifier for this action. +You can use this when you receive an interaction payload to identify the source of the action. +Should be unique among all other action_ids in the containing block. +Maximum length for this field is 255 characters.
            +
            positive_button : required
            +
            A button to indicate positive feedback.
            +
            negative_button : required
            +
            A button to indicate negative feedback.
            +
            +

            Ancestors

            + +

            Class variables

            +
            +
            var type
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            class FileInputElement (*,
            action_id: str | None = None,
            filetypes: List[str] | None = None,
            max_files: int | None = None,
            **others: dict)
            @@ -1962,6 +2045,117 @@

            Inherited members

          +
          +class IconButtonElement +(*,
          action_id: str | None = None,
          icon: str,
          text: str | dict | TextObject,
          accessibility_label: str | None = None,
          value: str | None = None,
          visible_to_user_ids: List[str] | None = None,
          confirm: dict | ConfirmObject | None = None,
          **others: dict)
          +
          +
          +
          + +Expand source code + +
          class IconButtonElement(InteractiveElement):
          +    type = "icon_button"
          +
          +    @property
          +    def attributes(self) -> Set[str]:  # type: ignore[override]
          +        return super().attributes.union({"icon", "text", "accessibility_label", "value", "visible_to_user_ids", "confirm"})
          +
          +    def __init__(
          +        self,
          +        *,
          +        action_id: Optional[str] = None,
          +        icon: str,
          +        text: Union[str, dict, TextObject],
          +        accessibility_label: Optional[str] = None,
          +        value: Optional[str] = None,
          +        visible_to_user_ids: Optional[List[str]] = None,
          +        confirm: Optional[Union[dict, ConfirmObject]] = None,
          +        **others: dict,
          +    ):
          +        """An icon button to perform actions.
          +
          +        Args:
          +            action_id: An identifier for this action.
          +                You can use this when you receive an interaction payload to identify the source of the action.
          +                Should be unique among all other action_ids in the containing block.
          +                Maximum length for this field is 255 characters.
          +            icon (required): The icon to show (e.g., 'trash').
          +            text (required): Defines an object containing some text.
          +            accessibility_label: A label for longer descriptive text about a button element.
          +                This label will be read out by screen readers instead of the button text object.
          +                Maximum length for this field is 75 characters.
          +            value: The button value.
          +                Maximum length for this field is 2000 characters.
          +            visible_to_user_ids: User IDs for which the icon appears.
          +                Maximum length for this field is 10 user IDs.
          +            confirm: A confirm object that defines an optional confirmation dialog after the button is clicked.
          +        """
          +        super().__init__(action_id=action_id, type=self.type)
          +        show_unknown_key_warning(self, others)
          +
          +        self.icon = icon
          +        self.text = TextObject.parse(text, PlainTextObject.type)
          +        self.accessibility_label = accessibility_label
          +        self.value = value
          +        self.visible_to_user_ids = visible_to_user_ids
          +        self.confirm = ConfirmObject.parse(confirm) if confirm else None
          +
          +

          Block Elements are things that exists inside of your Blocks. +https://docs.slack.dev/reference/block-kit/block-elements/

          +

          An icon button to perform actions.

          +

          Args

          +
          +
          action_id
          +
          An identifier for this action. +You can use this when you receive an interaction payload to identify the source of the action. +Should be unique among all other action_ids in the containing block. +Maximum length for this field is 255 characters.
          +
          icon : required
          +
          The icon to show (e.g., 'trash').
          +
          text : required
          +
          Defines an object containing some text.
          +
          accessibility_label
          +
          A label for longer descriptive text about a button element. +This label will be read out by screen readers instead of the button text object. +Maximum length for this field is 75 characters.
          +
          value
          +
          The button value. +Maximum length for this field is 2000 characters.
          +
          visible_to_user_ids
          +
          User IDs for which the icon appears. +Maximum length for this field is 10 user IDs.
          +
          confirm
          +
          A confirm object that defines an optional confirmation dialog after the button is clicked.
          +
          +

          Ancestors

          + +

          Class variables

          +
          +
          var type
          +
          +

          The type of the None singleton.

          +
          +
          +

          Inherited members

          + +
          class ImageElement (*,
          alt_text: str | None = None,
          image_url: str | None = None,
          slack_file: Dict[str, Any] | SlackFile | None = None,
          **others: dict)
          @@ -2259,6 +2453,8 @@

          Ancestors

          Subclasses

          • ButtonElement
          • +
          • FeedbackButtonsElement
          • +
          • IconButtonElement
          • InputInteractiveElement
          • OverflowMenuElement
          • WorkflowButtonElement
          • @@ -4946,6 +5142,12 @@

            FeedbackButtonsElement

            + + +
          • FileInputElement

            • attributes
            • @@ -4953,6 +5155,12 @@

            • +

              IconButtonElement

              + +
            • +
            • ImageElement

              • alt_text_max_length
              • diff --git a/docs/reference/models/blocks/blocks.html b/docs/reference/models/blocks/blocks.html index 1c6126505..e01a02436 100644 --- a/docs/reference/models/blocks/blocks.html +++ b/docs/reference/models/blocks/blocks.html @@ -220,6 +220,8 @@

                Inherited members

                return ActionsBlock(**block) elif type == ContextBlock.type: return ContextBlock(**block) + elif type == ContextActionsBlock.type: + return ContextActionsBlock(**block) elif type == InputBlock.type: return InputBlock(**block) elif type == FileBlock.type: @@ -257,6 +259,7 @@

                Subclasses

                +
                +class ContextActionsBlock +(*,
                elements: Sequence[dict | FeedbackButtonsElement | IconButtonElement],
                block_id: str | None = None,
                **others: dict)
                +
                +
                +
                + +Expand source code + +
                class ContextActionsBlock(Block):
                +    type = "context_actions"
                +    elements_max_length = 5
                +
                +    @property
                +    def attributes(self) -> Set[str]:  # type: ignore[override]
                +        return super().attributes.union({"elements"})
                +
                +    def __init__(
                +        self,
                +        *,
                +        elements: Sequence[Union[dict, FeedbackButtonsElement, IconButtonElement]],
                +        block_id: Optional[str] = None,
                +        **others: dict,
                +    ):
                +        """Displays actions as contextual info, which can include both feedback buttons and icon buttons.
                +
                +        Args:
                +            elements (required): An array of feedback_buttons or icon_button block elements. Maximum number of items is 5.
                +            block_id: A string acting as a unique identifier for a block. If not specified, one will be generated.
                +                Maximum length for this field is 255 characters.
                +                block_id should be unique for each message and each iteration of a message.
                +                If a message is updated, use a new block_id.
                +        """
                +        super().__init__(type=self.type, block_id=block_id)
                +        show_unknown_key_warning(self, others)
                +
                +        self.elements = BlockElement.parse_all(elements)
                +
                +    @JsonValidator("elements attribute must be specified")
                +    def _validate_elements(self):
                +        return self.elements is None or len(self.elements) > 0
                +
                +    @JsonValidator(f"elements attribute cannot exceed {elements_max_length} elements")
                +    def _validate_elements_length(self):
                +        return self.elements is None or len(self.elements) <= self.elements_max_length
                +
                +

                Blocks are a series of components that can be combined +to create visually rich and compellingly interactive messages. +https://docs.slack.dev/reference/block-kit/blocks

                +

                Displays actions as contextual info, which can include both feedback buttons and icon buttons.

                +

                Args

                +
                +
                elements : required
                +
                An array of feedback_buttons or icon_button block elements. Maximum number of items is 5.
                +
                block_id
                +
                A string acting as a unique identifier for a block. If not specified, one will be generated. +Maximum length for this field is 255 characters. +block_id should be unique for each message and each iteration of a message. +If a message is updated, use a new block_id.
                +
                +

                Ancestors

                + +

                Class variables

                +
                +
                var elements_max_length
                +
                +

                The type of the None singleton.

                +
                +
                var type
                +
                +

                The type of the None singleton.

                +
                +
                +

                Instance variables

                +
                +
                prop attributes : Set[str]
                +
                +
                + +Expand source code + +
                @property
                +def attributes(self) -> Set[str]:  # type: ignore[override]
                +    return super().attributes.union({"elements"})
                +
                +

                Build an unordered collection of unique elements.

                +
                +
                +

                Inherited members

                + +
                class ContextBlock (*,
                elements: Sequence[dict | ImageElement | TextObject],
                block_id: str | None = None,
                **others: dict)
                @@ -1714,6 +1822,14 @@

                ContextActionsBlock

                + + +
              • ContextBlock

                • attributes
                • diff --git a/docs/reference/models/blocks/index.html b/docs/reference/models/blocks/index.html index 22d3d0856..ad0c7b088 100644 --- a/docs/reference/models/blocks/index.html +++ b/docs/reference/models/blocks/index.html @@ -242,6 +242,8 @@

                  Inherited members

                  return ActionsBlock(**block) elif type == ContextBlock.type: return ContextBlock(**block) + elif type == ContextActionsBlock.type: + return ContextActionsBlock(**block) elif type == InputBlock.type: return InputBlock(**block) elif type == FileBlock.type: @@ -279,6 +281,7 @@

                  Subclasses

                  +
                  +class ContextActionsBlock +(*,
                  elements: Sequence[dict | FeedbackButtonsElement | IconButtonElement],
                  block_id: str | None = None,
                  **others: dict)
                  +
                  +
                  +
                  + +Expand source code + +
                  class ContextActionsBlock(Block):
                  +    type = "context_actions"
                  +    elements_max_length = 5
                  +
                  +    @property
                  +    def attributes(self) -> Set[str]:  # type: ignore[override]
                  +        return super().attributes.union({"elements"})
                  +
                  +    def __init__(
                  +        self,
                  +        *,
                  +        elements: Sequence[Union[dict, FeedbackButtonsElement, IconButtonElement]],
                  +        block_id: Optional[str] = None,
                  +        **others: dict,
                  +    ):
                  +        """Displays actions as contextual info, which can include both feedback buttons and icon buttons.
                  +
                  +        Args:
                  +            elements (required): An array of feedback_buttons or icon_button block elements. Maximum number of items is 5.
                  +            block_id: A string acting as a unique identifier for a block. If not specified, one will be generated.
                  +                Maximum length for this field is 255 characters.
                  +                block_id should be unique for each message and each iteration of a message.
                  +                If a message is updated, use a new block_id.
                  +        """
                  +        super().__init__(type=self.type, block_id=block_id)
                  +        show_unknown_key_warning(self, others)
                  +
                  +        self.elements = BlockElement.parse_all(elements)
                  +
                  +    @JsonValidator("elements attribute must be specified")
                  +    def _validate_elements(self):
                  +        return self.elements is None or len(self.elements) > 0
                  +
                  +    @JsonValidator(f"elements attribute cannot exceed {elements_max_length} elements")
                  +    def _validate_elements_length(self):
                  +        return self.elements is None or len(self.elements) <= self.elements_max_length
                  +
                  +

                  Blocks are a series of components that can be combined +to create visually rich and compellingly interactive messages. +https://docs.slack.dev/reference/block-kit/blocks

                  +

                  Displays actions as contextual info, which can include both feedback buttons and icon buttons.

                  +

                  Args

                  +
                  +
                  elements : required
                  +
                  An array of feedback_buttons or icon_button block elements. Maximum number of items is 5.
                  +
                  block_id
                  +
                  A string acting as a unique identifier for a block. If not specified, one will be generated. +Maximum length for this field is 255 characters. +block_id should be unique for each message and each iteration of a message. +If a message is updated, use a new block_id.
                  +
                  +

                  Ancestors

                  + +

                  Class variables

                  +
                  +
                  var elements_max_length
                  +
                  +

                  The type of the None singleton.

                  +
                  +
                  var type
                  +
                  +

                  The type of the None singleton.

                  +
                  +
                  +

                  Instance variables

                  +
                  +
                  prop attributes : Set[str]
                  +
                  +
                  + +Expand source code + +
                  @property
                  +def attributes(self) -> Set[str]:  # type: ignore[override]
                  +    return super().attributes.union({"elements"})
                  +
                  +

                  Build an unordered collection of unique elements.

                  +
                  +
                  +

                  Inherited members

                  + +
                  class ContextBlock (*,
                  elements: Sequence[dict | ImageElement | TextObject],
                  block_id: str | None = None,
                  **others: dict)
                  @@ -2617,6 +2725,240 @@

                  Inherited members

                +
                +class FeedbackButtonObject +(*,
                text: str | Dict[str, Any] | PlainTextObject,
                accessibility_label: str | None = None,
                value: str,
                **others: Dict[str, Any])
                +
                +
                +
                + +Expand source code + +
                class FeedbackButtonObject(JsonObject):
                +    attributes: Set[str] = set()
                +
                +    text_max_length = 75
                +    value_max_length = 2000
                +
                +    @classmethod
                +    def parse(cls, feedback_button: Union["FeedbackButtonObject", Dict[str, Any]]):
                +        if feedback_button:
                +            if isinstance(feedback_button, FeedbackButtonObject):
                +                return feedback_button
                +            elif isinstance(feedback_button, dict):
                +                return FeedbackButtonObject(**feedback_button)
                +            else:
                +                # Not yet implemented: show some warning here
                +                return None
                +        return None
                +
                +    def __init__(
                +        self,
                +        *,
                +        text: Union[str, Dict[str, Any], PlainTextObject],
                +        accessibility_label: Optional[str] = None,
                +        value: str,
                +        **others: Dict[str, Any],
                +    ):
                +        """
                +        A feedback button element object for either positive or negative feedback.
                +
                +        Args:
                +            text (required): An object containing some text. Maximum length for this field is 75 characters.
                +            accessibility_label: A label for longer descriptive text about a button element. This label will be read out by
                +                screen readers instead of the button `text` object.
                +            value (required): The button value. Maximum length for this field is 2000 characters.
                +        """
                +        self._text: Optional[TextObject] = PlainTextObject.parse(text, default_type=PlainTextObject.type)
                +        self._accessibility_label: Optional[str] = accessibility_label
                +        self._value: Optional[str] = value
                +        show_unknown_key_warning(self, others)
                +
                +    @JsonValidator(f"text attribute cannot exceed {text_max_length} characters")
                +    def text_length(self) -> bool:
                +        return self._text is None or len(self._text.text) <= self.text_max_length
                +
                +    @JsonValidator(f"value attribute cannot exceed {value_max_length} characters")
                +    def value_length(self) -> bool:
                +        return self._value is None or len(self._value) <= self.value_max_length
                +
                +    def to_dict(self) -> Dict[str, Any]:
                +        self.validate_json()
                +        json: Dict[str, Union[str, dict]] = {}
                +        if self._text:
                +            json["text"] = self._text.to_dict()
                +        if self._accessibility_label:
                +            json["accessibility_label"] = self._accessibility_label
                +        if self._value:
                +            json["value"] = self._value
                +        return json
                +
                +

                The base class for JSON serializable class objects

                +

                A feedback button element object for either positive or negative feedback.

                +

                Args

                +
                +
                text : required
                +
                An object containing some text. Maximum length for this field is 75 characters.
                +
                accessibility_label
                +
                A label for longer descriptive text about a button element. This label will be read out by +screen readers instead of the button text object.
                +
                value : required
                +
                The button value. Maximum length for this field is 2000 characters.
                +
                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes : Set[str]
                +
                +

                The type of the None singleton.

                +
                +
                var text_max_length
                +
                +

                The type of the None singleton.

                +
                +
                var value_max_length
                +
                +

                The type of the None singleton.

                +
                +
                +

                Static methods

                +
                +
                +def parse(feedback_button: ForwardRef('FeedbackButtonObject') | Dict[str, Any]) +
                +
                +
                +
                +
                +

                Methods

                +
                +
                +def text_length(self) ‑> bool +
                +
                +
                + +Expand source code + +
                @JsonValidator(f"text attribute cannot exceed {text_max_length} characters")
                +def text_length(self) -> bool:
                +    return self._text is None or len(self._text.text) <= self.text_max_length
                +
                +
                +
                +
                +def value_length(self) ‑> bool +
                +
                +
                + +Expand source code + +
                @JsonValidator(f"value attribute cannot exceed {value_max_length} characters")
                +def value_length(self) -> bool:
                +    return self._value is None or len(self._value) <= self.value_max_length
                +
                +
                +
                +
                +

                Inherited members

                + +
                +
                +class FeedbackButtonsElement +(*,
                action_id: str | None = None,
                positive_button: dict | FeedbackButtonObject,
                negative_button: dict | FeedbackButtonObject,
                **others: dict)
                +
                +
                +
                + +Expand source code + +
                class FeedbackButtonsElement(InteractiveElement):
                +    type = "feedback_buttons"
                +
                +    @property
                +    def attributes(self) -> Set[str]:  # type: ignore[override]
                +        return super().attributes.union({"positive_button", "negative_button"})
                +
                +    def __init__(
                +        self,
                +        *,
                +        action_id: Optional[str] = None,
                +        positive_button: Union[dict, FeedbackButtonObject],
                +        negative_button: Union[dict, FeedbackButtonObject],
                +        **others: dict,
                +    ):
                +        """Buttons to indicate positive or negative feedback.
                +
                +        Args:
                +            action_id (required): An identifier for this action.
                +                You can use this when you receive an interaction payload to identify the source of the action.
                +                Should be unique among all other action_ids in the containing block.
                +                Maximum length for this field is 255 characters.
                +            positive_button (required): A button to indicate positive feedback.
                +            negative_button (required): A button to indicate negative feedback.
                +        """
                +        super().__init__(action_id=action_id, type=self.type)
                +        show_unknown_key_warning(self, others)
                +
                +        self.positive_button = FeedbackButtonObject.parse(positive_button)
                +        self.negative_button = FeedbackButtonObject.parse(negative_button)
                +
                +

                Block Elements are things that exists inside of your Blocks. +https://docs.slack.dev/reference/block-kit/block-elements/

                +

                Buttons to indicate positive or negative feedback.

                +

                Args

                +
                +
                action_id : required
                +
                An identifier for this action. +You can use this when you receive an interaction payload to identify the source of the action. +Should be unique among all other action_ids in the containing block. +Maximum length for this field is 255 characters.
                +
                positive_button : required
                +
                A button to indicate positive feedback.
                +
                negative_button : required
                +
                A button to indicate negative feedback.
                +
                +

                Ancestors

                + +

                Class variables

                +
                +
                var type
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                class FileBlock (*,
                external_id: str,
                source: str = 'remote',
                block_id: str | None = None,
                **others: dict)
                @@ -2825,6 +3167,117 @@

                Inherited members

              +
              +class IconButtonElement +(*,
              action_id: str | None = None,
              icon: str,
              text: str | dict | TextObject,
              accessibility_label: str | None = None,
              value: str | None = None,
              visible_to_user_ids: List[str] | None = None,
              confirm: dict | ConfirmObject | None = None,
              **others: dict)
              +
              +
              +
              + +Expand source code + +
              class IconButtonElement(InteractiveElement):
              +    type = "icon_button"
              +
              +    @property
              +    def attributes(self) -> Set[str]:  # type: ignore[override]
              +        return super().attributes.union({"icon", "text", "accessibility_label", "value", "visible_to_user_ids", "confirm"})
              +
              +    def __init__(
              +        self,
              +        *,
              +        action_id: Optional[str] = None,
              +        icon: str,
              +        text: Union[str, dict, TextObject],
              +        accessibility_label: Optional[str] = None,
              +        value: Optional[str] = None,
              +        visible_to_user_ids: Optional[List[str]] = None,
              +        confirm: Optional[Union[dict, ConfirmObject]] = None,
              +        **others: dict,
              +    ):
              +        """An icon button to perform actions.
              +
              +        Args:
              +            action_id: An identifier for this action.
              +                You can use this when you receive an interaction payload to identify the source of the action.
              +                Should be unique among all other action_ids in the containing block.
              +                Maximum length for this field is 255 characters.
              +            icon (required): The icon to show (e.g., 'trash').
              +            text (required): Defines an object containing some text.
              +            accessibility_label: A label for longer descriptive text about a button element.
              +                This label will be read out by screen readers instead of the button text object.
              +                Maximum length for this field is 75 characters.
              +            value: The button value.
              +                Maximum length for this field is 2000 characters.
              +            visible_to_user_ids: User IDs for which the icon appears.
              +                Maximum length for this field is 10 user IDs.
              +            confirm: A confirm object that defines an optional confirmation dialog after the button is clicked.
              +        """
              +        super().__init__(action_id=action_id, type=self.type)
              +        show_unknown_key_warning(self, others)
              +
              +        self.icon = icon
              +        self.text = TextObject.parse(text, PlainTextObject.type)
              +        self.accessibility_label = accessibility_label
              +        self.value = value
              +        self.visible_to_user_ids = visible_to_user_ids
              +        self.confirm = ConfirmObject.parse(confirm) if confirm else None
              +
              +

              Block Elements are things that exists inside of your Blocks. +https://docs.slack.dev/reference/block-kit/block-elements/

              +

              An icon button to perform actions.

              +

              Args

              +
              +
              action_id
              +
              An identifier for this action. +You can use this when you receive an interaction payload to identify the source of the action. +Should be unique among all other action_ids in the containing block. +Maximum length for this field is 255 characters.
              +
              icon : required
              +
              The icon to show (e.g., 'trash').
              +
              text : required
              +
              Defines an object containing some text.
              +
              accessibility_label
              +
              A label for longer descriptive text about a button element. +This label will be read out by screen readers instead of the button text object. +Maximum length for this field is 75 characters.
              +
              value
              +
              The button value. +Maximum length for this field is 2000 characters.
              +
              visible_to_user_ids
              +
              User IDs for which the icon appears. +Maximum length for this field is 10 user IDs.
              +
              confirm
              +
              A confirm object that defines an optional confirmation dialog after the button is clicked.
              +
              +

              Ancestors

              + +

              Class variables

              +
              +
              var type
              +
              +

              The type of the None singleton.

              +
              +
              +

              Inherited members

              + +
              class ImageBlock (*,
              alt_text: str,
              image_url: str | None = None,
              slack_file: Dict[str, Any] | SlackFile | None = None,
              title: str | dict | PlainTextObject | None = None,
              block_id: str | None = None,
              **others: dict)
              @@ -3435,6 +3888,8 @@

              Ancestors

              Subclasses

              • ButtonElement
              • +
              • FeedbackButtonsElement
              • +
              • IconButtonElement
              • InputInteractiveElement
              • OverflowMenuElement
              • WorkflowButtonElement
              • @@ -7443,6 +7898,14 @@

                ContextActionsBlock

                + + +
              • ContextBlock

                • attributes
                • @@ -7514,6 +7977,23 @@

                  FeedbackButtonObject

                  + + +
                • +

                  FeedbackButtonsElement

                  + +
                • +
                • FileBlock

                  • attributes
                  • @@ -7529,6 +8009,12 @@

                    IconButtonElement

                    + + +
                  • ImageBlock

                    • alt_text_max_length
                    • diff --git a/docs/reference/models/index.html b/docs/reference/models/index.html index 418bd9fa8..3888d29d7 100644 --- a/docs/reference/models/index.html +++ b/docs/reference/models/index.html @@ -298,6 +298,7 @@

                      Subclasses

                    • AttachmentField
                    • ConfirmObject
                    • DispatchActionConfig
                    • +
                    • FeedbackButtonObject
                    • Option
                    • OptionGroup
                    • SlackFile
                    • diff --git a/docs/reference/web/async_chat_stream.html b/docs/reference/web/async_chat_stream.html new file mode 100644 index 000000000..ca7bf2506 --- /dev/null +++ b/docs/reference/web/async_chat_stream.html @@ -0,0 +1,506 @@ + + + + + + +slack_sdk.web.async_chat_stream API documentation + + + + + + + + + + + +
                      +
                      +
                      +

                      Module slack_sdk.web.async_chat_stream

                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +

                      Classes

                      +
                      +
                      +class AsyncChatStream +(client: AsyncWebClient,
                      *,
                      channel: str,
                      logger: logging.Logger,
                      thread_ts: str,
                      buffer_size: int,
                      recipient_team_id: str | None = None,
                      recipient_user_id: str | None = None,
                      **kwargs)
                      +
                      +
                      +
                      + +Expand source code + +
                      class AsyncChatStream:
                      +    """A helper class for streaming markdown text into a conversation using the chat streaming APIs.
                      +
                      +    This class provides a convenient interface for the chat.startStream, chat.appendStream, and chat.stopStream API
                      +    methods, with automatic buffering and state management.
                      +    """
                      +
                      +    def __init__(
                      +        self,
                      +        client: "AsyncWebClient",
                      +        *,
                      +        channel: str,
                      +        logger: logging.Logger,
                      +        thread_ts: str,
                      +        buffer_size: int,
                      +        recipient_team_id: Optional[str] = None,
                      +        recipient_user_id: Optional[str] = None,
                      +        **kwargs,
                      +    ):
                      +        """Initialize a new ChatStream instance.
                      +
                      +        The __init__ method creates a unique ChatStream instance that keeps track of one chat stream.
                      +
                      +        Args:
                      +            client: The WebClient instance to use for API calls.
                      +            channel: An encoded ID that represents a channel, private group, or DM.
                      +            logger: A logging channel for outputs.
                      +            thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user
                      +              request.
                      +            recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when
                      +              streaming to channels.
                      +            recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
                      +            buffer_size: The length of markdown_text to buffer in-memory before calling a method. Increasing this value
                      +              decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits.
                      +            **kwargs: Additional arguments passed to the underlying API calls.
                      +        """
                      +        self._client = client
                      +        self._logger = logger
                      +        self._token: Optional[str] = kwargs.pop("token", None)
                      +        self._stream_args = {
                      +            "channel": channel,
                      +            "thread_ts": thread_ts,
                      +            "recipient_team_id": recipient_team_id,
                      +            "recipient_user_id": recipient_user_id,
                      +            **kwargs,
                      +        }
                      +        self._buffer = ""
                      +        self._state = "starting"
                      +        self._stream_ts: Optional[str] = None
                      +        self._buffer_size = buffer_size
                      +
                      +    async def append(
                      +        self,
                      +        *,
                      +        markdown_text: str,
                      +        **kwargs,
                      +    ) -> Optional[AsyncSlackResponse]:
                      +        """Append to the stream.
                      +
                      +        The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream
                      +        is stopped this method cannot be called.
                      +
                      +        Args:
                      +            markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
                      +              what will be appended to the message received so far.
                      +            **kwargs: Additional arguments passed to the underlying API calls.
                      +
                      +        Returns:
                      +            AsyncSlackResponse if the buffer was flushed, None if buffering.
                      +
                      +        Raises:
                      +            SlackRequestError: If the stream is already completed.
                      +
                      +        Example:
                      +            ```python
                      +            streamer = client.chat_stream(
                      +                channel="C0123456789",
                      +                thread_ts="1700000001.123456",
                      +                recipient_team_id="T0123456789",
                      +                recipient_user_id="U0123456789",
                      +            )
                      +            streamer.append(markdown_text="**hello wo")
                      +            streamer.append(markdown_text="rld!**")
                      +            streamer.stop()
                      +            ```
                      +        """
                      +        if self._state == "completed":
                      +            raise e.SlackRequestError(f"Cannot append to stream: stream state is {self._state}")
                      +        if kwargs.get("token"):
                      +            self._token = kwargs.pop("token")
                      +        self._buffer += markdown_text
                      +        if len(self._buffer) >= self._buffer_size:
                      +            return await self._flush_buffer(**kwargs)
                      +        details = {
                      +            "buffer_length": len(self._buffer),
                      +            "buffer_size": self._buffer_size,
                      +            "channel": self._stream_args.get("channel"),
                      +            "recipient_team_id": self._stream_args.get("recipient_team_id"),
                      +            "recipient_user_id": self._stream_args.get("recipient_user_id"),
                      +            "thread_ts": self._stream_args.get("thread_ts"),
                      +        }
                      +        self._logger.debug(f"ChatStream appended to buffer: {json.dumps(details)}")
                      +        return None
                      +
                      +    async def stop(
                      +        self,
                      +        *,
                      +        markdown_text: Optional[str] = None,
                      +        blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
                      +        metadata: Optional[Union[Dict, Metadata]] = None,
                      +        **kwargs,
                      +    ) -> AsyncSlackResponse:
                      +        """Stop the stream and finalize the message.
                      +
                      +        Args:
                      +            blocks: A list of blocks that will be rendered at the bottom of the finalized message.
                      +            markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
                      +              what will be appended to the message received so far.
                      +            metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you
                      +              post to Slack is accessible to any app or user who is a member of that workspace.
                      +            **kwargs: Additional arguments passed to the underlying API calls.
                      +
                      +        Returns:
                      +            AsyncSlackResponse from the chat.stopStream API call.
                      +
                      +        Raises:
                      +            SlackRequestError: If the stream is already completed.
                      +
                      +        Example:
                      +            ```python
                      +            streamer = client.chat_stream(
                      +                channel="C0123456789",
                      +                thread_ts="1700000001.123456",
                      +                recipient_team_id="T0123456789",
                      +                recipient_user_id="U0123456789",
                      +            )
                      +            streamer.append(markdown_text="**hello wo")
                      +            streamer.append(markdown_text="rld!**")
                      +            streamer.stop()
                      +            ```
                      +        """
                      +        if self._state == "completed":
                      +            raise e.SlackRequestError(f"Cannot stop stream: stream state is {self._state}")
                      +        if kwargs.get("token"):
                      +            self._token = kwargs.pop("token")
                      +        if markdown_text:
                      +            self._buffer += markdown_text
                      +        if not self._stream_ts:
                      +            response = await self._client.chat_startStream(
                      +                **self._stream_args,
                      +                token=self._token,
                      +            )
                      +            if not response.get("ts"):
                      +                raise e.SlackRequestError("Failed to stop stream: stream not started")
                      +            self._stream_ts = str(response["ts"])
                      +            self._state = "in_progress"
                      +        response = await self._client.chat_stopStream(
                      +            token=self._token,
                      +            channel=self._stream_args["channel"],
                      +            ts=self._stream_ts,
                      +            blocks=blocks,
                      +            markdown_text=self._buffer,
                      +            metadata=metadata,
                      +            **kwargs,
                      +        )
                      +        self._state = "completed"
                      +        return response
                      +
                      +    async def _flush_buffer(self, **kwargs) -> AsyncSlackResponse:
                      +        """Flush the internal buffer by making appropriate API calls."""
                      +        if not self._stream_ts:
                      +            response = await self._client.chat_startStream(
                      +                **self._stream_args,
                      +                token=self._token,
                      +                **kwargs,
                      +                markdown_text=self._buffer,
                      +            )
                      +            self._stream_ts = response.get("ts")
                      +            self._state = "in_progress"
                      +        else:
                      +            response = await self._client.chat_appendStream(
                      +                token=self._token,
                      +                channel=self._stream_args["channel"],
                      +                ts=self._stream_ts,
                      +                **kwargs,
                      +                markdown_text=self._buffer,
                      +            )
                      +        self._buffer = ""
                      +        return response
                      +
                      +

                      A helper class for streaming markdown text into a conversation using the chat streaming APIs.

                      +

                      This class provides a convenient interface for the chat.startStream, chat.appendStream, and chat.stopStream API +methods, with automatic buffering and state management.

                      +

                      Initialize a new ChatStream instance.

                      +

                      The init method creates a unique ChatStream instance that keeps track of one chat stream.

                      +

                      Args

                      +
                      +
                      client
                      +
                      The WebClient instance to use for API calls.
                      +
                      channel
                      +
                      An encoded ID that represents a channel, private group, or DM.
                      +
                      logger
                      +
                      A logging channel for outputs.
                      +
                      thread_ts
                      +
                      Provide another message's ts value to reply to. Streamed messages should always be replies to a user +request.
                      +
                      recipient_team_id
                      +
                      The encoded ID of the team the user receiving the streaming text belongs to. Required when +streaming to channels.
                      +
                      recipient_user_id
                      +
                      The encoded ID of the user to receive the streaming text. Required when streaming to channels.
                      +
                      buffer_size
                      +
                      The length of markdown_text to buffer in-memory before calling a method. Increasing this value +decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits.
                      +
                      **kwargs
                      +
                      Additional arguments passed to the underlying API calls.
                      +
                      +

                      Methods

                      +
                      +
                      +async def append(self, *, markdown_text: str, **kwargs) ‑> AsyncSlackResponse | None +
                      +
                      +
                      + +Expand source code + +
                      async def append(
                      +    self,
                      +    *,
                      +    markdown_text: str,
                      +    **kwargs,
                      +) -> Optional[AsyncSlackResponse]:
                      +    """Append to the stream.
                      +
                      +    The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream
                      +    is stopped this method cannot be called.
                      +
                      +    Args:
                      +        markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
                      +          what will be appended to the message received so far.
                      +        **kwargs: Additional arguments passed to the underlying API calls.
                      +
                      +    Returns:
                      +        AsyncSlackResponse if the buffer was flushed, None if buffering.
                      +
                      +    Raises:
                      +        SlackRequestError: If the stream is already completed.
                      +
                      +    Example:
                      +        ```python
                      +        streamer = client.chat_stream(
                      +            channel="C0123456789",
                      +            thread_ts="1700000001.123456",
                      +            recipient_team_id="T0123456789",
                      +            recipient_user_id="U0123456789",
                      +        )
                      +        streamer.append(markdown_text="**hello wo")
                      +        streamer.append(markdown_text="rld!**")
                      +        streamer.stop()
                      +        ```
                      +    """
                      +    if self._state == "completed":
                      +        raise e.SlackRequestError(f"Cannot append to stream: stream state is {self._state}")
                      +    if kwargs.get("token"):
                      +        self._token = kwargs.pop("token")
                      +    self._buffer += markdown_text
                      +    if len(self._buffer) >= self._buffer_size:
                      +        return await self._flush_buffer(**kwargs)
                      +    details = {
                      +        "buffer_length": len(self._buffer),
                      +        "buffer_size": self._buffer_size,
                      +        "channel": self._stream_args.get("channel"),
                      +        "recipient_team_id": self._stream_args.get("recipient_team_id"),
                      +        "recipient_user_id": self._stream_args.get("recipient_user_id"),
                      +        "thread_ts": self._stream_args.get("thread_ts"),
                      +    }
                      +    self._logger.debug(f"ChatStream appended to buffer: {json.dumps(details)}")
                      +    return None
                      +
                      +

                      Append to the stream.

                      +

                      The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream +is stopped this method cannot be called.

                      +

                      Args

                      +
                      +
                      markdown_text
                      +
                      Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is +what will be appended to the message received so far.
                      +
                      **kwargs
                      +
                      Additional arguments passed to the underlying API calls.
                      +
                      +

                      Returns

                      +

                      AsyncSlackResponse if the buffer was flushed, None if buffering.

                      +

                      Raises

                      +
                      +
                      SlackRequestError
                      +
                      If the stream is already completed.
                      +
                      +

                      Example

                      +
                      streamer = client.chat_stream(
                      +    channel="C0123456789",
                      +    thread_ts="1700000001.123456",
                      +    recipient_team_id="T0123456789",
                      +    recipient_user_id="U0123456789",
                      +)
                      +streamer.append(markdown_text="**hello wo")
                      +streamer.append(markdown_text="rld!**")
                      +streamer.stop()
                      +
                      +
                      +
                      +async def stop(self,
                      *,
                      markdown_text: str | None = None,
                      blocks: str | Sequence[Dict | Block] | None = None,
                      metadata: Dict | Metadata | None = None,
                      **kwargs) ‑> AsyncSlackResponse
                      +
                      +
                      +
                      + +Expand source code + +
                      async def stop(
                      +    self,
                      +    *,
                      +    markdown_text: Optional[str] = None,
                      +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
                      +    metadata: Optional[Union[Dict, Metadata]] = None,
                      +    **kwargs,
                      +) -> AsyncSlackResponse:
                      +    """Stop the stream and finalize the message.
                      +
                      +    Args:
                      +        blocks: A list of blocks that will be rendered at the bottom of the finalized message.
                      +        markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
                      +          what will be appended to the message received so far.
                      +        metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you
                      +          post to Slack is accessible to any app or user who is a member of that workspace.
                      +        **kwargs: Additional arguments passed to the underlying API calls.
                      +
                      +    Returns:
                      +        AsyncSlackResponse from the chat.stopStream API call.
                      +
                      +    Raises:
                      +        SlackRequestError: If the stream is already completed.
                      +
                      +    Example:
                      +        ```python
                      +        streamer = client.chat_stream(
                      +            channel="C0123456789",
                      +            thread_ts="1700000001.123456",
                      +            recipient_team_id="T0123456789",
                      +            recipient_user_id="U0123456789",
                      +        )
                      +        streamer.append(markdown_text="**hello wo")
                      +        streamer.append(markdown_text="rld!**")
                      +        streamer.stop()
                      +        ```
                      +    """
                      +    if self._state == "completed":
                      +        raise e.SlackRequestError(f"Cannot stop stream: stream state is {self._state}")
                      +    if kwargs.get("token"):
                      +        self._token = kwargs.pop("token")
                      +    if markdown_text:
                      +        self._buffer += markdown_text
                      +    if not self._stream_ts:
                      +        response = await self._client.chat_startStream(
                      +            **self._stream_args,
                      +            token=self._token,
                      +        )
                      +        if not response.get("ts"):
                      +            raise e.SlackRequestError("Failed to stop stream: stream not started")
                      +        self._stream_ts = str(response["ts"])
                      +        self._state = "in_progress"
                      +    response = await self._client.chat_stopStream(
                      +        token=self._token,
                      +        channel=self._stream_args["channel"],
                      +        ts=self._stream_ts,
                      +        blocks=blocks,
                      +        markdown_text=self._buffer,
                      +        metadata=metadata,
                      +        **kwargs,
                      +    )
                      +    self._state = "completed"
                      +    return response
                      +
                      +

                      Stop the stream and finalize the message.

                      +

                      Args

                      +
                      +
                      blocks
                      +
                      A list of blocks that will be rendered at the bottom of the finalized message.
                      +
                      markdown_text
                      +
                      Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is +what will be appended to the message received so far.
                      +
                      metadata
                      +
                      JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you +post to Slack is accessible to any app or user who is a member of that workspace.
                      +
                      **kwargs
                      +
                      Additional arguments passed to the underlying API calls.
                      +
                      +

                      Returns

                      +

                      AsyncSlackResponse from the chat.stopStream API call.

                      +

                      Raises

                      +
                      +
                      SlackRequestError
                      +
                      If the stream is already completed.
                      +
                      +

                      Example

                      +
                      streamer = client.chat_stream(
                      +    channel="C0123456789",
                      +    thread_ts="1700000001.123456",
                      +    recipient_team_id="T0123456789",
                      +    recipient_user_id="U0123456789",
                      +)
                      +streamer.append(markdown_text="**hello wo")
                      +streamer.append(markdown_text="rld!**")
                      +streamer.stop()
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + +
                      + + + diff --git a/docs/reference/web/async_client.html b/docs/reference/web/async_client.html index 430319ea6..6e9c712fe 100644 --- a/docs/reference/web/async_client.html +++ b/docs/reference/web/async_client.html @@ -2097,13 +2097,17 @@

                      Classes

                      channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return await self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("assistant.threads.setStatus", json=kwargs) async def assistant_threads_setTitle( self, @@ -2113,7 +2117,7 @@

                      Classes

                      title: str, **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) @@ -2128,7 +2132,7 @@

                      Classes

                      prompts: List[Dict[str, str]], **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -2642,6 +2646,27 @@

                      Classes

                      # -------------------------- + async def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> AsyncSlackResponse: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("chat.appendStream", json=kwargs) + async def chat_delete( self, *, @@ -2846,6 +2871,146 @@

                      Classes

                      # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.scheduleMessage", json=kwargs) + async def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return await self.api_call("chat.scheduledMessages.list", params=kwargs) + + async def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("chat.startStream", json=kwargs) + + async def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return await self.api_call("chat.stopStream", json=kwargs) + + async def chat_stream( + self, + *, + buffer_size: int = 256, + channel: str, + thread_ts: str, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> AsyncChatStream: + """Stream markdown text into a conversation. + + This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, + the stream can be stopped with concluding arguments such as "blocks" for gathering feedback. + + The following methods are used: + + - chat.startStream: Starts a new streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.startStream). + - chat.appendStream: Appends text to an existing streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.appendStream). + - chat.stopStream: Stops a streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.stopStream). + + Args: + buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this + value decreases the number of method calls made for the same amount of text, which is useful to avoid rate + limits. Default: 256. + channel: An encoded ID that represents a channel, private group, or DM. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + ChatStream instance for managing the stream + + Example: + ```python + streamer = await client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + await streamer.append(markdown_text="**hello wo") + await streamer.append(markdown_text="rld!**") + await streamer.stop() + ``` + """ + return AsyncChatStream( + self, + logger=self._logger, + channel=channel, + thread_ts=thread_ts, + recipient_team_id=recipient_team_id, + recipient_user_id=recipient_user_id, + buffer_size=buffer_size, + **kwargs, + ) + async def chat_unfurl( self, *, @@ -2926,32 +3091,6 @@

                      Classes

                      # NOTE: intentionally using json over params for API methods using blocks/attachments return await self.api_call("chat.update", json=kwargs) - async def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> AsyncSlackResponse: - """Lists all scheduled messages. - https://docs.slack.dev/reference/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return await self.api_call("chat.scheduledMessages.list", params=kwargs) - async def conversations_acceptSharedInvite( self, *, @@ -8786,7 +8925,7 @@

                      Methods

                      https://docs.slack.dev/reference/methods/apps.uninstall

                      -async def assistant_threads_setStatus(self, *, channel_id: str, thread_ts: str, status: str, **kwargs) ‑> AsyncSlackResponse +async def assistant_threads_setStatus(self,
                      *,
                      channel_id: str,
                      thread_ts: str,
                      status: str,
                      loading_messages: List[str] | None = None,
                      **kwargs) ‑> AsyncSlackResponse
                      @@ -8799,15 +8938,19 @@

                      Methods

                      channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return await self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("assistant.threads.setStatus", json=kwargs)
                      -

                      Revokes a token. +

                      @@ -8827,7 +8970,7 @@

                      Methods

                      prompts: List[Dict[str, str]], **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -8835,7 +8978,7 @@

                      Methods

                      kwargs.update({"title": title}) return await self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
                      -

                      Revokes a token. +

                      Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

                      @@ -8854,13 +8997,13 @@

                      Methods

                      title: str, **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return await self.api_call("assistant.threads.setTitle", params=kwargs)
                      -

                      Revokes a token. +

                      Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle

                      @@ -9731,6 +9874,38 @@

                      Methods

                      Unarchives a channel.

                      +
                      +async def chat_appendStream(self, *, channel: str, ts: str, markdown_text: str, **kwargs) ‑> AsyncSlackResponse +
                      +
                      +
                      + +Expand source code + +
                      async def chat_appendStream(
                      +    self,
                      +    *,
                      +    channel: str,
                      +    ts: str,
                      +    markdown_text: str,
                      +    **kwargs,
                      +) -> AsyncSlackResponse:
                      +    """Appends text to an existing streaming conversation.
                      +    https://docs.slack.dev/reference/methods/chat.appendStream
                      +    """
                      +    kwargs.update(
                      +        {
                      +            "channel": channel,
                      +            "ts": ts,
                      +            "markdown_text": markdown_text,
                      +        }
                      +    )
                      +    kwargs = _remove_none_values(kwargs)
                      +    return await self.api_call("chat.appendStream", json=kwargs)
                      +
                      +

                      Appends text to an existing streaming conversation. +https://docs.slack.dev/reference/methods/chat.appendStream

                      +
                      async def chat_delete(self, *, channel: str, ts: str, as_user: bool | None = None, **kwargs) ‑> AsyncSlackResponse
                      @@ -10049,6 +10224,195 @@

                      Methods

                      +
                      +async def chat_startStream(self,
                      *,
                      channel: str,
                      thread_ts: str,
                      markdown_text: str | None = None,
                      recipient_team_id: str | None = None,
                      recipient_user_id: str | None = None,
                      **kwargs) ‑> AsyncSlackResponse
                      +
                      +
                      +
                      + +Expand source code + +
                      async def chat_startStream(
                      +    self,
                      +    *,
                      +    channel: str,
                      +    thread_ts: str,
                      +    markdown_text: Optional[str] = None,
                      +    recipient_team_id: Optional[str] = None,
                      +    recipient_user_id: Optional[str] = None,
                      +    **kwargs,
                      +) -> AsyncSlackResponse:
                      +    """Starts a new streaming conversation.
                      +    https://docs.slack.dev/reference/methods/chat.startStream
                      +    """
                      +    kwargs.update(
                      +        {
                      +            "channel": channel,
                      +            "thread_ts": thread_ts,
                      +            "markdown_text": markdown_text,
                      +            "recipient_team_id": recipient_team_id,
                      +            "recipient_user_id": recipient_user_id,
                      +        }
                      +    )
                      +    kwargs = _remove_none_values(kwargs)
                      +    return await self.api_call("chat.startStream", json=kwargs)
                      +
                      +

                      Starts a new streaming conversation. +https://docs.slack.dev/reference/methods/chat.startStream

                      +
                      +
                      +async def chat_stopStream(self,
                      *,
                      channel: str,
                      ts: str,
                      markdown_text: str | None = None,
                      blocks: str | Sequence[Dict | Block] | None = None,
                      metadata: Dict | Metadata | None = None,
                      **kwargs) ‑> AsyncSlackResponse
                      +
                      +
                      +
                      + +Expand source code + +
                      async def chat_stopStream(
                      +    self,
                      +    *,
                      +    channel: str,
                      +    ts: str,
                      +    markdown_text: Optional[str] = None,
                      +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
                      +    metadata: Optional[Union[Dict, Metadata]] = None,
                      +    **kwargs,
                      +) -> AsyncSlackResponse:
                      +    """Stops a streaming conversation.
                      +    https://docs.slack.dev/reference/methods/chat.stopStream
                      +    """
                      +    kwargs.update(
                      +        {
                      +            "channel": channel,
                      +            "ts": ts,
                      +            "markdown_text": markdown_text,
                      +            "blocks": blocks,
                      +            "metadata": metadata,
                      +        }
                      +    )
                      +    _parse_web_class_objects(kwargs)
                      +    kwargs = _remove_none_values(kwargs)
                      +    return await self.api_call("chat.stopStream", json=kwargs)
                      +
                      + +
                      +
                      +async def chat_stream(self,
                      *,
                      buffer_size: int = 256,
                      channel: str,
                      thread_ts: str,
                      recipient_team_id: str | None = None,
                      recipient_user_id: str | None = None,
                      **kwargs) ‑> AsyncChatStream
                      +
                      +
                      +
                      + +Expand source code + +
                      async def chat_stream(
                      +    self,
                      +    *,
                      +    buffer_size: int = 256,
                      +    channel: str,
                      +    thread_ts: str,
                      +    recipient_team_id: Optional[str] = None,
                      +    recipient_user_id: Optional[str] = None,
                      +    **kwargs,
                      +) -> AsyncChatStream:
                      +    """Stream markdown text into a conversation.
                      +
                      +    This method starts a new chat stream in a conversation that can be appended to. After appending an entire message,
                      +    the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.
                      +
                      +    The following methods are used:
                      +
                      +    - chat.startStream: Starts a new streaming conversation.
                      +      [Reference](https://docs.slack.dev/reference/methods/chat.startStream).
                      +    - chat.appendStream: Appends text to an existing streaming conversation.
                      +      [Reference](https://docs.slack.dev/reference/methods/chat.appendStream).
                      +    - chat.stopStream: Stops a streaming conversation.
                      +      [Reference](https://docs.slack.dev/reference/methods/chat.stopStream).
                      +
                      +    Args:
                      +        buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this
                      +          value decreases the number of method calls made for the same amount of text, which is useful to avoid rate
                      +          limits. Default: 256.
                      +        channel: An encoded ID that represents a channel, private group, or DM.
                      +        thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user
                      +          request.
                      +        recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when
                      +          streaming to channels.
                      +        recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
                      +        **kwargs: Additional arguments passed to the underlying API calls.
                      +
                      +    Returns:
                      +        ChatStream instance for managing the stream
                      +
                      +    Example:
                      +        ```python
                      +        streamer = await client.chat_stream(
                      +            channel="C0123456789",
                      +            thread_ts="1700000001.123456",
                      +            recipient_team_id="T0123456789",
                      +            recipient_user_id="U0123456789",
                      +        )
                      +        await streamer.append(markdown_text="**hello wo")
                      +        await streamer.append(markdown_text="rld!**")
                      +        await streamer.stop()
                      +        ```
                      +    """
                      +    return AsyncChatStream(
                      +        self,
                      +        logger=self._logger,
                      +        channel=channel,
                      +        thread_ts=thread_ts,
                      +        recipient_team_id=recipient_team_id,
                      +        recipient_user_id=recipient_user_id,
                      +        buffer_size=buffer_size,
                      +        **kwargs,
                      +    )
                      +
                      +

                      Stream markdown text into a conversation.

                      +

                      This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, +the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.

                      +

                      The following methods are used:

                      +
                        +
                      • chat.startStream: Starts a new streaming conversation. +Reference.
                      • +
                      • chat.appendStream: Appends text to an existing streaming conversation. +Reference.
                      • +
                      • chat.stopStream: Stops a streaming conversation. +Reference.
                      • +
                      +

                      Args

                      +
                      +
                      buffer_size
                      +
                      The length of markdown_text to buffer in-memory before calling a stream method. Increasing this +value decreases the number of method calls made for the same amount of text, which is useful to avoid rate +limits. Default: 256.
                      +
                      channel
                      +
                      An encoded ID that represents a channel, private group, or DM.
                      +
                      thread_ts
                      +
                      Provide another message's ts value to reply to. Streamed messages should always be replies to a user +request.
                      +
                      recipient_team_id
                      +
                      The encoded ID of the team the user receiving the streaming text belongs to. Required when +streaming to channels.
                      +
                      recipient_user_id
                      +
                      The encoded ID of the user to receive the streaming text. Required when streaming to channels.
                      +
                      **kwargs
                      +
                      Additional arguments passed to the underlying API calls.
                      +
                      +

                      Returns

                      +

                      ChatStream instance for managing the stream

                      +

                      Example

                      +
                      streamer = await client.chat_stream(
                      +    channel="C0123456789",
                      +    thread_ts="1700000001.123456",
                      +    recipient_team_id="T0123456789",
                      +    recipient_user_id="U0123456789",
                      +)
                      +await streamer.append(markdown_text="**hello wo")
                      +await streamer.append(markdown_text="rld!**")
                      +await streamer.stop()
                      +
                      +
                      async def chat_unfurl(self,
                      *,
                      channel: str | None = None,
                      ts: str | None = None,
                      source: str | None = None,
                      unfurl_id: str | None = None,
                      unfurls: Dict[str, Dict] | None = None,
                      user_auth_blocks: str | Sequence[Dict | Block] | None = None,
                      user_auth_message: str | None = None,
                      user_auth_required: bool | None = None,
                      user_auth_url: str | None = None,
                      **kwargs) ‑> AsyncSlackResponse
                      @@ -14555,6 +14919,7 @@

                      channels_setPurpose
                    • channels_setTopic
                    • channels_unarchive
                    • +
                    • chat_appendStream
                    • chat_delete
                    • chat_deleteScheduledMessage
                    • chat_getPermalink
                    • @@ -14563,6 +14928,9 @@

                      chat_postMessage
                    • chat_scheduleMessage
                    • chat_scheduledMessages_list
                    • +
                    • chat_startStream
                    • +
                    • chat_stopStream
                    • +
                    • chat_stream
                    • chat_unfurl
                    • chat_update
                    • conversations_acceptSharedInvite
                    • diff --git a/docs/reference/web/chat_stream.html b/docs/reference/web/chat_stream.html new file mode 100644 index 000000000..94d96e5eb --- /dev/null +++ b/docs/reference/web/chat_stream.html @@ -0,0 +1,506 @@ + + + + + + +slack_sdk.web.chat_stream API documentation + + + + + + + + + + + +
                      +
                      +
                      +

                      Module slack_sdk.web.chat_stream

                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +

                      Classes

                      +
                      +
                      +class ChatStream +(client: WebClient,
                      *,
                      channel: str,
                      logger: logging.Logger,
                      thread_ts: str,
                      buffer_size: int,
                      recipient_team_id: str | None = None,
                      recipient_user_id: str | None = None,
                      **kwargs)
                      +
                      +
                      +
                      + +Expand source code + +
                      class ChatStream:
                      +    """A helper class for streaming markdown text into a conversation using the chat streaming APIs.
                      +
                      +    This class provides a convenient interface for the chat.startStream, chat.appendStream, and chat.stopStream API
                      +    methods, with automatic buffering and state management.
                      +    """
                      +
                      +    def __init__(
                      +        self,
                      +        client: "WebClient",
                      +        *,
                      +        channel: str,
                      +        logger: logging.Logger,
                      +        thread_ts: str,
                      +        buffer_size: int,
                      +        recipient_team_id: Optional[str] = None,
                      +        recipient_user_id: Optional[str] = None,
                      +        **kwargs,
                      +    ):
                      +        """Initialize a new ChatStream instance.
                      +
                      +        The __init__ method creates a unique ChatStream instance that keeps track of one chat stream.
                      +
                      +        Args:
                      +            client: The WebClient instance to use for API calls.
                      +            channel: An encoded ID that represents a channel, private group, or DM.
                      +            logger: A logging channel for outputs.
                      +            thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user
                      +              request.
                      +            recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when
                      +              streaming to channels.
                      +            recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
                      +            buffer_size: The length of markdown_text to buffer in-memory before calling a method. Increasing this value
                      +              decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits.
                      +            **kwargs: Additional arguments passed to the underlying API calls.
                      +        """
                      +        self._client = client
                      +        self._logger = logger
                      +        self._token: Optional[str] = kwargs.pop("token", None)
                      +        self._stream_args = {
                      +            "channel": channel,
                      +            "thread_ts": thread_ts,
                      +            "recipient_team_id": recipient_team_id,
                      +            "recipient_user_id": recipient_user_id,
                      +            **kwargs,
                      +        }
                      +        self._buffer = ""
                      +        self._state = "starting"
                      +        self._stream_ts: Optional[str] = None
                      +        self._buffer_size = buffer_size
                      +
                      +    def append(
                      +        self,
                      +        *,
                      +        markdown_text: str,
                      +        **kwargs,
                      +    ) -> Optional[SlackResponse]:
                      +        """Append to the stream.
                      +
                      +        The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream
                      +        is stopped this method cannot be called.
                      +
                      +        Args:
                      +            markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
                      +              what will be appended to the message received so far.
                      +            **kwargs: Additional arguments passed to the underlying API calls.
                      +
                      +        Returns:
                      +            SlackResponse if the buffer was flushed, None if buffering.
                      +
                      +        Raises:
                      +            SlackRequestError: If the stream is already completed.
                      +
                      +        Example:
                      +            ```python
                      +            streamer = client.chat_stream(
                      +                channel="C0123456789",
                      +                thread_ts="1700000001.123456",
                      +                recipient_team_id="T0123456789",
                      +                recipient_user_id="U0123456789",
                      +            )
                      +            streamer.append(markdown_text="**hello wo")
                      +            streamer.append(markdown_text="rld!**")
                      +            streamer.stop()
                      +            ```
                      +        """
                      +        if self._state == "completed":
                      +            raise e.SlackRequestError(f"Cannot append to stream: stream state is {self._state}")
                      +        if kwargs.get("token"):
                      +            self._token = kwargs.pop("token")
                      +        self._buffer += markdown_text
                      +        if len(self._buffer) >= self._buffer_size:
                      +            return self._flush_buffer(**kwargs)
                      +        details = {
                      +            "buffer_length": len(self._buffer),
                      +            "buffer_size": self._buffer_size,
                      +            "channel": self._stream_args.get("channel"),
                      +            "recipient_team_id": self._stream_args.get("recipient_team_id"),
                      +            "recipient_user_id": self._stream_args.get("recipient_user_id"),
                      +            "thread_ts": self._stream_args.get("thread_ts"),
                      +        }
                      +        self._logger.debug(f"ChatStream appended to buffer: {json.dumps(details)}")
                      +        return None
                      +
                      +    def stop(
                      +        self,
                      +        *,
                      +        markdown_text: Optional[str] = None,
                      +        blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
                      +        metadata: Optional[Union[Dict, Metadata]] = None,
                      +        **kwargs,
                      +    ) -> SlackResponse:
                      +        """Stop the stream and finalize the message.
                      +
                      +        Args:
                      +            blocks: A list of blocks that will be rendered at the bottom of the finalized message.
                      +            markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
                      +              what will be appended to the message received so far.
                      +            metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you
                      +              post to Slack is accessible to any app or user who is a member of that workspace.
                      +            **kwargs: Additional arguments passed to the underlying API calls.
                      +
                      +        Returns:
                      +            SlackResponse from the chat.stopStream API call.
                      +
                      +        Raises:
                      +            SlackRequestError: If the stream is already completed.
                      +
                      +        Example:
                      +            ```python
                      +            streamer = client.chat_stream(
                      +                channel="C0123456789",
                      +                thread_ts="1700000001.123456",
                      +                recipient_team_id="T0123456789",
                      +                recipient_user_id="U0123456789",
                      +            )
                      +            streamer.append(markdown_text="**hello wo")
                      +            streamer.append(markdown_text="rld!**")
                      +            streamer.stop()
                      +            ```
                      +        """
                      +        if self._state == "completed":
                      +            raise e.SlackRequestError(f"Cannot stop stream: stream state is {self._state}")
                      +        if kwargs.get("token"):
                      +            self._token = kwargs.pop("token")
                      +        if markdown_text:
                      +            self._buffer += markdown_text
                      +        if not self._stream_ts:
                      +            response = self._client.chat_startStream(
                      +                **self._stream_args,
                      +                token=self._token,
                      +            )
                      +            if not response.get("ts"):
                      +                raise e.SlackRequestError("Failed to stop stream: stream not started")
                      +            self._stream_ts = str(response["ts"])
                      +            self._state = "in_progress"
                      +        response = self._client.chat_stopStream(
                      +            token=self._token,
                      +            channel=self._stream_args["channel"],
                      +            ts=self._stream_ts,
                      +            blocks=blocks,
                      +            markdown_text=self._buffer,
                      +            metadata=metadata,
                      +            **kwargs,
                      +        )
                      +        self._state = "completed"
                      +        return response
                      +
                      +    def _flush_buffer(self, **kwargs) -> SlackResponse:
                      +        """Flush the internal buffer by making appropriate API calls."""
                      +        if not self._stream_ts:
                      +            response = self._client.chat_startStream(
                      +                **self._stream_args,
                      +                token=self._token,
                      +                **kwargs,
                      +                markdown_text=self._buffer,
                      +            )
                      +            self._stream_ts = response.get("ts")
                      +            self._state = "in_progress"
                      +        else:
                      +            response = self._client.chat_appendStream(
                      +                token=self._token,
                      +                channel=self._stream_args["channel"],
                      +                ts=self._stream_ts,
                      +                **kwargs,
                      +                markdown_text=self._buffer,
                      +            )
                      +        self._buffer = ""
                      +        return response
                      +
                      +

                      A helper class for streaming markdown text into a conversation using the chat streaming APIs.

                      +

                      This class provides a convenient interface for the chat.startStream, chat.appendStream, and chat.stopStream API +methods, with automatic buffering and state management.

                      +

                      Initialize a new ChatStream instance.

                      +

                      The init method creates a unique ChatStream instance that keeps track of one chat stream.

                      +

                      Args

                      +
                      +
                      client
                      +
                      The WebClient instance to use for API calls.
                      +
                      channel
                      +
                      An encoded ID that represents a channel, private group, or DM.
                      +
                      logger
                      +
                      A logging channel for outputs.
                      +
                      thread_ts
                      +
                      Provide another message's ts value to reply to. Streamed messages should always be replies to a user +request.
                      +
                      recipient_team_id
                      +
                      The encoded ID of the team the user receiving the streaming text belongs to. Required when +streaming to channels.
                      +
                      recipient_user_id
                      +
                      The encoded ID of the user to receive the streaming text. Required when streaming to channels.
                      +
                      buffer_size
                      +
                      The length of markdown_text to buffer in-memory before calling a method. Increasing this value +decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits.
                      +
                      **kwargs
                      +
                      Additional arguments passed to the underlying API calls.
                      +
                      +

                      Methods

                      +
                      +
                      +def append(self, *, markdown_text: str, **kwargs) ‑> SlackResponse | None +
                      +
                      +
                      + +Expand source code + +
                      def append(
                      +    self,
                      +    *,
                      +    markdown_text: str,
                      +    **kwargs,
                      +) -> Optional[SlackResponse]:
                      +    """Append to the stream.
                      +
                      +    The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream
                      +    is stopped this method cannot be called.
                      +
                      +    Args:
                      +        markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
                      +          what will be appended to the message received so far.
                      +        **kwargs: Additional arguments passed to the underlying API calls.
                      +
                      +    Returns:
                      +        SlackResponse if the buffer was flushed, None if buffering.
                      +
                      +    Raises:
                      +        SlackRequestError: If the stream is already completed.
                      +
                      +    Example:
                      +        ```python
                      +        streamer = client.chat_stream(
                      +            channel="C0123456789",
                      +            thread_ts="1700000001.123456",
                      +            recipient_team_id="T0123456789",
                      +            recipient_user_id="U0123456789",
                      +        )
                      +        streamer.append(markdown_text="**hello wo")
                      +        streamer.append(markdown_text="rld!**")
                      +        streamer.stop()
                      +        ```
                      +    """
                      +    if self._state == "completed":
                      +        raise e.SlackRequestError(f"Cannot append to stream: stream state is {self._state}")
                      +    if kwargs.get("token"):
                      +        self._token = kwargs.pop("token")
                      +    self._buffer += markdown_text
                      +    if len(self._buffer) >= self._buffer_size:
                      +        return self._flush_buffer(**kwargs)
                      +    details = {
                      +        "buffer_length": len(self._buffer),
                      +        "buffer_size": self._buffer_size,
                      +        "channel": self._stream_args.get("channel"),
                      +        "recipient_team_id": self._stream_args.get("recipient_team_id"),
                      +        "recipient_user_id": self._stream_args.get("recipient_user_id"),
                      +        "thread_ts": self._stream_args.get("thread_ts"),
                      +    }
                      +    self._logger.debug(f"ChatStream appended to buffer: {json.dumps(details)}")
                      +    return None
                      +
                      +

                      Append to the stream.

                      +

                      The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream +is stopped this method cannot be called.

                      +

                      Args

                      +
                      +
                      markdown_text
                      +
                      Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is +what will be appended to the message received so far.
                      +
                      **kwargs
                      +
                      Additional arguments passed to the underlying API calls.
                      +
                      +

                      Returns

                      +

                      SlackResponse if the buffer was flushed, None if buffering.

                      +

                      Raises

                      +
                      +
                      SlackRequestError
                      +
                      If the stream is already completed.
                      +
                      +

                      Example

                      +
                      streamer = client.chat_stream(
                      +    channel="C0123456789",
                      +    thread_ts="1700000001.123456",
                      +    recipient_team_id="T0123456789",
                      +    recipient_user_id="U0123456789",
                      +)
                      +streamer.append(markdown_text="**hello wo")
                      +streamer.append(markdown_text="rld!**")
                      +streamer.stop()
                      +
                      +
                      +
                      +def stop(self,
                      *,
                      markdown_text: str | None = None,
                      blocks: str | Sequence[Dict | Block] | None = None,
                      metadata: Dict | Metadata | None = None,
                      **kwargs) ‑> SlackResponse
                      +
                      +
                      +
                      + +Expand source code + +
                      def stop(
                      +    self,
                      +    *,
                      +    markdown_text: Optional[str] = None,
                      +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
                      +    metadata: Optional[Union[Dict, Metadata]] = None,
                      +    **kwargs,
                      +) -> SlackResponse:
                      +    """Stop the stream and finalize the message.
                      +
                      +    Args:
                      +        blocks: A list of blocks that will be rendered at the bottom of the finalized message.
                      +        markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
                      +          what will be appended to the message received so far.
                      +        metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you
                      +          post to Slack is accessible to any app or user who is a member of that workspace.
                      +        **kwargs: Additional arguments passed to the underlying API calls.
                      +
                      +    Returns:
                      +        SlackResponse from the chat.stopStream API call.
                      +
                      +    Raises:
                      +        SlackRequestError: If the stream is already completed.
                      +
                      +    Example:
                      +        ```python
                      +        streamer = client.chat_stream(
                      +            channel="C0123456789",
                      +            thread_ts="1700000001.123456",
                      +            recipient_team_id="T0123456789",
                      +            recipient_user_id="U0123456789",
                      +        )
                      +        streamer.append(markdown_text="**hello wo")
                      +        streamer.append(markdown_text="rld!**")
                      +        streamer.stop()
                      +        ```
                      +    """
                      +    if self._state == "completed":
                      +        raise e.SlackRequestError(f"Cannot stop stream: stream state is {self._state}")
                      +    if kwargs.get("token"):
                      +        self._token = kwargs.pop("token")
                      +    if markdown_text:
                      +        self._buffer += markdown_text
                      +    if not self._stream_ts:
                      +        response = self._client.chat_startStream(
                      +            **self._stream_args,
                      +            token=self._token,
                      +        )
                      +        if not response.get("ts"):
                      +            raise e.SlackRequestError("Failed to stop stream: stream not started")
                      +        self._stream_ts = str(response["ts"])
                      +        self._state = "in_progress"
                      +    response = self._client.chat_stopStream(
                      +        token=self._token,
                      +        channel=self._stream_args["channel"],
                      +        ts=self._stream_ts,
                      +        blocks=blocks,
                      +        markdown_text=self._buffer,
                      +        metadata=metadata,
                      +        **kwargs,
                      +    )
                      +    self._state = "completed"
                      +    return response
                      +
                      +

                      Stop the stream and finalize the message.

                      +

                      Args

                      +
                      +
                      blocks
                      +
                      A list of blocks that will be rendered at the bottom of the finalized message.
                      +
                      markdown_text
                      +
                      Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is +what will be appended to the message received so far.
                      +
                      metadata
                      +
                      JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you +post to Slack is accessible to any app or user who is a member of that workspace.
                      +
                      **kwargs
                      +
                      Additional arguments passed to the underlying API calls.
                      +
                      +

                      Returns

                      +

                      SlackResponse from the chat.stopStream API call.

                      +

                      Raises

                      +
                      +
                      SlackRequestError
                      +
                      If the stream is already completed.
                      +
                      +

                      Example

                      +
                      streamer = client.chat_stream(
                      +    channel="C0123456789",
                      +    thread_ts="1700000001.123456",
                      +    recipient_team_id="T0123456789",
                      +    recipient_user_id="U0123456789",
                      +)
                      +streamer.append(markdown_text="**hello wo")
                      +streamer.append(markdown_text="rld!**")
                      +streamer.stop()
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + +
                      + + + diff --git a/docs/reference/web/client.html b/docs/reference/web/client.html index 3a315c83d..6be773f23 100644 --- a/docs/reference/web/client.html +++ b/docs/reference/web/client.html @@ -2097,13 +2097,17 @@

                      Classes

                      channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs) def assistant_threads_setTitle( self, @@ -2113,7 +2117,7 @@

                      Classes

                      title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) @@ -2128,7 +2132,7 @@

                      Classes

                      prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -2642,6 +2646,27 @@

                      Classes

                      # -------------------------- + def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> SlackResponse: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.appendStream", json=kwargs) + def chat_delete( self, *, @@ -2846,6 +2871,146 @@

                      Classes

                      # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) + def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return self.api_call("chat.scheduledMessages.list", params=kwargs) + + def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.startStream", json=kwargs) + + def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> SlackResponse: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.stopStream", json=kwargs) + + def chat_stream( + self, + *, + buffer_size: int = 256, + channel: str, + thread_ts: str, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> ChatStream: + """Stream markdown text into a conversation. + + This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, + the stream can be stopped with concluding arguments such as "blocks" for gathering feedback. + + The following methods are used: + + - chat.startStream: Starts a new streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.startStream). + - chat.appendStream: Appends text to an existing streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.appendStream). + - chat.stopStream: Stops a streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.stopStream). + + Args: + buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this + value decreases the number of method calls made for the same amount of text, which is useful to avoid rate + limits. Default: 256. + channel: An encoded ID that represents a channel, private group, or DM. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + ChatStream instance for managing the stream + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + return ChatStream( + self, + logger=self._logger, + channel=channel, + thread_ts=thread_ts, + recipient_team_id=recipient_team_id, + recipient_user_id=recipient_user_id, + buffer_size=buffer_size, + **kwargs, + ) + def chat_unfurl( self, *, @@ -2926,32 +3091,6 @@

                      Classes

                      # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) - def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> SlackResponse: - """Lists all scheduled messages. - https://docs.slack.dev/reference/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return self.api_call("chat.scheduledMessages.list", params=kwargs) - def conversations_acceptSharedInvite( self, *, @@ -8786,7 +8925,7 @@

                      Methods

                      https://docs.slack.dev/reference/methods/apps.uninstall

                      -def assistant_threads_setStatus(self, *, channel_id: str, thread_ts: str, status: str, **kwargs) ‑> SlackResponse +def assistant_threads_setStatus(self,
                      *,
                      channel_id: str,
                      thread_ts: str,
                      status: str,
                      loading_messages: List[str] | None = None,
                      **kwargs) ‑> SlackResponse
                      @@ -8799,15 +8938,19 @@

                      Methods

                      channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs)
                      + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs)
                      -

                      Revokes a token. +

                      @@ -8827,7 +8970,7 @@

                      Methods

                      prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -8835,7 +8978,7 @@

                      Methods

                      kwargs.update({"title": title}) return self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
                      -

                      Revokes a token. +

                      Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

                      @@ -8854,13 +8997,13 @@

                      Methods

                      title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs)
                      -

                      Revokes a token. +

                      Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle

                      @@ -9731,6 +9874,38 @@

                      Methods

                      Unarchives a channel.

                      +
                      +def chat_appendStream(self, *, channel: str, ts: str, markdown_text: str, **kwargs) ‑> SlackResponse +
                      +
                      +
                      + +Expand source code + +
                      def chat_appendStream(
                      +    self,
                      +    *,
                      +    channel: str,
                      +    ts: str,
                      +    markdown_text: str,
                      +    **kwargs,
                      +) -> SlackResponse:
                      +    """Appends text to an existing streaming conversation.
                      +    https://docs.slack.dev/reference/methods/chat.appendStream
                      +    """
                      +    kwargs.update(
                      +        {
                      +            "channel": channel,
                      +            "ts": ts,
                      +            "markdown_text": markdown_text,
                      +        }
                      +    )
                      +    kwargs = _remove_none_values(kwargs)
                      +    return self.api_call("chat.appendStream", json=kwargs)
                      +
                      +

                      Appends text to an existing streaming conversation. +https://docs.slack.dev/reference/methods/chat.appendStream

                      +
                      def chat_delete(self, *, channel: str, ts: str, as_user: bool | None = None, **kwargs) ‑> SlackResponse
                      @@ -10049,6 +10224,195 @@

                      Methods

                      +
                      +def chat_startStream(self,
                      *,
                      channel: str,
                      thread_ts: str,
                      markdown_text: str | None = None,
                      recipient_team_id: str | None = None,
                      recipient_user_id: str | None = None,
                      **kwargs) ‑> SlackResponse
                      +
                      +
                      +
                      + +Expand source code + +
                      def chat_startStream(
                      +    self,
                      +    *,
                      +    channel: str,
                      +    thread_ts: str,
                      +    markdown_text: Optional[str] = None,
                      +    recipient_team_id: Optional[str] = None,
                      +    recipient_user_id: Optional[str] = None,
                      +    **kwargs,
                      +) -> SlackResponse:
                      +    """Starts a new streaming conversation.
                      +    https://docs.slack.dev/reference/methods/chat.startStream
                      +    """
                      +    kwargs.update(
                      +        {
                      +            "channel": channel,
                      +            "thread_ts": thread_ts,
                      +            "markdown_text": markdown_text,
                      +            "recipient_team_id": recipient_team_id,
                      +            "recipient_user_id": recipient_user_id,
                      +        }
                      +    )
                      +    kwargs = _remove_none_values(kwargs)
                      +    return self.api_call("chat.startStream", json=kwargs)
                      +
                      +

                      Starts a new streaming conversation. +https://docs.slack.dev/reference/methods/chat.startStream

                      +
                      +
                      +def chat_stopStream(self,
                      *,
                      channel: str,
                      ts: str,
                      markdown_text: str | None = None,
                      blocks: str | Sequence[Dict | Block] | None = None,
                      metadata: Dict | Metadata | None = None,
                      **kwargs) ‑> SlackResponse
                      +
                      +
                      +
                      + +Expand source code + +
                      def chat_stopStream(
                      +    self,
                      +    *,
                      +    channel: str,
                      +    ts: str,
                      +    markdown_text: Optional[str] = None,
                      +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
                      +    metadata: Optional[Union[Dict, Metadata]] = None,
                      +    **kwargs,
                      +) -> SlackResponse:
                      +    """Stops a streaming conversation.
                      +    https://docs.slack.dev/reference/methods/chat.stopStream
                      +    """
                      +    kwargs.update(
                      +        {
                      +            "channel": channel,
                      +            "ts": ts,
                      +            "markdown_text": markdown_text,
                      +            "blocks": blocks,
                      +            "metadata": metadata,
                      +        }
                      +    )
                      +    _parse_web_class_objects(kwargs)
                      +    kwargs = _remove_none_values(kwargs)
                      +    return self.api_call("chat.stopStream", json=kwargs)
                      +
                      + +
                      +
                      +def chat_stream(self,
                      *,
                      buffer_size: int = 256,
                      channel: str,
                      thread_ts: str,
                      recipient_team_id: str | None = None,
                      recipient_user_id: str | None = None,
                      **kwargs) ‑> ChatStream
                      +
                      +
                      +
                      + +Expand source code + +
                      def chat_stream(
                      +    self,
                      +    *,
                      +    buffer_size: int = 256,
                      +    channel: str,
                      +    thread_ts: str,
                      +    recipient_team_id: Optional[str] = None,
                      +    recipient_user_id: Optional[str] = None,
                      +    **kwargs,
                      +) -> ChatStream:
                      +    """Stream markdown text into a conversation.
                      +
                      +    This method starts a new chat stream in a conversation that can be appended to. After appending an entire message,
                      +    the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.
                      +
                      +    The following methods are used:
                      +
                      +    - chat.startStream: Starts a new streaming conversation.
                      +      [Reference](https://docs.slack.dev/reference/methods/chat.startStream).
                      +    - chat.appendStream: Appends text to an existing streaming conversation.
                      +      [Reference](https://docs.slack.dev/reference/methods/chat.appendStream).
                      +    - chat.stopStream: Stops a streaming conversation.
                      +      [Reference](https://docs.slack.dev/reference/methods/chat.stopStream).
                      +
                      +    Args:
                      +        buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this
                      +          value decreases the number of method calls made for the same amount of text, which is useful to avoid rate
                      +          limits. Default: 256.
                      +        channel: An encoded ID that represents a channel, private group, or DM.
                      +        thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user
                      +          request.
                      +        recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when
                      +          streaming to channels.
                      +        recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
                      +        **kwargs: Additional arguments passed to the underlying API calls.
                      +
                      +    Returns:
                      +        ChatStream instance for managing the stream
                      +
                      +    Example:
                      +        ```python
                      +        streamer = client.chat_stream(
                      +            channel="C0123456789",
                      +            thread_ts="1700000001.123456",
                      +            recipient_team_id="T0123456789",
                      +            recipient_user_id="U0123456789",
                      +        )
                      +        streamer.append(markdown_text="**hello wo")
                      +        streamer.append(markdown_text="rld!**")
                      +        streamer.stop()
                      +        ```
                      +    """
                      +    return ChatStream(
                      +        self,
                      +        logger=self._logger,
                      +        channel=channel,
                      +        thread_ts=thread_ts,
                      +        recipient_team_id=recipient_team_id,
                      +        recipient_user_id=recipient_user_id,
                      +        buffer_size=buffer_size,
                      +        **kwargs,
                      +    )
                      +
                      +

                      Stream markdown text into a conversation.

                      +

                      This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, +the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.

                      +

                      The following methods are used:

                      +
                        +
                      • chat.startStream: Starts a new streaming conversation. +Reference.
                      • +
                      • chat.appendStream: Appends text to an existing streaming conversation. +Reference.
                      • +
                      • chat.stopStream: Stops a streaming conversation. +Reference.
                      • +
                      +

                      Args

                      +
                      +
                      buffer_size
                      +
                      The length of markdown_text to buffer in-memory before calling a stream method. Increasing this +value decreases the number of method calls made for the same amount of text, which is useful to avoid rate +limits. Default: 256.
                      +
                      channel
                      +
                      An encoded ID that represents a channel, private group, or DM.
                      +
                      thread_ts
                      +
                      Provide another message's ts value to reply to. Streamed messages should always be replies to a user +request.
                      +
                      recipient_team_id
                      +
                      The encoded ID of the team the user receiving the streaming text belongs to. Required when +streaming to channels.
                      +
                      recipient_user_id
                      +
                      The encoded ID of the user to receive the streaming text. Required when streaming to channels.
                      +
                      **kwargs
                      +
                      Additional arguments passed to the underlying API calls.
                      +
                      +

                      Returns

                      +

                      ChatStream instance for managing the stream

                      +

                      Example

                      +
                      streamer = client.chat_stream(
                      +    channel="C0123456789",
                      +    thread_ts="1700000001.123456",
                      +    recipient_team_id="T0123456789",
                      +    recipient_user_id="U0123456789",
                      +)
                      +streamer.append(markdown_text="**hello wo")
                      +streamer.append(markdown_text="rld!**")
                      +streamer.stop()
                      +
                      +
                      def chat_unfurl(self,
                      *,
                      channel: str | None = None,
                      ts: str | None = None,
                      source: str | None = None,
                      unfurl_id: str | None = None,
                      unfurls: Dict[str, Dict] | None = None,
                      user_auth_blocks: str | Sequence[Dict | Block] | None = None,
                      user_auth_message: str | None = None,
                      user_auth_required: bool | None = None,
                      user_auth_url: str | None = None,
                      **kwargs) ‑> SlackResponse
                      @@ -14554,6 +14918,7 @@

                      channels_setPurpose
                    • channels_setTopic
                    • channels_unarchive
                    • +
                    • chat_appendStream
                    • chat_delete
                    • chat_deleteScheduledMessage
                    • chat_getPermalink
                    • @@ -14562,6 +14927,9 @@

                      chat_postMessage
                    • chat_scheduleMessage
                    • chat_scheduledMessages_list
                    • +
                    • chat_startStream
                    • +
                    • chat_stopStream
                    • +
                    • chat_stream
                    • chat_unfurl
                    • chat_update
                    • conversations_acceptSharedInvite
                    • diff --git a/docs/reference/web/index.html b/docs/reference/web/index.html index ee73d3ba2..f4f7e2f2b 100644 --- a/docs/reference/web/index.html +++ b/docs/reference/web/index.html @@ -47,6 +47,10 @@

                      Sub-modules

                      +
                      slack_sdk.web.async_chat_stream
                      +
                      +
                      +
                      slack_sdk.web.async_client

                      A Python module for interacting with Slack's Web API.

                      @@ -63,6 +67,10 @@

                      Sub-modules

                      A Python module for interacting with Slack's Web API.

                      +
                      slack_sdk.web.chat_stream
                      +
                      +
                      +
                      slack_sdk.web.client

                      A Python module for interacting with Slack's Web API.

                      @@ -2458,13 +2466,17 @@

                      Raises

                      channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs) def assistant_threads_setTitle( self, @@ -2474,7 +2486,7 @@

                      Raises

                      title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) @@ -2489,7 +2501,7 @@

                      Raises

                      prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -3003,6 +3015,27 @@

                      Raises

                      # -------------------------- + def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> SlackResponse: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.appendStream", json=kwargs) + def chat_delete( self, *, @@ -3207,6 +3240,146 @@

                      Raises

                      # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) + def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return self.api_call("chat.scheduledMessages.list", params=kwargs) + + def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.startStream", json=kwargs) + + def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> SlackResponse: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.stopStream", json=kwargs) + + def chat_stream( + self, + *, + buffer_size: int = 256, + channel: str, + thread_ts: str, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> ChatStream: + """Stream markdown text into a conversation. + + This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, + the stream can be stopped with concluding arguments such as "blocks" for gathering feedback. + + The following methods are used: + + - chat.startStream: Starts a new streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.startStream). + - chat.appendStream: Appends text to an existing streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.appendStream). + - chat.stopStream: Stops a streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.stopStream). + + Args: + buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this + value decreases the number of method calls made for the same amount of text, which is useful to avoid rate + limits. Default: 256. + channel: An encoded ID that represents a channel, private group, or DM. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + ChatStream instance for managing the stream + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + return ChatStream( + self, + logger=self._logger, + channel=channel, + thread_ts=thread_ts, + recipient_team_id=recipient_team_id, + recipient_user_id=recipient_user_id, + buffer_size=buffer_size, + **kwargs, + ) + def chat_unfurl( self, *, @@ -3287,32 +3460,6 @@

                      Raises

                      # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) - def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> SlackResponse: - """Lists all scheduled messages. - https://docs.slack.dev/reference/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return self.api_call("chat.scheduledMessages.list", params=kwargs) - def conversations_acceptSharedInvite( self, *, @@ -9147,7 +9294,7 @@

                      Methods

                      https://docs.slack.dev/reference/methods/apps.uninstall

                      -def assistant_threads_setStatus(self, *, channel_id: str, thread_ts: str, status: str, **kwargs) ‑> SlackResponse +def assistant_threads_setStatus(self,
                      *,
                      channel_id: str,
                      thread_ts: str,
                      status: str,
                      loading_messages: List[str] | None = None,
                      **kwargs) ‑> SlackResponse
                      @@ -9160,15 +9307,19 @@

                      Methods

                      channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs)
                      + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs)
                      -

                      Revokes a token. +

                      @@ -9188,7 +9339,7 @@

                      Methods

                      prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -9196,7 +9347,7 @@

                      Methods

                      kwargs.update({"title": title}) return self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
                      -

                      Revokes a token. +

                      Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

                      @@ -9215,13 +9366,13 @@

                      Methods

                      title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs)
                      -

                      Revokes a token. +

                      Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle

                      @@ -10092,6 +10243,38 @@

                      Methods

                      Unarchives a channel.

                      +
                      +def chat_appendStream(self, *, channel: str, ts: str, markdown_text: str, **kwargs) ‑> SlackResponse +
                      +
                      +
                      + +Expand source code + +
                      def chat_appendStream(
                      +    self,
                      +    *,
                      +    channel: str,
                      +    ts: str,
                      +    markdown_text: str,
                      +    **kwargs,
                      +) -> SlackResponse:
                      +    """Appends text to an existing streaming conversation.
                      +    https://docs.slack.dev/reference/methods/chat.appendStream
                      +    """
                      +    kwargs.update(
                      +        {
                      +            "channel": channel,
                      +            "ts": ts,
                      +            "markdown_text": markdown_text,
                      +        }
                      +    )
                      +    kwargs = _remove_none_values(kwargs)
                      +    return self.api_call("chat.appendStream", json=kwargs)
                      +
                      +

                      Appends text to an existing streaming conversation. +https://docs.slack.dev/reference/methods/chat.appendStream

                      +
                      def chat_delete(self, *, channel: str, ts: str, as_user: bool | None = None, **kwargs) ‑> SlackResponse
                      @@ -10410,6 +10593,195 @@

                      Methods

                      +
                      +def chat_startStream(self,
                      *,
                      channel: str,
                      thread_ts: str,
                      markdown_text: str | None = None,
                      recipient_team_id: str | None = None,
                      recipient_user_id: str | None = None,
                      **kwargs) ‑> SlackResponse
                      +
                      +
                      +
                      + +Expand source code + +
                      def chat_startStream(
                      +    self,
                      +    *,
                      +    channel: str,
                      +    thread_ts: str,
                      +    markdown_text: Optional[str] = None,
                      +    recipient_team_id: Optional[str] = None,
                      +    recipient_user_id: Optional[str] = None,
                      +    **kwargs,
                      +) -> SlackResponse:
                      +    """Starts a new streaming conversation.
                      +    https://docs.slack.dev/reference/methods/chat.startStream
                      +    """
                      +    kwargs.update(
                      +        {
                      +            "channel": channel,
                      +            "thread_ts": thread_ts,
                      +            "markdown_text": markdown_text,
                      +            "recipient_team_id": recipient_team_id,
                      +            "recipient_user_id": recipient_user_id,
                      +        }
                      +    )
                      +    kwargs = _remove_none_values(kwargs)
                      +    return self.api_call("chat.startStream", json=kwargs)
                      +
                      +

                      Starts a new streaming conversation. +https://docs.slack.dev/reference/methods/chat.startStream

                      +
                      +
                      +def chat_stopStream(self,
                      *,
                      channel: str,
                      ts: str,
                      markdown_text: str | None = None,
                      blocks: str | Sequence[Dict | Block] | None = None,
                      metadata: Dict | Metadata | None = None,
                      **kwargs) ‑> SlackResponse
                      +
                      +
                      +
                      + +Expand source code + +
                      def chat_stopStream(
                      +    self,
                      +    *,
                      +    channel: str,
                      +    ts: str,
                      +    markdown_text: Optional[str] = None,
                      +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
                      +    metadata: Optional[Union[Dict, Metadata]] = None,
                      +    **kwargs,
                      +) -> SlackResponse:
                      +    """Stops a streaming conversation.
                      +    https://docs.slack.dev/reference/methods/chat.stopStream
                      +    """
                      +    kwargs.update(
                      +        {
                      +            "channel": channel,
                      +            "ts": ts,
                      +            "markdown_text": markdown_text,
                      +            "blocks": blocks,
                      +            "metadata": metadata,
                      +        }
                      +    )
                      +    _parse_web_class_objects(kwargs)
                      +    kwargs = _remove_none_values(kwargs)
                      +    return self.api_call("chat.stopStream", json=kwargs)
                      +
                      + +
                      +
                      +def chat_stream(self,
                      *,
                      buffer_size: int = 256,
                      channel: str,
                      thread_ts: str,
                      recipient_team_id: str | None = None,
                      recipient_user_id: str | None = None,
                      **kwargs) ‑> ChatStream
                      +
                      +
                      +
                      + +Expand source code + +
                      def chat_stream(
                      +    self,
                      +    *,
                      +    buffer_size: int = 256,
                      +    channel: str,
                      +    thread_ts: str,
                      +    recipient_team_id: Optional[str] = None,
                      +    recipient_user_id: Optional[str] = None,
                      +    **kwargs,
                      +) -> ChatStream:
                      +    """Stream markdown text into a conversation.
                      +
                      +    This method starts a new chat stream in a conversation that can be appended to. After appending an entire message,
                      +    the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.
                      +
                      +    The following methods are used:
                      +
                      +    - chat.startStream: Starts a new streaming conversation.
                      +      [Reference](https://docs.slack.dev/reference/methods/chat.startStream).
                      +    - chat.appendStream: Appends text to an existing streaming conversation.
                      +      [Reference](https://docs.slack.dev/reference/methods/chat.appendStream).
                      +    - chat.stopStream: Stops a streaming conversation.
                      +      [Reference](https://docs.slack.dev/reference/methods/chat.stopStream).
                      +
                      +    Args:
                      +        buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this
                      +          value decreases the number of method calls made for the same amount of text, which is useful to avoid rate
                      +          limits. Default: 256.
                      +        channel: An encoded ID that represents a channel, private group, or DM.
                      +        thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user
                      +          request.
                      +        recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when
                      +          streaming to channels.
                      +        recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
                      +        **kwargs: Additional arguments passed to the underlying API calls.
                      +
                      +    Returns:
                      +        ChatStream instance for managing the stream
                      +
                      +    Example:
                      +        ```python
                      +        streamer = client.chat_stream(
                      +            channel="C0123456789",
                      +            thread_ts="1700000001.123456",
                      +            recipient_team_id="T0123456789",
                      +            recipient_user_id="U0123456789",
                      +        )
                      +        streamer.append(markdown_text="**hello wo")
                      +        streamer.append(markdown_text="rld!**")
                      +        streamer.stop()
                      +        ```
                      +    """
                      +    return ChatStream(
                      +        self,
                      +        logger=self._logger,
                      +        channel=channel,
                      +        thread_ts=thread_ts,
                      +        recipient_team_id=recipient_team_id,
                      +        recipient_user_id=recipient_user_id,
                      +        buffer_size=buffer_size,
                      +        **kwargs,
                      +    )
                      +
                      +

                      Stream markdown text into a conversation.

                      +

                      This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, +the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.

                      +

                      The following methods are used:

                      +
                        +
                      • chat.startStream: Starts a new streaming conversation. +Reference.
                      • +
                      • chat.appendStream: Appends text to an existing streaming conversation. +Reference.
                      • +
                      • chat.stopStream: Stops a streaming conversation. +Reference.
                      • +
                      +

                      Args

                      +
                      +
                      buffer_size
                      +
                      The length of markdown_text to buffer in-memory before calling a stream method. Increasing this +value decreases the number of method calls made for the same amount of text, which is useful to avoid rate +limits. Default: 256.
                      +
                      channel
                      +
                      An encoded ID that represents a channel, private group, or DM.
                      +
                      thread_ts
                      +
                      Provide another message's ts value to reply to. Streamed messages should always be replies to a user +request.
                      +
                      recipient_team_id
                      +
                      The encoded ID of the team the user receiving the streaming text belongs to. Required when +streaming to channels.
                      +
                      recipient_user_id
                      +
                      The encoded ID of the user to receive the streaming text. Required when streaming to channels.
                      +
                      **kwargs
                      +
                      Additional arguments passed to the underlying API calls.
                      +
                      +

                      Returns

                      +

                      ChatStream instance for managing the stream

                      +

                      Example

                      +
                      streamer = client.chat_stream(
                      +    channel="C0123456789",
                      +    thread_ts="1700000001.123456",
                      +    recipient_team_id="T0123456789",
                      +    recipient_user_id="U0123456789",
                      +)
                      +streamer.append(markdown_text="**hello wo")
                      +streamer.append(markdown_text="rld!**")
                      +streamer.stop()
                      +
                      +
                      def chat_unfurl(self,
                      *,
                      channel: str | None = None,
                      ts: str | None = None,
                      source: str | None = None,
                      unfurl_id: str | None = None,
                      unfurls: Dict[str, Dict] | None = None,
                      user_auth_blocks: str | Sequence[Dict | Block] | None = None,
                      user_auth_message: str | None = None,
                      user_auth_required: bool | None = None,
                      user_auth_url: str | None = None,
                      **kwargs) ‑> SlackResponse
                      @@ -14768,10 +15140,12 @@

                      Inherited members

                    • Sub-modules

                      • slack_sdk.web.async_base_client
                      • +
                      • slack_sdk.web.async_chat_stream
                      • slack_sdk.web.async_client
                      • slack_sdk.web.async_internal_utils
                      • slack_sdk.web.async_slack_response
                      • slack_sdk.web.base_client
                      • +
                      • slack_sdk.web.chat_stream
                      • slack_sdk.web.client
                      • slack_sdk.web.deprecation
                      • slack_sdk.web.file_upload_v2_result
                      • @@ -14939,6 +15313,7 @@

                        Web
                      • channels_setPurpose
                      • channels_setTopic
                      • channels_unarchive
                      • +
                      • chat_appendStream
                      • chat_delete
                      • chat_deleteScheduledMessage
                      • chat_getPermalink
                      • @@ -14947,6 +15322,9 @@

                        Web
                      • chat_postMessage
                      • chat_scheduleMessage
                      • chat_scheduledMessages_list
                      • +
                      • chat_startStream
                      • +
                      • chat_stopStream
                      • +
                      • chat_stream
                      • chat_unfurl
                      • chat_update
                      • conversations_acceptSharedInvite
                      • diff --git a/docs/reference/web/legacy_client.html b/docs/reference/web/legacy_client.html index 0ac5ac6b9..70cc6988d 100644 --- a/docs/reference/web/legacy_client.html +++ b/docs/reference/web/legacy_client.html @@ -2096,13 +2096,17 @@

                        Classes

                        channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs) def assistant_threads_setTitle( self, @@ -2112,7 +2116,7 @@

                        Classes

                        title: str, **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) @@ -2127,7 +2131,7 @@

                        Classes

                        prompts: List[Dict[str, str]], **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -2641,6 +2645,27 @@

                        Classes

                        # -------------------------- + def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.appendStream", json=kwargs) + def chat_delete( self, *, @@ -2845,6 +2870,83 @@

                        Classes

                        # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) + def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return self.api_call("chat.scheduledMessages.list", params=kwargs) + + def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.startStream", json=kwargs) + + def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.stopStream", json=kwargs) + def chat_unfurl( self, *, @@ -2925,32 +3027,6 @@

                        Classes

                        # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) - def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> Union[Future, SlackResponse]: - """Lists all scheduled messages. - https://docs.slack.dev/reference/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return self.api_call("chat.scheduledMessages.list", params=kwargs) - def conversations_acceptSharedInvite( self, *, @@ -8785,7 +8861,7 @@

                        Methods

                        https://docs.slack.dev/reference/methods/apps.uninstall

                        -def assistant_threads_setStatus(self, *, channel_id: str, thread_ts: str, status: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse +def assistant_threads_setStatus(self,
                        *,
                        channel_id: str,
                        thread_ts: str,
                        status: str,
                        loading_messages: List[str] | None = None,
                        **kwargs) ‑> _asyncio.Future | LegacySlackResponse
                        @@ -8798,15 +8874,19 @@

                        Methods

                        channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs)
                        + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs)
                        -

                        Revokes a token. +

                        @@ -8826,7 +8906,7 @@

                        Methods

                        prompts: List[Dict[str, str]], **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -8834,7 +8914,7 @@

                        Methods

                        kwargs.update({"title": title}) return self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
                        -

                        Revokes a token. +

                        Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

                        @@ -8853,13 +8933,13 @@

                        Methods

                        title: str, **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs)
                        -

                        Revokes a token. +

                        Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle

                        @@ -9730,6 +9810,38 @@

                        Methods

                        Unarchives a channel.

                        +
                        +def chat_appendStream(self, *, channel: str, ts: str, markdown_text: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse +
                        +
                        +
                        + +Expand source code + +
                        def chat_appendStream(
                        +    self,
                        +    *,
                        +    channel: str,
                        +    ts: str,
                        +    markdown_text: str,
                        +    **kwargs,
                        +) -> Union[Future, SlackResponse]:
                        +    """Appends text to an existing streaming conversation.
                        +    https://docs.slack.dev/reference/methods/chat.appendStream
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "channel": channel,
                        +            "ts": ts,
                        +            "markdown_text": markdown_text,
                        +        }
                        +    )
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("chat.appendStream", json=kwargs)
                        +
                        +

                        Appends text to an existing streaming conversation. +https://docs.slack.dev/reference/methods/chat.appendStream

                        +
                        def chat_delete(self, *, channel: str, ts: str, as_user: bool | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse
                        @@ -10048,6 +10160,79 @@

                        Methods

                        +
                        +def chat_startStream(self,
                        *,
                        channel: str,
                        thread_ts: str,
                        markdown_text: str | None = None,
                        recipient_team_id: str | None = None,
                        recipient_user_id: str | None = None,
                        **kwargs) ‑> _asyncio.Future | LegacySlackResponse
                        +
                        +
                        +
                        + +Expand source code + +
                        def chat_startStream(
                        +    self,
                        +    *,
                        +    channel: str,
                        +    thread_ts: str,
                        +    markdown_text: Optional[str] = None,
                        +    recipient_team_id: Optional[str] = None,
                        +    recipient_user_id: Optional[str] = None,
                        +    **kwargs,
                        +) -> Union[Future, SlackResponse]:
                        +    """Starts a new streaming conversation.
                        +    https://docs.slack.dev/reference/methods/chat.startStream
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "channel": channel,
                        +            "thread_ts": thread_ts,
                        +            "markdown_text": markdown_text,
                        +            "recipient_team_id": recipient_team_id,
                        +            "recipient_user_id": recipient_user_id,
                        +        }
                        +    )
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("chat.startStream", json=kwargs)
                        +
                        +

                        Starts a new streaming conversation. +https://docs.slack.dev/reference/methods/chat.startStream

                        +
                        +
                        +def chat_stopStream(self,
                        *,
                        channel: str,
                        ts: str,
                        markdown_text: str | None = None,
                        blocks: str | Sequence[Dict | Block] | None = None,
                        metadata: Dict | Metadata | None = None,
                        **kwargs) ‑> _asyncio.Future | LegacySlackResponse
                        +
                        +
                        +
                        + +Expand source code + +
                        def chat_stopStream(
                        +    self,
                        +    *,
                        +    channel: str,
                        +    ts: str,
                        +    markdown_text: Optional[str] = None,
                        +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
                        +    metadata: Optional[Union[Dict, Metadata]] = None,
                        +    **kwargs,
                        +) -> Union[Future, SlackResponse]:
                        +    """Stops a streaming conversation.
                        +    https://docs.slack.dev/reference/methods/chat.stopStream
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "channel": channel,
                        +            "ts": ts,
                        +            "markdown_text": markdown_text,
                        +            "blocks": blocks,
                        +            "metadata": metadata,
                        +        }
                        +    )
                        +    _parse_web_class_objects(kwargs)
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("chat.stopStream", json=kwargs)
                        +
                        + +
                        def chat_unfurl(self,
                        *,
                        channel: str | None = None,
                        ts: str | None = None,
                        source: str | None = None,
                        unfurl_id: str | None = None,
                        unfurls: Dict[str, Dict] | None = None,
                        user_auth_blocks: str | Sequence[Dict | Block] | None = None,
                        user_auth_message: str | None = None,
                        user_auth_required: bool | None = None,
                        user_auth_url: str | None = None,
                        **kwargs) ‑> _asyncio.Future | LegacySlackResponse
                        @@ -14552,6 +14737,7 @@

                        channels_setPurpose
                      • channels_setTopic
                      • channels_unarchive
                      • +
                      • chat_appendStream
                      • chat_delete
                      • chat_deleteScheduledMessage
                      • chat_getPermalink
                      • @@ -14560,6 +14746,8 @@

                        chat_postMessage
                      • chat_scheduleMessage
                      • chat_scheduledMessages_list
                      • +
                      • chat_startStream
                      • +
                      • chat_stopStream
                      • chat_unfurl
                      • chat_update
                      • conversations_acceptSharedInvite
                      • diff --git a/scripts/codegen.py b/scripts/codegen.py index f58de8bd1..3633faf35 100644 --- a/scripts/codegen.py +++ b/scripts/codegen.py @@ -1,5 +1,5 @@ -import sys import argparse +import sys parser = argparse.ArgumentParser() parser.add_argument("-p", "--path", help="Path to the project source code.", type=str) @@ -35,7 +35,6 @@ "from .async_base_client import AsyncBaseClient, AsyncSlackResponse", async_source, ) - # from slack_sdk import WebClient async_source = re.sub( r"class WebClient\(BaseClient\):", "class AsyncWebClient(AsyncBaseClient):", @@ -47,6 +46,28 @@ async_source, ) async_source = re.sub(r"= WebClient\(", "= AsyncWebClient(", async_source) + async_source = re.sub( + "from slack_sdk.web.chat_stream import ChatStream", + "from slack_sdk.web.async_chat_stream import AsyncChatStream", + async_source, + ) + async_source = re.sub(r"ChatStream:", "AsyncChatStream:", async_source) + async_source = re.sub(r"ChatStream\(", "AsyncChatStream(", async_source) + async_source = re.sub( + r" client.chat_stream\(", + " await client.chat_stream(", + async_source, + ) + async_source = re.sub( + r" streamer.append\(", + " await streamer.append(", + async_source, + ) + async_source = re.sub( + r" streamer.stop\(", + " await streamer.stop(", + async_source, + ) async_source = re.sub( r" self.files_getUploadURLExternal\(", " await self.files_getUploadURLExternal(", @@ -98,5 +119,35 @@ legacy_source, ) legacy_source = re.sub(r"= WebClient\(", "= LegacyWebClient(", legacy_source) + legacy_source = re.sub(r"^from slack_sdk.web.chat_stream import ChatStream\n", "", legacy_source, flags=re.MULTILINE) + legacy_source = re.sub(r"(?s)def chat_stream.*?(?=def)", "", legacy_source) with open(f"{args.path}/slack_sdk/web/legacy_client.py", "w") as output: output.write(legacy_source) + +with open(f"{args.path}/slack_sdk/web/chat_stream.py", "r") as original: + source = original.read() + import re + + async_source = header + source + async_source = re.sub( + "from slack_sdk.web.slack_response import SlackResponse", + "from slack_sdk.web.async_slack_response import AsyncSlackResponse", + async_source, + ) + async_source = re.sub( + r"from slack_sdk import WebClient", + "from slack_sdk.web.async_client import AsyncWebClient", + async_source, + ) + async_source = re.sub("class ChatStream", "class AsyncChatStream", async_source) + async_source = re.sub('"WebClient"', '"AsyncWebClient"', async_source) + async_source = re.sub(r"Optional\[SlackResponse\]", "Optional[AsyncSlackResponse]", async_source) + async_source = re.sub(r"SlackResponse ", "AsyncSlackResponse ", async_source) + async_source = re.sub(r"SlackResponse:", "AsyncSlackResponse:", async_source) + async_source = re.sub(r"def append\(", "async def append(", async_source) + async_source = re.sub(r"def stop\(", "async def stop(", async_source) + async_source = re.sub(r"def _flush_buffer\(", "async def _flush_buffer(", async_source) + async_source = re.sub("self._client.chat_", "await self._client.chat_", async_source) + async_source = re.sub("self._flush_buffer", "await self._flush_buffer", async_source) + with open(f"{args.path}/slack_sdk/web/async_chat_stream.py", "w") as output: + output.write(async_source) diff --git a/slack_sdk/models/blocks/__init__.py b/slack_sdk/models/blocks/__init__.py index ecaa2e996..334f55c40 100644 --- a/slack_sdk/models/blocks/__init__.py +++ b/slack_sdk/models/blocks/__init__.py @@ -6,67 +6,79 @@ * https://docs.slack.dev/reference/block-kit/blocks * https://app.slack.com/block-kit-builder """ -from .basic_components import ButtonStyles -from .basic_components import ConfirmObject -from .basic_components import DynamicSelectElementTypes -from .basic_components import MarkdownTextObject -from .basic_components import Option -from .basic_components import OptionGroup -from .basic_components import PlainTextObject -from .basic_components import TextObject -from .block_elements import BlockElement -from .block_elements import ButtonElement -from .block_elements import ChannelMultiSelectElement -from .block_elements import ChannelSelectElement -from .block_elements import CheckboxesElement -from .block_elements import ConversationFilter -from .block_elements import ConversationMultiSelectElement -from .block_elements import ConversationSelectElement -from .block_elements import DatePickerElement -from .block_elements import TimePickerElement -from .block_elements import DateTimePickerElement -from .block_elements import ExternalDataMultiSelectElement -from .block_elements import ExternalDataSelectElement -from .block_elements import ImageElement -from .block_elements import InputInteractiveElement -from .block_elements import InteractiveElement -from .block_elements import LinkButtonElement -from .block_elements import OverflowMenuElement -from .block_elements import RichTextInputElement -from .block_elements import PlainTextInputElement -from .block_elements import EmailInputElement -from .block_elements import UrlInputElement -from .block_elements import NumberInputElement -from .block_elements import RadioButtonsElement -from .block_elements import SelectElement -from .block_elements import StaticMultiSelectElement -from .block_elements import StaticSelectElement -from .block_elements import UserMultiSelectElement -from .block_elements import UserSelectElement -from .block_elements import RichTextElement -from .block_elements import RichTextElementParts -from .block_elements import RichTextListElement -from .block_elements import RichTextPreformattedElement -from .block_elements import RichTextQuoteElement -from .block_elements import RichTextSectionElement -from .blocks import ActionsBlock -from .blocks import Block -from .blocks import CallBlock -from .blocks import ContextBlock -from .blocks import DividerBlock -from .blocks import FileBlock -from .blocks import HeaderBlock -from .blocks import ImageBlock -from .blocks import InputBlock -from .blocks import MarkdownBlock -from .blocks import SectionBlock -from .blocks import VideoBlock -from .blocks import RichTextBlock + +from .basic_components import ( + ButtonStyles, + ConfirmObject, + DynamicSelectElementTypes, + FeedbackButtonObject, + MarkdownTextObject, + Option, + OptionGroup, + PlainTextObject, + TextObject, +) +from .block_elements import ( + BlockElement, + ButtonElement, + ChannelMultiSelectElement, + ChannelSelectElement, + CheckboxesElement, + ConversationFilter, + ConversationMultiSelectElement, + ConversationSelectElement, + DatePickerElement, + DateTimePickerElement, + EmailInputElement, + ExternalDataMultiSelectElement, + ExternalDataSelectElement, + FeedbackButtonsElement, + IconButtonElement, + ImageElement, + InputInteractiveElement, + InteractiveElement, + LinkButtonElement, + NumberInputElement, + OverflowMenuElement, + PlainTextInputElement, + RadioButtonsElement, + RichTextElement, + RichTextElementParts, + RichTextInputElement, + RichTextListElement, + RichTextPreformattedElement, + RichTextQuoteElement, + RichTextSectionElement, + SelectElement, + StaticMultiSelectElement, + StaticSelectElement, + TimePickerElement, + UrlInputElement, + UserMultiSelectElement, + UserSelectElement, +) +from .blocks import ( + ActionsBlock, + Block, + CallBlock, + ContextActionsBlock, + ContextBlock, + DividerBlock, + FileBlock, + HeaderBlock, + ImageBlock, + InputBlock, + MarkdownBlock, + RichTextBlock, + SectionBlock, + VideoBlock, +) __all__ = [ "ButtonStyles", "ConfirmObject", "DynamicSelectElementTypes", + "FeedbackButtonObject", "MarkdownTextObject", "Option", "OptionGroup", @@ -85,6 +97,8 @@ "DateTimePickerElement", "ExternalDataMultiSelectElement", "ExternalDataSelectElement", + "FeedbackButtonsElement", + "IconButtonElement", "ImageElement", "InputInteractiveElement", "InteractiveElement", @@ -110,6 +124,7 @@ "ActionsBlock", "Block", "CallBlock", + "ContextActionsBlock", "ContextBlock", "DividerBlock", "FileBlock", diff --git a/slack_sdk/models/blocks/basic_components.py b/slack_sdk/models/blocks/basic_components.py index 3570656bc..f118c5a7f 100644 --- a/slack_sdk/models/blocks/basic_components.py +++ b/slack_sdk/models/blocks/basic_components.py @@ -1,13 +1,10 @@ import copy import logging import warnings -from typing import List, Optional, Set, Union, Sequence, Dict, Any +from typing import Any, Dict, List, Optional, Sequence, Set, Union from slack_sdk.models import show_unknown_key_warning -from slack_sdk.models.basic_objects import ( - JsonObject, - JsonValidator, -) +from slack_sdk.models.basic_objects import JsonObject, JsonValidator from slack_sdk.models.messages import Link ButtonStyles = {"danger", "primary"} @@ -526,6 +523,66 @@ def to_dict(self) -> Dict[str, Any]: return json +class FeedbackButtonObject(JsonObject): + attributes: Set[str] = set() + + text_max_length = 75 + value_max_length = 2000 + + @classmethod + def parse(cls, feedback_button: Union["FeedbackButtonObject", Dict[str, Any]]): + if feedback_button: + if isinstance(feedback_button, FeedbackButtonObject): + return feedback_button + elif isinstance(feedback_button, dict): + return FeedbackButtonObject(**feedback_button) + else: + # Not yet implemented: show some warning here + return None + return None + + def __init__( + self, + *, + text: Union[str, Dict[str, Any], PlainTextObject], + accessibility_label: Optional[str] = None, + value: str, + **others: Dict[str, Any], + ): + """ + A feedback button element object for either positive or negative feedback. + + Args: + text (required): An object containing some text. Maximum length for this field is 75 characters. + accessibility_label: A label for longer descriptive text about a button element. This label will be read out by + screen readers instead of the button `text` object. + value (required): The button value. Maximum length for this field is 2000 characters. + """ + self._text: Optional[TextObject] = PlainTextObject.parse(text, default_type=PlainTextObject.type) + self._accessibility_label: Optional[str] = accessibility_label + self._value: Optional[str] = value + show_unknown_key_warning(self, others) + + @JsonValidator(f"text attribute cannot exceed {text_max_length} characters") + def text_length(self) -> bool: + return self._text is None or len(self._text.text) <= self.text_max_length + + @JsonValidator(f"value attribute cannot exceed {value_max_length} characters") + def value_length(self) -> bool: + return self._value is None or len(self._value) <= self.value_max_length + + def to_dict(self) -> Dict[str, Any]: + self.validate_json() + json: Dict[str, Union[str, dict]] = {} + if self._text: + json["text"] = self._text.to_dict() + if self._accessibility_label: + json["accessibility_label"] = self._accessibility_label + if self._value: + json["value"] = self._value + return json + + class WorkflowTrigger(JsonObject): attributes = {"trigger"} diff --git a/slack_sdk/models/blocks/block_elements.py b/slack_sdk/models/blocks/block_elements.py index bcef28abe..b38cf21e0 100644 --- a/slack_sdk/models/blocks/block_elements.py +++ b/slack_sdk/models/blocks/block_elements.py @@ -3,23 +3,24 @@ import re import warnings from abc import ABCMeta -from typing import Iterator, List, Optional, Set, Type, Union, Sequence, Dict, Any +from typing import Any, Dict, Iterator, List, Optional, Sequence, Set, Type, Union from slack_sdk.models import show_unknown_key_warning -from slack_sdk.models.basic_objects import ( - JsonObject, - JsonValidator, - EnumValidator, +from slack_sdk.models.basic_objects import EnumValidator, JsonObject, JsonValidator + +from .basic_components import ( + ButtonStyles, + ConfirmObject, + DispatchActionConfig, + FeedbackButtonObject, + MarkdownTextObject, + Option, + OptionGroup, + PlainTextObject, + SlackFile, + TextObject, + Workflow, ) -from .basic_components import ButtonStyles, Workflow, SlackFile -from .basic_components import ConfirmObject -from .basic_components import DispatchActionConfig -from .basic_components import MarkdownTextObject -from .basic_components import Option -from .basic_components import OptionGroup -from .basic_components import PlainTextObject -from .basic_components import TextObject - # ------------------------------------------------- # Block Elements @@ -539,6 +540,43 @@ def _validate_initial_date_time_valid(self) -> bool: return self.initial_date_time is None or (0 <= self.initial_date_time <= 9999999999) +# ------------------------------------------------- +# Feedback Buttons Element +# ------------------------------------------------- + + +class FeedbackButtonsElement(InteractiveElement): + type = "feedback_buttons" + + @property + def attributes(self) -> Set[str]: # type: ignore[override] + return super().attributes.union({"positive_button", "negative_button"}) + + def __init__( + self, + *, + action_id: Optional[str] = None, + positive_button: Union[dict, FeedbackButtonObject], + negative_button: Union[dict, FeedbackButtonObject], + **others: dict, + ): + """Buttons to indicate positive or negative feedback. + + Args: + action_id (required): An identifier for this action. + You can use this when you receive an interaction payload to identify the source of the action. + Should be unique among all other action_ids in the containing block. + Maximum length for this field is 255 characters. + positive_button (required): A button to indicate positive feedback. + negative_button (required): A button to indicate negative feedback. + """ + super().__init__(action_id=action_id, type=self.type) + show_unknown_key_warning(self, others) + + self.positive_button = FeedbackButtonObject.parse(positive_button) + self.negative_button = FeedbackButtonObject.parse(negative_button) + + # ------------------------------------------------- # Image # ------------------------------------------------- @@ -587,6 +625,59 @@ def _validate_alt_text_length(self) -> bool: return len(self.alt_text) <= self.alt_text_max_length # type: ignore[arg-type] +# ------------------------------------------------- +# Icon Button Element +# ------------------------------------------------- + + +class IconButtonElement(InteractiveElement): + type = "icon_button" + + @property + def attributes(self) -> Set[str]: # type: ignore[override] + return super().attributes.union({"icon", "text", "accessibility_label", "value", "visible_to_user_ids", "confirm"}) + + def __init__( + self, + *, + action_id: Optional[str] = None, + icon: str, + text: Union[str, dict, TextObject], + accessibility_label: Optional[str] = None, + value: Optional[str] = None, + visible_to_user_ids: Optional[List[str]] = None, + confirm: Optional[Union[dict, ConfirmObject]] = None, + **others: dict, + ): + """An icon button to perform actions. + + Args: + action_id: An identifier for this action. + You can use this when you receive an interaction payload to identify the source of the action. + Should be unique among all other action_ids in the containing block. + Maximum length for this field is 255 characters. + icon (required): The icon to show (e.g., 'trash'). + text (required): Defines an object containing some text. + accessibility_label: A label for longer descriptive text about a button element. + This label will be read out by screen readers instead of the button text object. + Maximum length for this field is 75 characters. + value: The button value. + Maximum length for this field is 2000 characters. + visible_to_user_ids: User IDs for which the icon appears. + Maximum length for this field is 10 user IDs. + confirm: A confirm object that defines an optional confirmation dialog after the button is clicked. + """ + super().__init__(action_id=action_id, type=self.type) + show_unknown_key_warning(self, others) + + self.icon = icon + self.text = TextObject.parse(text, PlainTextObject.type) + self.accessibility_label = accessibility_label + self.value = value + self.visible_to_user_ids = visible_to_user_ids + self.confirm = ConfirmObject.parse(confirm) if confirm else None + + # ------------------------------------------------- # Static Select # ------------------------------------------------- diff --git a/slack_sdk/models/blocks/blocks.py b/slack_sdk/models/blocks/blocks.py index a32c2c326..69200be25 100644 --- a/slack_sdk/models/blocks/blocks.py +++ b/slack_sdk/models/blocks/blocks.py @@ -4,19 +4,19 @@ from typing import Any, Dict, List, Optional, Sequence, Set, Union from slack_sdk.models import show_unknown_key_warning -from slack_sdk.models.basic_objects import ( - JsonObject, - JsonValidator, -) -from .basic_components import MarkdownTextObject, SlackFile -from .basic_components import PlainTextObject -from .basic_components import TextObject -from .block_elements import BlockElement, RichTextElement -from .block_elements import ImageElement -from .block_elements import InputInteractiveElement -from .block_elements import InteractiveElement -from ...errors import SlackObjectFormationError +from slack_sdk.models.basic_objects import JsonObject, JsonValidator +from ...errors import SlackObjectFormationError +from .basic_components import MarkdownTextObject, PlainTextObject, SlackFile, TextObject +from .block_elements import ( + BlockElement, + FeedbackButtonsElement, + IconButtonElement, + ImageElement, + InputInteractiveElement, + InteractiveElement, + RichTextElement, +) # ------------------------------------------------- # Base Classes @@ -79,6 +79,8 @@ def parse(cls, block: Union[dict, "Block"]) -> Optional["Block"]: return ActionsBlock(**block) elif type == ContextBlock.type: return ContextBlock(**block) + elif type == ContextActionsBlock.type: + return ContextActionsBlock(**block) elif type == InputBlock.type: return InputBlock(**block) elif type == FileBlock.type: @@ -357,6 +359,44 @@ def _validate_elements_length(self): return self.elements is None or len(self.elements) <= self.elements_max_length +class ContextActionsBlock(Block): + type = "context_actions" + elements_max_length = 5 + + @property + def attributes(self) -> Set[str]: # type: ignore[override] + return super().attributes.union({"elements"}) + + def __init__( + self, + *, + elements: Sequence[Union[dict, FeedbackButtonsElement, IconButtonElement]], + block_id: Optional[str] = None, + **others: dict, + ): + """Displays actions as contextual info, which can include both feedback buttons and icon buttons. + + Args: + elements (required): An array of feedback_buttons or icon_button block elements. Maximum number of items is 5. + block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. + Maximum length for this field is 255 characters. + block_id should be unique for each message and each iteration of a message. + If a message is updated, use a new block_id. + """ + super().__init__(type=self.type, block_id=block_id) + show_unknown_key_warning(self, others) + + self.elements = BlockElement.parse_all(elements) + + @JsonValidator("elements attribute must be specified") + def _validate_elements(self): + return self.elements is None or len(self.elements) > 0 + + @JsonValidator(f"elements attribute cannot exceed {elements_max_length} elements") + def _validate_elements_length(self): + return self.elements is None or len(self.elements) <= self.elements_max_length + + class InputBlock(Block): type = "input" label_max_length = 2000 diff --git a/slack_sdk/web/async_chat_stream.py b/slack_sdk/web/async_chat_stream.py new file mode 100644 index 000000000..4661f19dd --- /dev/null +++ b/slack_sdk/web/async_chat_stream.py @@ -0,0 +1,212 @@ +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# +# *** DO NOT EDIT THIS FILE *** +# +# 1) Modify slack_sdk/web/client.py +# 2) Run `python scripts/codegen.py` +# 3) Run `black slack_sdk/` +# +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +import json +import logging +from typing import TYPE_CHECKING, Dict, Optional, Sequence, Union + +import slack_sdk.errors as e +from slack_sdk.models.blocks.blocks import Block +from slack_sdk.models.metadata import Metadata +from slack_sdk.web.async_slack_response import AsyncSlackResponse + +if TYPE_CHECKING: + from slack_sdk.web.async_client import AsyncWebClient + + +class AsyncChatStream: + """A helper class for streaming markdown text into a conversation using the chat streaming APIs. + + This class provides a convenient interface for the chat.startStream, chat.appendStream, and chat.stopStream API + methods, with automatic buffering and state management. + """ + + def __init__( + self, + client: "AsyncWebClient", + *, + channel: str, + logger: logging.Logger, + thread_ts: str, + buffer_size: int, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ): + """Initialize a new ChatStream instance. + + The __init__ method creates a unique ChatStream instance that keeps track of one chat stream. + + Args: + client: The WebClient instance to use for API calls. + channel: An encoded ID that represents a channel, private group, or DM. + logger: A logging channel for outputs. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + buffer_size: The length of markdown_text to buffer in-memory before calling a method. Increasing this value + decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits. + **kwargs: Additional arguments passed to the underlying API calls. + """ + self._client = client + self._logger = logger + self._token: Optional[str] = kwargs.pop("token", None) + self._stream_args = { + "channel": channel, + "thread_ts": thread_ts, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + **kwargs, + } + self._buffer = "" + self._state = "starting" + self._stream_ts: Optional[str] = None + self._buffer_size = buffer_size + + async def append( + self, + *, + markdown_text: str, + **kwargs, + ) -> Optional[AsyncSlackResponse]: + """Append to the stream. + + The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream + is stopped this method cannot be called. + + Args: + markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is + what will be appended to the message received so far. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + AsyncSlackResponse if the buffer was flushed, None if buffering. + + Raises: + SlackRequestError: If the stream is already completed. + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + if self._state == "completed": + raise e.SlackRequestError(f"Cannot append to stream: stream state is {self._state}") + if kwargs.get("token"): + self._token = kwargs.pop("token") + self._buffer += markdown_text + if len(self._buffer) >= self._buffer_size: + return await self._flush_buffer(**kwargs) + details = { + "buffer_length": len(self._buffer), + "buffer_size": self._buffer_size, + "channel": self._stream_args.get("channel"), + "recipient_team_id": self._stream_args.get("recipient_team_id"), + "recipient_user_id": self._stream_args.get("recipient_user_id"), + "thread_ts": self._stream_args.get("thread_ts"), + } + self._logger.debug(f"ChatStream appended to buffer: {json.dumps(details)}") + return None + + async def stop( + self, + *, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Stop the stream and finalize the message. + + Args: + blocks: A list of blocks that will be rendered at the bottom of the finalized message. + markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is + what will be appended to the message received so far. + metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you + post to Slack is accessible to any app or user who is a member of that workspace. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + AsyncSlackResponse from the chat.stopStream API call. + + Raises: + SlackRequestError: If the stream is already completed. + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + if self._state == "completed": + raise e.SlackRequestError(f"Cannot stop stream: stream state is {self._state}") + if kwargs.get("token"): + self._token = kwargs.pop("token") + if markdown_text: + self._buffer += markdown_text + if not self._stream_ts: + response = await self._client.chat_startStream( + **self._stream_args, + token=self._token, + ) + if not response.get("ts"): + raise e.SlackRequestError("Failed to stop stream: stream not started") + self._stream_ts = str(response["ts"]) + self._state = "in_progress" + response = await self._client.chat_stopStream( + token=self._token, + channel=self._stream_args["channel"], + ts=self._stream_ts, + blocks=blocks, + markdown_text=self._buffer, + metadata=metadata, + **kwargs, + ) + self._state = "completed" + return response + + async def _flush_buffer(self, **kwargs) -> AsyncSlackResponse: + """Flush the internal buffer by making appropriate API calls.""" + if not self._stream_ts: + response = await self._client.chat_startStream( + **self._stream_args, + token=self._token, + **kwargs, + markdown_text=self._buffer, + ) + self._stream_ts = response.get("ts") + self._state = "in_progress" + else: + response = await self._client.chat_appendStream( + token=self._token, + channel=self._stream_args["channel"], + ts=self._stream_ts, + **kwargs, + markdown_text=self._buffer, + ) + self._buffer = "" + return response diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index d70a62267..7b82a0923 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -18,6 +18,7 @@ import slack_sdk.errors as e from slack_sdk.models.views import View +from slack_sdk.web.async_chat_stream import AsyncChatStream from ..models.attachments import Attachment from ..models.blocks import Block @@ -2075,13 +2076,17 @@ async def assistant_threads_setStatus( channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return await self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("assistant.threads.setStatus", json=kwargs) async def assistant_threads_setTitle( self, @@ -2091,7 +2096,7 @@ async def assistant_threads_setTitle( title: str, **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) @@ -2106,7 +2111,7 @@ async def assistant_threads_setSuggestedPrompts( prompts: List[Dict[str, str]], **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -2620,6 +2625,27 @@ async def channels_unarchive( # -------------------------- + async def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> AsyncSlackResponse: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("chat.appendStream", json=kwargs) + async def chat_delete( self, *, @@ -2824,6 +2850,146 @@ async def chat_scheduleMessage( # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.scheduleMessage", json=kwargs) + async def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return await self.api_call("chat.scheduledMessages.list", params=kwargs) + + async def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("chat.startStream", json=kwargs) + + async def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return await self.api_call("chat.stopStream", json=kwargs) + + async def chat_stream( + self, + *, + buffer_size: int = 256, + channel: str, + thread_ts: str, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> AsyncChatStream: + """Stream markdown text into a conversation. + + This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, + the stream can be stopped with concluding arguments such as "blocks" for gathering feedback. + + The following methods are used: + + - chat.startStream: Starts a new streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.startStream). + - chat.appendStream: Appends text to an existing streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.appendStream). + - chat.stopStream: Stops a streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.stopStream). + + Args: + buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this + value decreases the number of method calls made for the same amount of text, which is useful to avoid rate + limits. Default: 256. + channel: An encoded ID that represents a channel, private group, or DM. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + ChatStream instance for managing the stream + + Example: + ```python + streamer = await client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + await streamer.append(markdown_text="**hello wo") + await streamer.append(markdown_text="rld!**") + await streamer.stop() + ``` + """ + return AsyncChatStream( + self, + logger=self._logger, + channel=channel, + thread_ts=thread_ts, + recipient_team_id=recipient_team_id, + recipient_user_id=recipient_user_id, + buffer_size=buffer_size, + **kwargs, + ) + async def chat_unfurl( self, *, @@ -2904,32 +3070,6 @@ async def chat_update( # NOTE: intentionally using json over params for API methods using blocks/attachments return await self.api_call("chat.update", json=kwargs) - async def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> AsyncSlackResponse: - """Lists all scheduled messages. - https://docs.slack.dev/reference/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return await self.api_call("chat.scheduledMessages.list", params=kwargs) - async def conversations_acceptSharedInvite( self, *, diff --git a/slack_sdk/web/chat_stream.py b/slack_sdk/web/chat_stream.py new file mode 100644 index 000000000..1a379c9cb --- /dev/null +++ b/slack_sdk/web/chat_stream.py @@ -0,0 +1,202 @@ +import json +import logging +from typing import TYPE_CHECKING, Dict, Optional, Sequence, Union + +import slack_sdk.errors as e +from slack_sdk.models.blocks.blocks import Block +from slack_sdk.models.metadata import Metadata +from slack_sdk.web.slack_response import SlackResponse + +if TYPE_CHECKING: + from slack_sdk import WebClient + + +class ChatStream: + """A helper class for streaming markdown text into a conversation using the chat streaming APIs. + + This class provides a convenient interface for the chat.startStream, chat.appendStream, and chat.stopStream API + methods, with automatic buffering and state management. + """ + + def __init__( + self, + client: "WebClient", + *, + channel: str, + logger: logging.Logger, + thread_ts: str, + buffer_size: int, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ): + """Initialize a new ChatStream instance. + + The __init__ method creates a unique ChatStream instance that keeps track of one chat stream. + + Args: + client: The WebClient instance to use for API calls. + channel: An encoded ID that represents a channel, private group, or DM. + logger: A logging channel for outputs. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + buffer_size: The length of markdown_text to buffer in-memory before calling a method. Increasing this value + decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits. + **kwargs: Additional arguments passed to the underlying API calls. + """ + self._client = client + self._logger = logger + self._token: Optional[str] = kwargs.pop("token", None) + self._stream_args = { + "channel": channel, + "thread_ts": thread_ts, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + **kwargs, + } + self._buffer = "" + self._state = "starting" + self._stream_ts: Optional[str] = None + self._buffer_size = buffer_size + + def append( + self, + *, + markdown_text: str, + **kwargs, + ) -> Optional[SlackResponse]: + """Append to the stream. + + The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream + is stopped this method cannot be called. + + Args: + markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is + what will be appended to the message received so far. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + SlackResponse if the buffer was flushed, None if buffering. + + Raises: + SlackRequestError: If the stream is already completed. + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + if self._state == "completed": + raise e.SlackRequestError(f"Cannot append to stream: stream state is {self._state}") + if kwargs.get("token"): + self._token = kwargs.pop("token") + self._buffer += markdown_text + if len(self._buffer) >= self._buffer_size: + return self._flush_buffer(**kwargs) + details = { + "buffer_length": len(self._buffer), + "buffer_size": self._buffer_size, + "channel": self._stream_args.get("channel"), + "recipient_team_id": self._stream_args.get("recipient_team_id"), + "recipient_user_id": self._stream_args.get("recipient_user_id"), + "thread_ts": self._stream_args.get("thread_ts"), + } + self._logger.debug(f"ChatStream appended to buffer: {json.dumps(details)}") + return None + + def stop( + self, + *, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> SlackResponse: + """Stop the stream and finalize the message. + + Args: + blocks: A list of blocks that will be rendered at the bottom of the finalized message. + markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is + what will be appended to the message received so far. + metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you + post to Slack is accessible to any app or user who is a member of that workspace. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + SlackResponse from the chat.stopStream API call. + + Raises: + SlackRequestError: If the stream is already completed. + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + if self._state == "completed": + raise e.SlackRequestError(f"Cannot stop stream: stream state is {self._state}") + if kwargs.get("token"): + self._token = kwargs.pop("token") + if markdown_text: + self._buffer += markdown_text + if not self._stream_ts: + response = self._client.chat_startStream( + **self._stream_args, + token=self._token, + ) + if not response.get("ts"): + raise e.SlackRequestError("Failed to stop stream: stream not started") + self._stream_ts = str(response["ts"]) + self._state = "in_progress" + response = self._client.chat_stopStream( + token=self._token, + channel=self._stream_args["channel"], + ts=self._stream_ts, + blocks=blocks, + markdown_text=self._buffer, + metadata=metadata, + **kwargs, + ) + self._state = "completed" + return response + + def _flush_buffer(self, **kwargs) -> SlackResponse: + """Flush the internal buffer by making appropriate API calls.""" + if not self._stream_ts: + response = self._client.chat_startStream( + **self._stream_args, + token=self._token, + **kwargs, + markdown_text=self._buffer, + ) + self._stream_ts = response.get("ts") + self._state = "in_progress" + else: + response = self._client.chat_appendStream( + token=self._token, + channel=self._stream_args["channel"], + ts=self._stream_ts, + **kwargs, + markdown_text=self._buffer, + ) + self._buffer = "" + return response diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index f51514010..8410ffee2 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -8,6 +8,7 @@ import slack_sdk.errors as e from slack_sdk.models.views import View +from slack_sdk.web.chat_stream import ChatStream from ..models.attachments import Attachment from ..models.blocks import Block @@ -2065,13 +2066,17 @@ def assistant_threads_setStatus( channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs) def assistant_threads_setTitle( self, @@ -2081,7 +2086,7 @@ def assistant_threads_setTitle( title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) @@ -2096,7 +2101,7 @@ def assistant_threads_setSuggestedPrompts( prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -2610,6 +2615,27 @@ def channels_unarchive( # -------------------------- + def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> SlackResponse: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.appendStream", json=kwargs) + def chat_delete( self, *, @@ -2814,6 +2840,146 @@ def chat_scheduleMessage( # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) + def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return self.api_call("chat.scheduledMessages.list", params=kwargs) + + def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.startStream", json=kwargs) + + def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> SlackResponse: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.stopStream", json=kwargs) + + def chat_stream( + self, + *, + buffer_size: int = 256, + channel: str, + thread_ts: str, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> ChatStream: + """Stream markdown text into a conversation. + + This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, + the stream can be stopped with concluding arguments such as "blocks" for gathering feedback. + + The following methods are used: + + - chat.startStream: Starts a new streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.startStream). + - chat.appendStream: Appends text to an existing streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.appendStream). + - chat.stopStream: Stops a streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.stopStream). + + Args: + buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this + value decreases the number of method calls made for the same amount of text, which is useful to avoid rate + limits. Default: 256. + channel: An encoded ID that represents a channel, private group, or DM. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + ChatStream instance for managing the stream + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + return ChatStream( + self, + logger=self._logger, + channel=channel, + thread_ts=thread_ts, + recipient_team_id=recipient_team_id, + recipient_user_id=recipient_user_id, + buffer_size=buffer_size, + **kwargs, + ) + def chat_unfurl( self, *, @@ -2894,32 +3060,6 @@ def chat_update( # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) - def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> SlackResponse: - """Lists all scheduled messages. - https://docs.slack.dev/reference/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return self.api_call("chat.scheduledMessages.list", params=kwargs) - def conversations_acceptSharedInvite( self, *, diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index d6b7789d1..88c0fcf1a 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -2077,13 +2077,17 @@ def assistant_threads_setStatus( channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. + """Set the status for an AI assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs) def assistant_threads_setTitle( self, @@ -2093,7 +2097,7 @@ def assistant_threads_setTitle( title: str, **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. + """Set the title for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) @@ -2108,7 +2112,7 @@ def assistant_threads_setSuggestedPrompts( prompts: List[Dict[str, str]], **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. + """Set suggested prompts for the given assistant thread. https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) @@ -2622,6 +2626,27 @@ def channels_unarchive( # -------------------------- + def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.appendStream", json=kwargs) + def chat_delete( self, *, @@ -2826,6 +2851,83 @@ def chat_scheduleMessage( # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) + def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return self.api_call("chat.scheduledMessages.list", params=kwargs) + + def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.startStream", json=kwargs) + + def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.stopStream", json=kwargs) + def chat_unfurl( self, *, @@ -2906,32 +3008,6 @@ def chat_update( # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) - def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> Union[Future, SlackResponse]: - """Lists all scheduled messages. - https://docs.slack.dev/reference/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return self.api_call("chat.scheduledMessages.list", params=kwargs) - def conversations_acceptSharedInvite( self, *, diff --git a/tests/slack_sdk/models/test_blocks.py b/tests/slack_sdk/models/test_blocks.py index f8753cccc..adacf1427 100644 --- a/tests/slack_sdk/models/test_blocks.py +++ b/tests/slack_sdk/models/test_blocks.py @@ -4,33 +4,35 @@ from slack_sdk.errors import SlackObjectFormationError from slack_sdk.models.blocks import ( ActionsBlock, + Block, + ButtonElement, + CallBlock, + ContextActionsBlock, ContextBlock, DividerBlock, - ImageBlock, - SectionBlock, - InputBlock, FileBlock, - Block, - CallBlock, - ButtonElement, - StaticSelectElement, - OverflowMenuElement, + HeaderBlock, + ImageBlock, ImageElement, + InputBlock, LinkButtonElement, - PlainTextObject, - MarkdownTextObject, - HeaderBlock, MarkdownBlock, - VideoBlock, + MarkdownTextObject, Option, + OverflowMenuElement, + PlainTextObject, RichTextBlock, - RichTextSectionElement, + RichTextElementParts, RichTextListElement, - RichTextQuoteElement, RichTextPreformattedElement, - RichTextElementParts, + RichTextQuoteElement, + RichTextSectionElement, + SectionBlock, + StaticSelectElement, + VideoBlock, ) -from slack_sdk.models.blocks.basic_components import SlackFile +from slack_sdk.models.blocks.basic_components import FeedbackButtonObject, SlackFile +from slack_sdk.models.blocks.block_elements import FeedbackButtonsElement, IconButtonElement from . import STRING_3001_CHARS @@ -526,6 +528,54 @@ def test_element_parsing(self): self.assertDictEqual(original.to_dict(), parsed.to_dict()) +# ---------------------------------------------- +# ContextActionsBlock +# ---------------------------------------------- + + +class ContextActionsBlockTests(unittest.TestCase): + def test_document(self): + input = { + "type": "context_actions", + "block_id": "context-actions-1", + "elements": [ + { + "type": "feedback_buttons", + "action_id": "feedback-action", + "positive_button": {"text": {"type": "plain_text", "text": "+1"}, "value": "positive"}, + "negative_button": {"text": {"type": "plain_text", "text": "-1"}, "value": "negative"}, + }, + { + "type": "icon_button", + "action_id": "delete-action", + "icon": "trash", + "text": {"type": "plain_text", "text": "Delete"}, + "value": "delete", + }, + ], + } + self.assertDictEqual(input, ContextActionsBlock(**input).to_dict()) + self.assertDictEqual(input, Block.parse(input).to_dict()) + + def test_with_feedback_buttons(self): + feedback_buttons = FeedbackButtonsElement( + action_id="feedback-action", + positive_button=FeedbackButtonObject(text="Good", value="positive"), + negative_button=FeedbackButtonObject(text="Bad", value="negative"), + ) + block = ContextActionsBlock(elements=[feedback_buttons]) + self.assertEqual(len(block.elements), 1) + self.assertEqual(block.elements[0].type, "feedback_buttons") + + def test_with_icon_button(self): + icon_button = IconButtonElement( + action_id="icon-action", icon="star", text=PlainTextObject(text="Favorite"), value="favorite" + ) + block = ContextActionsBlock(elements=[icon_button]) + self.assertEqual(len(block.elements), 1) + self.assertEqual(block.elements[0].type, "icon_button") + + # ---------------------------------------------- # Context # ---------------------------------------------- diff --git a/tests/slack_sdk/models/test_elements.py b/tests/slack_sdk/models/test_elements.py index 9aa3aa474..2985228a2 100644 --- a/tests/slack_sdk/models/test_elements.py +++ b/tests/slack_sdk/models/test_elements.py @@ -4,44 +4,47 @@ from slack_sdk.models.blocks import ( BlockElement, ButtonElement, + ChannelMultiSelectElement, + ChannelSelectElement, + CheckboxesElement, + ConfirmObject, + ConversationMultiSelectElement, + ConversationSelectElement, DatePickerElement, - TimePickerElement, + ExternalDataMultiSelectElement, ExternalDataSelectElement, + FeedbackButtonsElement, + IconButtonElement, ImageElement, + InputInteractiveElement, + InteractiveElement, LinkButtonElement, - UserSelectElement, - StaticSelectElement, - CheckboxesElement, - StaticMultiSelectElement, - ExternalDataMultiSelectElement, - UserMultiSelectElement, - ConversationMultiSelectElement, - ChannelMultiSelectElement, + Option, OverflowMenuElement, PlainTextInputElement, - RadioButtonsElement, - ConversationSelectElement, - ChannelSelectElement, - ConfirmObject, - Option, - InputInteractiveElement, - InteractiveElement, PlainTextObject, + RadioButtonsElement, RichTextBlock, + StaticMultiSelectElement, + StaticSelectElement, + TimePickerElement, + UserMultiSelectElement, + UserSelectElement, ) from slack_sdk.models.blocks.basic_components import SlackFile from slack_sdk.models.blocks.block_elements import ( DateTimePickerElement, EmailInputElement, + FileInputElement, NumberInputElement, - UrlInputElement, - WorkflowButtonElement, + RichTextElementParts, RichTextInputElement, - FileInputElement, RichTextSectionElement, - RichTextElementParts, + UrlInputElement, + WorkflowButtonElement, ) -from . import STRING_3001_CHARS, STRING_301_CHARS + +from . import STRING_301_CHARS, STRING_3001_CHARS class BlockElementTests(unittest.TestCase): @@ -443,6 +446,67 @@ def test_focus_on_load(self): self.assertDictEqual(input, DateTimePickerElement(**input).to_dict()) +# ---------------------------------------------- +# FeedbackButtons +# ---------------------------------------------- + + +class FeedbackButtonsTests(unittest.TestCase): + def test_document(self): + input = { + "type": "feedback_buttons", + "action_id": "feedback-123", + "positive_button": { + "text": {"type": "plain_text", "text": "+1"}, + "accessibility_label": "Positive feedback", + "value": "positive", + }, + "negative_button": { + "text": {"type": "plain_text", "text": "-1"}, + "accessibility_label": "Negative feedback", + "value": "negative", + }, + } + self.assertDictEqual(input, FeedbackButtonsElement(**input).to_dict()) + + +# ---------------------------------------------- +# IconButton +# ---------------------------------------------- + + +class IconButtonTests(unittest.TestCase): + def test_document(self): + input = { + "type": "icon_button", + "action_id": "icon-123", + "icon": "trash", + "text": {"type": "plain_text", "text": "Delete"}, + "accessibility_label": "Delete item", + "value": "delete_item", + "visible_to_user_ids": ["U123456", "U789012"], + } + self.assertDictEqual(input, IconButtonElement(**input).to_dict()) + + def test_with_confirm(self): + input = { + "type": "icon_button", + "action_id": "icon-456", + "icon": "trash", + "text": {"type": "plain_text", "text": "Delete"}, + "value": "trash", + "confirm": { + "title": {"type": "plain_text", "text": "Are you sure?"}, + "text": {"type": "plain_text", "text": "This will send a warning."}, + "confirm": {"type": "plain_text", "text": "Yes"}, + "deny": {"type": "plain_text", "text": "No"}, + }, + } + icon_button = IconButtonElement(**input) + self.assertIsNotNone(icon_button.confirm) + self.assertDictEqual(input, icon_button.to_dict()) + + # ------------------------------------------------- # Image # ------------------------------------------------- diff --git a/tests/slack_sdk/models/test_objects.py b/tests/slack_sdk/models/test_objects.py index 383abee7c..30bcb7002 100644 --- a/tests/slack_sdk/models/test_objects.py +++ b/tests/slack_sdk/models/test_objects.py @@ -1,26 +1,14 @@ import copy import unittest -from typing import Optional, List, Union +from typing import List, Optional, Union from slack_sdk.errors import SlackObjectFormationError from slack_sdk.models import JsonObject, JsonValidator -from slack_sdk.models.blocks import ( - ConfirmObject, - MarkdownTextObject, - Option, - OptionGroup, - PlainTextObject, -) -from slack_sdk.models.blocks.basic_components import Workflow, WorkflowTrigger -from slack_sdk.models.messages import ( - ChannelLink, - DateLink, - EveryoneLink, - HereLink, - Link, - ObjectLink, -) -from . import STRING_301_CHARS, STRING_51_CHARS +from slack_sdk.models.blocks import ConfirmObject, MarkdownTextObject, Option, OptionGroup, PlainTextObject +from slack_sdk.models.blocks.basic_components import FeedbackButtonObject, Workflow, WorkflowTrigger +from slack_sdk.models.messages import ChannelLink, DateLink, EveryoneLink, HereLink, Link, ObjectLink + +from . import STRING_51_CHARS, STRING_301_CHARS class SimpleJsonObject(JsonObject): @@ -374,6 +362,58 @@ def test_deny_length(self): ConfirmObject(title="title", text="Are you sure?", deny=STRING_51_CHARS).to_dict() +class FeedbackButtonObjectTests(unittest.TestCase): + def test_basic_json(self): + feedback_button = FeedbackButtonObject(text="+1", value="positive") + expected = {"text": {"emoji": True, "text": "+1", "type": "plain_text"}, "value": "positive"} + self.assertDictEqual(expected, feedback_button.to_dict()) + + def test_with_accessibility_label(self): + feedback_button = FeedbackButtonObject(text="+1", value="positive", accessibility_label="Positive feedback button") + expected = { + "text": {"emoji": True, "text": "+1", "type": "plain_text"}, + "value": "positive", + "accessibility_label": "Positive feedback button", + } + self.assertDictEqual(expected, feedback_button.to_dict()) + + def test_with_plain_text_object(self): + text_obj = PlainTextObject(text="-1", emoji=False) + feedback_button = FeedbackButtonObject(text=text_obj, value="negative") + expected = { + "text": {"emoji": False, "text": "-1", "type": "plain_text"}, + "value": "negative", + } + self.assertDictEqual(expected, feedback_button.to_dict()) + + def test_text_length_validation(self): + with self.assertRaises(SlackObjectFormationError): + FeedbackButtonObject(text="a" * 76, value="test").to_dict() + + def test_value_length_validation(self): + with self.assertRaises(SlackObjectFormationError): + FeedbackButtonObject(text="+1", value="a" * 2001).to_dict() + + def test_parse_from_dict(self): + data = {"text": "+1", "value": "positive", "accessibility_label": "Positive feedback"} + parsed = FeedbackButtonObject.parse(data) + self.assertIsInstance(parsed, FeedbackButtonObject) + expected = { + "text": {"emoji": True, "text": "+1", "type": "plain_text"}, + "value": "positive", + "accessibility_label": "Positive feedback", + } + self.assertDictEqual(expected, parsed.to_dict()) + + def test_parse_from_existing_object(self): + original = FeedbackButtonObject(text="-1", value="negative") + parsed = FeedbackButtonObject.parse(original) + self.assertIs(original, parsed) + + def test_parse_none(self): + self.assertIsNone(FeedbackButtonObject.parse(None)) + + class OptionTests(unittest.TestCase): def setUp(self) -> None: self.common = Option(label="an option", value="option_1") diff --git a/tests/slack_sdk/web/test_chat_stream.py b/tests/slack_sdk/web/test_chat_stream.py new file mode 100644 index 000000000..75c13c8c2 --- /dev/null +++ b/tests/slack_sdk/web/test_chat_stream.py @@ -0,0 +1,188 @@ +import json +import unittest +from urllib.parse import parse_qs, urlparse + +from slack_sdk import WebClient +from slack_sdk.errors import SlackRequestError +from slack_sdk.models.blocks.basic_components import FeedbackButtonObject +from slack_sdk.models.blocks.block_elements import FeedbackButtonsElement, IconButtonElement +from slack_sdk.models.blocks.blocks import ContextActionsBlock +from tests.mock_web_api_server import cleanup_mock_web_api_server, setup_mock_web_api_server +from tests.slack_sdk.web.mock_web_api_handler import MockHandler + + +class ChatStreamMockHandler(MockHandler): + """Extended mock handler that captures request bodies for chat stream methods""" + + def _handle(self): + try: + # put_nowait is common between Queue & asyncio.Queue, it does not need to be awaited + self.server.queue.put_nowait(self.path) + + # Standard auth and validation from parent + if self.is_valid_token() and self.is_valid_user_agent(): + token = self.headers["authorization"].split(" ")[1] + parsed_path = urlparse(self.path) + len_header = self.headers.get("Content-Length") or 0 + content_len = int(len_header) + post_body = self.rfile.read(content_len) + request_body = None + if post_body: + try: + post_body = post_body.decode("utf-8") + if post_body.startswith("{"): + request_body = json.loads(post_body) + else: + request_body = {k: v[0] for k, v in parse_qs(post_body).items()} + except UnicodeDecodeError: + pass + else: + if parsed_path and parsed_path.query: + request_body = {k: v[0] for k, v in parse_qs(parsed_path.query).items()} + + # Store request body for chat stream endpoints + if self.path in ["/chat.startStream", "/chat.appendStream", "/chat.stopStream"] and request_body: + if not hasattr(self.server, "chat_stream_requests"): + self.server.chat_stream_requests = {} + self.server.chat_stream_requests[self.path] = { + "token": token, + **request_body, + } + + # Load response file + pattern = str(token).split("xoxb-", 1)[1] + with open(f"tests/slack_sdk_fixture/web_response_{pattern}.json") as file: + body = json.load(file) + + else: + body = self.invalid_auth + + if not body: + body = self.not_found + + self.send_response(200) + self.set_common_headers() + self.wfile.write(json.dumps(body).encode("utf-8")) + self.wfile.close() + + except Exception as e: + self.logger.error(str(e), exc_info=True) + raise + + +class TestChatStream(unittest.TestCase): + def setUp(self): + setup_mock_web_api_server(self, ChatStreamMockHandler) + self.client = WebClient( + token="xoxb-chat_stream_test", + base_url="http://localhost:8888", + ) + + def tearDown(self): + cleanup_mock_web_api_server(self) + + def test_streams_a_short_message(self): + streamer = self.client.chat_stream( + channel="C0123456789", + thread_ts="123.000", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="nice!") + streamer.stop() + + self.assertEqual(self.received_requests.get("/chat.startStream", 0), 1) + self.assertEqual(self.received_requests.get("/chat.appendStream", 0), 0) + self.assertEqual(self.received_requests.get("/chat.stopStream", 0), 1) + + if hasattr(self.thread.server, "chat_stream_requests"): + start_request = self.thread.server.chat_stream_requests.get("/chat.startStream", {}) + self.assertEqual(start_request.get("channel"), "C0123456789") + self.assertEqual(start_request.get("thread_ts"), "123.000") + self.assertEqual(start_request.get("recipient_team_id"), "T0123456789") + self.assertEqual(start_request.get("recipient_user_id"), "U0123456789") + + stop_request = self.thread.server.chat_stream_requests.get("/chat.stopStream", {}) + self.assertEqual(stop_request.get("channel"), "C0123456789") + self.assertEqual(stop_request.get("ts"), "123.123") + self.assertEqual(stop_request.get("markdown_text"), "nice!") + + def test_streams_a_long_message(self): + streamer = self.client.chat_stream( + buffer_size=5, + channel="C0123456789", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + thread_ts="123.000", + ) + streamer.append(markdown_text="**this messag") + streamer.append(markdown_text="e is", token="xoxb-chat_stream_test_token1") + streamer.append(markdown_text=" bold!") + streamer.append(markdown_text="*") + streamer.stop( + blocks=[ + ContextActionsBlock( + elements=[ + FeedbackButtonsElement( + positive_button=FeedbackButtonObject(text="good", value="+1"), + negative_button=FeedbackButtonObject(text="bad", value="-1"), + ), + IconButtonElement( + icon="trash", + text="delete", + ), + ], + ) + ], + markdown_text="*", + token="xoxb-chat_stream_test_token2", + ) + + self.assertEqual(self.received_requests.get("/chat.startStream", 0), 1) + self.assertEqual(self.received_requests.get("/chat.appendStream", 0), 1) + self.assertEqual(self.received_requests.get("/chat.stopStream", 0), 1) + + if hasattr(self.thread.server, "chat_stream_requests"): + start_request = self.thread.server.chat_stream_requests.get("/chat.startStream", {}) + self.assertEqual(start_request.get("channel"), "C0123456789") + self.assertEqual(start_request.get("thread_ts"), "123.000") + self.assertEqual(start_request.get("markdown_text"), "**this messag") + self.assertEqual(start_request.get("recipient_team_id"), "T0123456789") + self.assertEqual(start_request.get("recipient_user_id"), "U0123456789") + + append_request = self.thread.server.chat_stream_requests.get("/chat.appendStream", {}) + self.assertEqual(append_request.get("channel"), "C0123456789") + self.assertEqual(append_request.get("markdown_text"), "e is bold!") + self.assertEqual(append_request.get("token"), "xoxb-chat_stream_test_token1") + self.assertEqual(append_request.get("ts"), "123.123") + + stop_request = self.thread.server.chat_stream_requests.get("/chat.stopStream", {}) + self.assertEqual( + json.dumps(stop_request.get("blocks")), + '[{"elements": [{"negative_button": {"text": {"emoji": true, "text": "bad", "type": "plain_text"}, "value": "-1"}, "positive_button": {"text": {"emoji": true, "text": "good", "type": "plain_text"}, "value": "+1"}, "type": "feedback_buttons"}, {"icon": "trash", "text": {"emoji": true, "text": "delete", "type": "plain_text"}, "type": "icon_button"}], "type": "context_actions"}]', + ) + self.assertEqual(stop_request.get("channel"), "C0123456789") + self.assertEqual(stop_request.get("markdown_text"), "**") + self.assertEqual(stop_request.get("token"), "xoxb-chat_stream_test_token2") + self.assertEqual(stop_request.get("ts"), "123.123") + + def test_streams_errors_when_appending_to_an_unstarted_stream(self): + streamer = self.client.chat_stream( + channel="C0123456789", + thread_ts="123.000", + token="xoxb-chat_stream_test_missing_ts", + ) + with self.assertRaisesRegex(SlackRequestError, r"^Failed to stop stream: stream not started$"): + streamer.stop() + + def test_streams_errors_when_appending_to_a_completed_stream(self): + streamer = self.client.chat_stream( + channel="C0123456789", + thread_ts="123.000", + ) + streamer.append(markdown_text="nice!") + streamer.stop() + with self.assertRaisesRegex(SlackRequestError, r"^Cannot append to stream: stream state is completed$"): + streamer.append(markdown_text="more...") + with self.assertRaisesRegex(SlackRequestError, r"^Cannot stop stream: stream state is completed$"): + streamer.stop() diff --git a/tests/slack_sdk_async/web/test_async_chat_stream.py b/tests/slack_sdk_async/web/test_async_chat_stream.py new file mode 100644 index 000000000..212fee1e2 --- /dev/null +++ b/tests/slack_sdk_async/web/test_async_chat_stream.py @@ -0,0 +1,193 @@ +import json +import unittest +from urllib.parse import parse_qs, urlparse + +from slack_sdk.errors import SlackRequestError +from slack_sdk.models.blocks.basic_components import FeedbackButtonObject +from slack_sdk.models.blocks.block_elements import FeedbackButtonsElement, IconButtonElement +from slack_sdk.models.blocks.blocks import ContextActionsBlock +from slack_sdk.web.async_client import AsyncWebClient +from tests.mock_web_api_server import cleanup_mock_web_api_server, setup_mock_web_api_server +from tests.slack_sdk.web.mock_web_api_handler import MockHandler +from tests.slack_sdk_async.helpers import async_test + + +class ChatStreamMockHandler(MockHandler): + """Extended mock handler that captures request bodies for chat stream methods""" + + def _handle(self): + try: + # put_nowait is common between Queue & asyncio.Queue, it does not need to be awaited + self.server.queue.put_nowait(self.path) + + # Standard auth and validation from parent + if self.is_valid_token() and self.is_valid_user_agent(): + token = self.headers["authorization"].split(" ")[1] + parsed_path = urlparse(self.path) + len_header = self.headers.get("Content-Length") or 0 + content_len = int(len_header) + post_body = self.rfile.read(content_len) + request_body = None + if post_body: + try: + post_body = post_body.decode("utf-8") + if post_body.startswith("{"): + request_body = json.loads(post_body) + else: + request_body = {k: v[0] for k, v in parse_qs(post_body).items()} + except UnicodeDecodeError: + pass + else: + if parsed_path and parsed_path.query: + request_body = {k: v[0] for k, v in parse_qs(parsed_path.query).items()} + + # Store request body for chat stream endpoints + if self.path in ["/chat.startStream", "/chat.appendStream", "/chat.stopStream"] and request_body: + if not hasattr(self.server, "chat_stream_requests"): + self.server.chat_stream_requests = {} + self.server.chat_stream_requests[self.path] = { + "token": token, + **request_body, + } + + # Load response file + pattern = str(token).split("xoxb-", 1)[1] + with open(f"tests/slack_sdk_fixture/web_response_{pattern}.json") as file: + body = json.load(file) + + else: + body = self.invalid_auth + + if not body: + body = self.not_found + + self.send_response(200) + self.set_common_headers() + self.wfile.write(json.dumps(body).encode("utf-8")) + self.wfile.close() + + except Exception as e: + self.logger.error(str(e), exc_info=True) + raise + + +class TestAsyncChatStream(unittest.TestCase): + def setUp(self): + setup_mock_web_api_server(self, ChatStreamMockHandler) + self.client = AsyncWebClient( + token="xoxb-chat_stream_test", + base_url="http://localhost:8888", + ) + + def tearDown(self): + cleanup_mock_web_api_server(self) + + @async_test + async def test_streams_a_short_message(self): + streamer = await self.client.chat_stream( + channel="C0123456789", + thread_ts="123.000", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + await streamer.append(markdown_text="nice!") + await streamer.stop() + + self.assertEqual(self.received_requests.get("/chat.startStream", 0), 1) + self.assertEqual(self.received_requests.get("/chat.appendStream", 0), 0) + self.assertEqual(self.received_requests.get("/chat.stopStream", 0), 1) + + if hasattr(self.thread.server, "chat_stream_requests"): + start_request = self.thread.server.chat_stream_requests.get("/chat.startStream", {}) + self.assertEqual(start_request.get("channel"), "C0123456789") + self.assertEqual(start_request.get("thread_ts"), "123.000") + self.assertEqual(start_request.get("recipient_team_id"), "T0123456789") + self.assertEqual(start_request.get("recipient_user_id"), "U0123456789") + + stop_request = self.thread.server.chat_stream_requests.get("/chat.stopStream", {}) + self.assertEqual(stop_request.get("channel"), "C0123456789") + self.assertEqual(stop_request.get("ts"), "123.123") + self.assertEqual(stop_request.get("markdown_text"), "nice!") + + @async_test + async def test_streams_a_long_message(self): + streamer = await self.client.chat_stream( + buffer_size=5, + channel="C0123456789", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + thread_ts="123.000", + ) + await streamer.append(markdown_text="**this messag") + await streamer.append(markdown_text="e is", token="xoxb-chat_stream_test_token1") + await streamer.append(markdown_text=" bold!") + await streamer.append(markdown_text="*") + await streamer.stop( + blocks=[ + ContextActionsBlock( + elements=[ + FeedbackButtonsElement( + positive_button=FeedbackButtonObject(text="good", value="+1"), + negative_button=FeedbackButtonObject(text="bad", value="-1"), + ), + IconButtonElement( + icon="trash", + text="delete", + ), + ], + ) + ], + markdown_text="*", + token="xoxb-chat_stream_test_token2", + ) + + self.assertEqual(self.received_requests.get("/chat.startStream", 0), 1) + self.assertEqual(self.received_requests.get("/chat.appendStream", 0), 1) + self.assertEqual(self.received_requests.get("/chat.stopStream", 0), 1) + + if hasattr(self.thread.server, "chat_stream_requests"): + start_request = self.thread.server.chat_stream_requests.get("/chat.startStream", {}) + self.assertEqual(start_request.get("channel"), "C0123456789") + self.assertEqual(start_request.get("thread_ts"), "123.000") + self.assertEqual(start_request.get("markdown_text"), "**this messag") + self.assertEqual(start_request.get("recipient_team_id"), "T0123456789") + self.assertEqual(start_request.get("recipient_user_id"), "U0123456789") + + append_request = self.thread.server.chat_stream_requests.get("/chat.appendStream", {}) + self.assertEqual(append_request.get("channel"), "C0123456789") + self.assertEqual(append_request.get("markdown_text"), "e is bold!") + self.assertEqual(append_request.get("token"), "xoxb-chat_stream_test_token1") + self.assertEqual(append_request.get("ts"), "123.123") + + stop_request = self.thread.server.chat_stream_requests.get("/chat.stopStream", {}) + self.assertEqual( + json.dumps(stop_request.get("blocks")), + '[{"elements": [{"negative_button": {"text": {"emoji": true, "text": "bad", "type": "plain_text"}, "value": "-1"}, "positive_button": {"text": {"emoji": true, "text": "good", "type": "plain_text"}, "value": "+1"}, "type": "feedback_buttons"}, {"icon": "trash", "text": {"emoji": true, "text": "delete", "type": "plain_text"}, "type": "icon_button"}], "type": "context_actions"}]', + ) + self.assertEqual(stop_request.get("channel"), "C0123456789") + self.assertEqual(stop_request.get("markdown_text"), "**") + self.assertEqual(stop_request.get("token"), "xoxb-chat_stream_test_token2") + self.assertEqual(stop_request.get("ts"), "123.123") + + @async_test + async def test_streams_errors_when_appending_to_an_unstarted_stream(self): + streamer = await self.client.chat_stream( + channel="C0123456789", + thread_ts="123.000", + token="xoxb-chat_stream_test_missing_ts", + ) + with self.assertRaisesRegex(SlackRequestError, r"^Failed to stop stream: stream not started$"): + await streamer.stop() + + @async_test + async def test_streams_errors_when_appending_to_a_completed_stream(self): + streamer = await self.client.chat_stream( + channel="C0123456789", + thread_ts="123.000", + ) + await streamer.append(markdown_text="nice!") + await streamer.stop() + with self.assertRaisesRegex(SlackRequestError, r"^Cannot append to stream: stream state is completed$"): + await streamer.append(markdown_text="more...") + with self.assertRaisesRegex(SlackRequestError, r"^Cannot stop stream: stream state is completed$"): + await streamer.stop() diff --git a/tests/slack_sdk_async/web/test_web_client_coverage.py b/tests/slack_sdk_async/web/test_web_client_coverage.py index f6410315e..af6d92236 100644 --- a/tests/slack_sdk_async/web/test_web_client_coverage.py +++ b/tests/slack_sdk_async/web/test_web_client_coverage.py @@ -13,9 +13,9 @@ class TestWebClientCoverage(unittest.TestCase): - # 292 endpoints as of July 22, 2025 + # 295 endpoints as of September 17, 2025 # Can be fetched by running `var methodNames = [].slice.call(document.getElementsByClassName('apiReferenceFilterableList__listItemLink')).map(e => e.href.replace("https://api.slack.com/methods/", ""));console.log(methodNames.toString());console.log(methodNames.length);` on https://api.slack.com/methods - all_api_methods = "admin.analytics.getFile,admin.apps.activities.list,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.config.lookup,admin.apps.config.set,admin.apps.requests.cancel,admin.apps.requests.list,admin.apps.restricted.list,admin.audit.anomaly.allow.getItem,admin.audit.anomaly.allow.updateItem,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.bulkArchive,admin.conversations.bulkDelete,admin.conversations.bulkMove,admin.conversations.convertToPrivate,admin.conversations.convertToPublic,admin.conversations.create,admin.conversations.createForObjects,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.linkObjects,admin.conversations.lookup,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.unlinkObjects,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.functions.list,admin.functions.permissions.lookup,admin.functions.permissions.set,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.roles.addAssignments,admin.roles.listAssignments,admin.roles.removeAssignments,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.resetBulk,admin.users.session.setSettings,admin.users.unsupportedVersions.export,admin.workflows.collaborators.add,admin.workflows.collaborators.remove,admin.workflows.permissions.lookup,admin.workflows.search,admin.workflows.unpublish,admin.workflows.triggers.types.permissions.lookup,admin.workflows.triggers.types.permissions.set,api.test,apps.activities.list,apps.auth.external.delete,apps.auth.external.get,apps.connections.open,apps.uninstall,apps.datastore.bulkDelete,apps.datastore.bulkGet,apps.datastore.bulkPut,apps.datastore.count,apps.datastore.delete,apps.datastore.get,apps.datastore.put,apps.datastore.query,apps.datastore.update,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,assistant.search.context,assistant.threads.setStatus,assistant.threads.setSuggestedPrompts,assistant.threads.setTitle,auth.revoke,auth.test,auth.teams.list,bookmarks.add,bookmarks.edit,bookmarks.list,bookmarks.remove,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,canvases.access.delete,canvases.access.set,canvases.create,canvases.delete,canvases.edit,canvases.sections.lookup,channels.mark,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.unfurl,chat.update,chat.scheduledMessages.list,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,conversations.canvases.create,conversations.externalInvitePermissions.set,conversations.requestSharedInvite.approve,conversations.requestSharedInvite.deny,conversations.requestSharedInvite.list,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.completeUploadExternal,files.delete,files.getUploadURLExternal,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.comments.delete,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,functions.completeError,functions.completeSuccess,functions.distributions.permissions.add,functions.distributions.permissions.list,functions.distributions.permissions.remove,functions.distributions.permissions.set,functions.workflows.steps.list,functions.workflows.steps.responses.export,groups.mark,migration.exchange,oauth.access,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.billing.info,team.externalTeams.disconnect,team.externalTeams.list,team.preferences.list,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.discoverableContacts.lookup,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.featured.add,workflows.featured.list,workflows.featured.remove,workflows.featured.set,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,workflows.triggers.permissions.add,workflows.triggers.permissions.list,workflows.triggers.permissions.remove,workflows.triggers.permissions.set,im.list,im.mark,mpim.list,mpim.mark".split( + all_api_methods = "admin.analytics.getFile,admin.apps.activities.list,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.config.lookup,admin.apps.config.set,admin.apps.requests.cancel,admin.apps.requests.list,admin.apps.restricted.list,admin.audit.anomaly.allow.getItem,admin.audit.anomaly.allow.updateItem,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.bulkArchive,admin.conversations.bulkDelete,admin.conversations.bulkMove,admin.conversations.convertToPrivate,admin.conversations.convertToPublic,admin.conversations.create,admin.conversations.createForObjects,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.linkObjects,admin.conversations.lookup,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.unlinkObjects,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.functions.list,admin.functions.permissions.lookup,admin.functions.permissions.set,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.roles.addAssignments,admin.roles.listAssignments,admin.roles.removeAssignments,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.resetBulk,admin.users.session.setSettings,admin.users.unsupportedVersions.export,admin.workflows.collaborators.add,admin.workflows.collaborators.remove,admin.workflows.permissions.lookup,admin.workflows.search,admin.workflows.unpublish,admin.workflows.triggers.types.permissions.lookup,admin.workflows.triggers.types.permissions.set,api.test,apps.activities.list,apps.auth.external.delete,apps.auth.external.get,apps.connections.open,apps.uninstall,apps.datastore.bulkDelete,apps.datastore.bulkGet,apps.datastore.bulkPut,apps.datastore.count,apps.datastore.delete,apps.datastore.get,apps.datastore.put,apps.datastore.query,apps.datastore.update,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,assistant.search.context,assistant.threads.setStatus,assistant.threads.setSuggestedPrompts,assistant.threads.setTitle,auth.revoke,auth.test,auth.teams.list,bookmarks.add,bookmarks.edit,bookmarks.list,bookmarks.remove,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,canvases.access.delete,canvases.access.set,canvases.create,canvases.delete,canvases.edit,canvases.sections.lookup,channels.mark,chat.appendStream,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.scheduledMessages.list,chat.startStream,chat.stopStream,chat.unfurl,chat.update,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,conversations.canvases.create,conversations.externalInvitePermissions.set,conversations.requestSharedInvite.approve,conversations.requestSharedInvite.deny,conversations.requestSharedInvite.list,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.completeUploadExternal,files.delete,files.getUploadURLExternal,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.comments.delete,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,functions.completeError,functions.completeSuccess,functions.distributions.permissions.add,functions.distributions.permissions.list,functions.distributions.permissions.remove,functions.distributions.permissions.set,functions.workflows.steps.list,functions.workflows.steps.responses.export,groups.mark,migration.exchange,oauth.access,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.billing.info,team.externalTeams.disconnect,team.externalTeams.list,team.preferences.list,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.discoverableContacts.lookup,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.featured.add,workflows.featured.list,workflows.featured.remove,workflows.featured.set,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,workflows.triggers.permissions.add,workflows.triggers.permissions.list,workflows.triggers.permissions.remove,workflows.triggers.permissions.set,im.list,im.mark,mpim.list,mpim.mark".split( "," ) @@ -425,7 +425,19 @@ async def run_method(self, method_name, method, async_method): self.api_methods_to_call.remove( method(channel_id="D111", thread_ts="111.222", status="is typing...")["method"] ) + method( + channel_id="D111", + thread_ts="111.222", + status="is typing...", + loading_states=["Thinking...", "Writing..."], + ) await async_method(channel_id="D111", thread_ts="111.222", status="is typing...") + await async_method( + channel_id="D111", + thread_ts="111.222", + status="is typing...", + loading_states=["Thinking...", "Writing..."], + ) elif method_name == "assistant_threads_setTitle": self.api_methods_to_call.remove(method(channel_id="D111", thread_ts="111.222", title="New chat")["method"]) await async_method(channel_id="D111", thread_ts="111.222", title="New chat") @@ -540,6 +552,9 @@ async def run_method(self, method_name, method, async_method): elif method_name == "canvases_sections_lookup": self.api_methods_to_call.remove(method(canvas_id="F123", criteria={})["method"]) await async_method(canvas_id="F123", criteria={}) + elif method_name == "chat_appendStream": + self.api_methods_to_call.remove(method(channel="C123", ts="123.123", markdown_text="**bold**")["method"]) + await async_method(channel="C123", ts="123.123", markdown_text="**bold**") elif method_name == "chat_delete": self.api_methods_to_call.remove(method(channel="C123", ts="123.123")["method"]) await async_method(channel="C123", ts="123.123") @@ -561,6 +576,19 @@ async def run_method(self, method_name, method, async_method): elif method_name == "chat_scheduleMessage": self.api_methods_to_call.remove(method(channel="C123", post_at=123, text="Hi")["method"]) await async_method(channel="C123", post_at=123, text="Hi") + elif method_name == "chat_scheduledMessages_list": + self.api_methods_to_call.remove(method()["method"]) + await async_method() + elif method_name == "chat_startStream": + self.api_methods_to_call.remove(method(channel="C123", thread_ts="123.123")["method"]) + await async_method(channel="C123", thread_ts="123.123") + method(channel="C123", thread_ts="123.123", recipient_team_id="T123", recipient_user_id="U123") + await async_method(channel="C123", thread_ts="123.123", recipient_team_id="T123", recipient_user_id="U123") + elif method_name == "chat_stopStream": + self.api_methods_to_call.remove( + method(channel="C123", ts="123.123", blocks=[{"type": "markdown", "text": "**twelve**"}])["method"] + ) + await async_method(channel="C123", ts="123.123", blocks=[{"type": "markdown", "text": "**twelve**"}]) elif method_name == "chat_unfurl": self.api_methods_to_call.remove( method( diff --git a/tests/slack_sdk_fixture/web_response_chat_stream_test.json b/tests/slack_sdk_fixture/web_response_chat_stream_test.json new file mode 100644 index 000000000..2b5f29d01 --- /dev/null +++ b/tests/slack_sdk_fixture/web_response_chat_stream_test.json @@ -0,0 +1,4 @@ +{ + "ok": true, + "ts": "123.123" +} diff --git a/tests/slack_sdk_fixture/web_response_chat_stream_test_missing_ts.json b/tests/slack_sdk_fixture/web_response_chat_stream_test_missing_ts.json new file mode 100644 index 000000000..0287aedde --- /dev/null +++ b/tests/slack_sdk_fixture/web_response_chat_stream_test_missing_ts.json @@ -0,0 +1,3 @@ +{ + "ok": true +} diff --git a/tests/slack_sdk_fixture/web_response_chat_stream_test_token1.json b/tests/slack_sdk_fixture/web_response_chat_stream_test_token1.json new file mode 100644 index 000000000..0287aedde --- /dev/null +++ b/tests/slack_sdk_fixture/web_response_chat_stream_test_token1.json @@ -0,0 +1,3 @@ +{ + "ok": true +} diff --git a/tests/slack_sdk_fixture/web_response_chat_stream_test_token2.json b/tests/slack_sdk_fixture/web_response_chat_stream_test_token2.json new file mode 100644 index 000000000..0287aedde --- /dev/null +++ b/tests/slack_sdk_fixture/web_response_chat_stream_test_token2.json @@ -0,0 +1,3 @@ +{ + "ok": true +} From 9624808c0274ff05d0838c0c6d4ea80f635d8eb1 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Mon, 6 Oct 2025 16:05:51 -0700 Subject: [PATCH 35/72] version 3.37.0 (#1767) --- slack_sdk/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slack_sdk/version.py b/slack_sdk/version.py index a38bbbbbf..a23f01f83 100644 --- a/slack_sdk/version.py +++ b/slack_sdk/version.py @@ -1,3 +1,3 @@ """Check the latest version at https://pypi.org/project/slack-sdk/""" -__version__ = "3.36.0" +__version__ = "3.37.0" From 577d6b4a6eea1b4f25d5cb72ba7b4642777f2ba1 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Thu, 16 Oct 2025 10:05:21 -0700 Subject: [PATCH 36/72] fix: remove unused mypy ignore type comments (#1769) --- slack_sdk/socket_mode/websocket_client/__init__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/slack_sdk/socket_mode/websocket_client/__init__.py b/slack_sdk/socket_mode/websocket_client/__init__.py index e3e050196..ae7df4420 100644 --- a/slack_sdk/socket_mode/websocket_client/__init__.py +++ b/slack_sdk/socket_mode/websocket_client/__init__.py @@ -11,7 +11,7 @@ from logging import Logger from queue import Queue from threading import Lock -from typing import Union, Optional, List, Callable, Tuple +from typing import Callable, List, Optional, Tuple, Union import websocket from websocket import WebSocketApp, WebSocketException @@ -180,10 +180,10 @@ def on_close( self.current_session = websocket.WebSocketApp( self.wss_uri, - on_open=on_open, # type: ignore[arg-type] - on_message=on_message, # type: ignore[arg-type] - on_error=on_error, # type: ignore[arg-type] - on_close=on_close, # type: ignore[arg-type] + on_open=on_open, + on_message=on_message, + on_error=on_error, + on_close=on_close, ) self.auto_reconnect_enabled = self.default_auto_reconnect_enabled From 344e0c56b259bce47f127bf2e87e0d445e322f2d Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Thu, 16 Oct 2025 10:20:32 -0700 Subject: [PATCH 37/72] docs(oauth): use a variable homedir for file stores (#1760) --- docs/reference/oauth/installation_store/file/index.html | 2 +- docs/reference/oauth/installation_store/index.html | 2 +- docs/reference/oauth/state_store/file/index.html | 2 +- docs/reference/oauth/state_store/index.html | 2 +- scripts/generate_api_docs.sh | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/reference/oauth/installation_store/file/index.html b/docs/reference/oauth/installation_store/file/index.html index 7658ddd96..db77a087c 100644 --- a/docs/reference/oauth/installation_store/file/index.html +++ b/docs/reference/oauth/installation_store/file/index.html @@ -48,7 +48,7 @@

                        Classes

                        class FileInstallationStore -(*,
                        base_dir: str = '/Users/eden.zimbelman/.bolt-app-installation',
                        historical_data_enabled: bool = True,
                        client_id: str | None = None,
                        logger: logging.Logger = <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
                        +(*,
                        base_dir: str = '$HOME/.bolt-app-installation',
                        historical_data_enabled: bool = True,
                        client_id: str | None = None,
                        logger: logging.Logger = <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
                        diff --git a/docs/reference/oauth/installation_store/index.html b/docs/reference/oauth/installation_store/index.html index 5865522cf..4f90fb1c5 100644 --- a/docs/reference/oauth/installation_store/index.html +++ b/docs/reference/oauth/installation_store/index.html @@ -327,7 +327,7 @@

                        Methods

                        class FileInstallationStore -(*,
                        base_dir: str = '/Users/eden.zimbelman/.bolt-app-installation',
                        historical_data_enabled: bool = True,
                        client_id: str | None = None,
                        logger: logging.Logger = <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
                        +(*,
                        base_dir: str = '$HOME/.bolt-app-installation',
                        historical_data_enabled: bool = True,
                        client_id: str | None = None,
                        logger: logging.Logger = <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
                        diff --git a/docs/reference/oauth/state_store/file/index.html b/docs/reference/oauth/state_store/file/index.html index 33ac16d82..62e7be40e 100644 --- a/docs/reference/oauth/state_store/file/index.html +++ b/docs/reference/oauth/state_store/file/index.html @@ -48,7 +48,7 @@

                        Classes

                        class FileOAuthStateStore -(*,
                        expiration_seconds: int,
                        base_dir: str = '/Users/eden.zimbelman/.bolt-app-oauth-state',
                        client_id: str | None = None,
                        logger: logging.Logger = <Logger slack_sdk.oauth.state_store.file (WARNING)>)
                        +(*,
                        expiration_seconds: int,
                        base_dir: str = '$HOME/.bolt-app-oauth-state',
                        client_id: str | None = None,
                        logger: logging.Logger = <Logger slack_sdk.oauth.state_store.file (WARNING)>)
                        diff --git a/docs/reference/oauth/state_store/index.html b/docs/reference/oauth/state_store/index.html index 3f0c18327..38a016b32 100644 --- a/docs/reference/oauth/state_store/index.html +++ b/docs/reference/oauth/state_store/index.html @@ -77,7 +77,7 @@

                        Classes

                        class FileOAuthStateStore -(*,
                        expiration_seconds: int,
                        base_dir: str = '/Users/eden.zimbelman/.bolt-app-oauth-state',
                        client_id: str | None = None,
                        logger: logging.Logger = <Logger slack_sdk.oauth.state_store.file (WARNING)>)
                        +(*,
                        expiration_seconds: int,
                        base_dir: str = '$HOME/.bolt-app-oauth-state',
                        client_id: str | None = None,
                        logger: logging.Logger = <Logger slack_sdk.oauth.state_store.file (WARNING)>)
                        diff --git a/scripts/generate_api_docs.sh b/scripts/generate_api_docs.sh index 8f1281141..c2bb260ab 100755 --- a/scripts/generate_api_docs.sh +++ b/scripts/generate_api_docs.sh @@ -9,7 +9,7 @@ pip install -U -r requirements/optional.txt rm -rf docs/reference -pdoc slack_sdk --html -o docs/reference +HOME="\$HOME" pdoc slack_sdk --html -o docs/reference cp -R docs/reference/slack_sdk/* docs/reference/ rm -rf docs/reference/slack_sdk From e9e64d82997fa1d827b1838ac0c67e5aa15bd70e Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Mon, 20 Oct 2025 10:41:12 -0700 Subject: [PATCH 38/72] ci: send regression notifications if prior jobs do not succeed on schedule (#1768) --- .github/maintainers_guide.md | 6 +-- .github/workflows/mypy.yml | 28 ------------ .github/workflows/{ci-build.yml => tests.yml} | 45 ++++++++++++++++++- README.md | 4 +- 4 files changed, 48 insertions(+), 35 deletions(-) delete mode 100644 .github/workflows/mypy.yml rename .github/workflows/{ci-build.yml => tests.yml} (63%) diff --git a/.github/maintainers_guide.md b/.github/maintainers_guide.md index 57ad6b689..fe7251f57 100644 --- a/.github/maintainers_guide.md +++ b/.github/maintainers_guide.md @@ -19,7 +19,7 @@ You can hook `pyenv` into your shell automatically by running `pyenv init` and f Install necessary Python runtimes for development/testing. It is not necessary to install all the various Python versions we test in [continuous integration on -GitHub Actions](https://github.com/slackapi/python-slack-sdk/blob/main/.github/workflows/ci-build.yml), +GitHub Actions](https://github.com/slackapi/python-slack-sdk/blob/main/.github/workflows/tests.yml), but make sure you are running at least one version that we execute our tests in locally so that you can run the tests yourself. @@ -56,7 +56,7 @@ run `source env_3.9.6/bin/activate` again. The last step is to install this project's dependencies and run all unit tests; to do so, you can run ```bash -$ ./scripts/run_validation.sh +$ ./scripts/run_validation.sh ``` Also check out [how @@ -74,7 +74,7 @@ When you make changes to this SDK, please write unit tests verifying if the chan Run all the unit tests, code formatter, and code analyzer: ```bash -$ ./scripts/run_validation.sh +$ ./scripts/run_validation.sh ``` Run all the unit tests (no formatter nor code analyzer): diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml deleted file mode 100644 index fa5087fd1..000000000 --- a/.github/workflows/mypy.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: mypy validation - -on: - push: - branches: - - main - pull_request: - -jobs: - build: - runs-on: ubuntu-latest - timeout-minutes: 5 - strategy: - matrix: - python-version: ["3.13"] - permissions: - contents: read - steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - with: - persist-credentials: false - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: ${{ matrix.python-version }} - - name: Run mypy verification - run: | - ./scripts/run_mypy.sh diff --git a/.github/workflows/ci-build.yml b/.github/workflows/tests.yml similarity index 63% rename from .github/workflows/ci-build.yml rename to .github/workflows/tests.yml index 841cb37ed..eca347fff 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/tests.yml @@ -1,14 +1,38 @@ # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions -name: CI Build +name: Test on: push: branches: - main pull_request: + schedule: + - cron: "0 0 * * *" + workflow_dispatch: jobs: - build: + typecheck: + name: Typechecks + runs-on: ubuntu-latest + timeout-minutes: 5 + strategy: + matrix: + python-version: ["3.13"] + permissions: + contents: read + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: ${{ matrix.python-version }} + - name: Run mypy verification + run: | + ./scripts/run_mypy.sh + unittest: + name: Unit tests runs-on: ubuntu-22.04 timeout-minutes: 15 strategy: @@ -68,3 +92,20 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} # Run validation generates the coverage file files: ./coverage.xml + notifications: + name: Regression notifications + runs-on: ubuntu-latest + needs: + - typecheck + - unittest + if: ${{ !success() && github.ref == 'refs/heads/main' && github.event_name != 'workflow_dispatch' }} + steps: + - name: Send notifications of failing tests + uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1 + with: + errors: true + webhook: ${{ secrets.SLACK_REGRESSION_FAILURES_WEBHOOK_URL }} + webhook-type: webhook-trigger + payload: | + action_url: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" + repository: "${{ github.repository }}" diff --git a/README.md b/README.md index ec57ebfdc..3070399d9 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@

                        Python Slack SDK

                        - - CI Build + + Tests Codecov From e5a282525db1c04e57fe67bad9febaacbdf8ec66 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 28 Oct 2025 20:28:30 -0700 Subject: [PATCH 39/72] feat(models): add underline to rich text section block element (#1771) --- slack_sdk/models/blocks/block_elements.py | 3 +++ tests/slack_sdk/models/test_blocks.py | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/slack_sdk/models/blocks/block_elements.py b/slack_sdk/models/blocks/block_elements.py index b38cf21e0..d176cfb24 100644 --- a/slack_sdk/models/blocks/block_elements.py +++ b/slack_sdk/models/blocks/block_elements.py @@ -2032,11 +2032,13 @@ def __init__( italic: Optional[bool] = None, strike: Optional[bool] = None, code: Optional[bool] = None, + underline: Optional[bool] = None, ): self.bold = bold self.italic = italic self.strike = strike self.code = code + self.underline = underline def to_dict(self, *args) -> dict: result = { @@ -2044,6 +2046,7 @@ def to_dict(self, *args) -> dict: "italic": self.italic, "strike": self.strike, "code": self.code, + "underline": self.underline, } return {k: v for k, v in result.items() if v is not None} diff --git a/tests/slack_sdk/models/test_blocks.py b/tests/slack_sdk/models/test_blocks.py index adacf1427..a07ce11b8 100644 --- a/tests/slack_sdk/models/test_blocks.py +++ b/tests/slack_sdk/models/test_blocks.py @@ -1037,6 +1037,8 @@ def test_complex(self): {"type": "text", "text": "block", "style": {"code": True}}, {"type": "text", "text": " "}, {"type": "text", "text": "test", "style": {"italic": True}}, + {"type": "text", "text": " "}, + {"type": "text", "text": "links", "style": {"underline": True}}, {"type": "link", "url": "https://slack.com", "text": "Slack website!"}, ], }, @@ -1138,6 +1140,8 @@ def test_complex(self): _.Text(text="block", style=_.TextStyle(code=True)), _.Text(text=" "), _.Text(text="test", style=_.TextStyle(italic=True)), + _.Text(text=" "), + _.Text(text="links", style=_.TextStyle(underline=True)), _.Link(text="Slack website!", url="https://slack.com"), ] ), From b1b07150bbe30b00ea2b90c41bd0b83fa931390d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 10:22:06 -0500 Subject: [PATCH 40/72] chore(deps): bump actions/stale from 10.0.0 to 10.1.0 (#1776) Bumps [actions/stale](https://github.com/actions/stale) from 10.0.0 to 10.1.0. - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/stale/compare/3a9db7e6a41a89f618792c92c0e97cc736e1b13f...5f858e3efba33a5ca4407a664cc011ad407f2008) --- updated-dependencies: - dependency-name: actions/stale dependency-version: 10.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/triage-issues.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/triage-issues.yml b/.github/workflows/triage-issues.yml index 5cb75bf93..85ccb72aa 100644 --- a/.github/workflows/triage-issues.yml +++ b/.github/workflows/triage-issues.yml @@ -16,7 +16,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0 + - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0 with: days-before-issue-stale: 30 days-before-issue-close: 10 From 4791fb4beb022c815cad1a4f5ebaa2585d713550 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 14:00:27 -0500 Subject: [PATCH 41/72] chore(deps): bump black from 22.10.0 to 25.9.0 (#1775) * chore(deps): bump black from 22.10.0 to 25.9.0 Bumps [black](https://github.com/psf/black) from 22.10.0 to 25.9.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/22.10.0...25.9.0) --- updated-dependencies: - dependency-name: black dependency-version: 25.9.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * update black version for compatibility with python 3.7 --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: William Bergamin Co-authored-by: William Bergamin --- .github/dependabot.yml | 5 +++++ .../web/test_admin_conversations_restrictAccess.py | 5 ++++- integration_tests/web/test_calls.py | 7 ++++++- requirements/testing.txt | 2 +- slack_sdk/__init__.py | 1 + slack_sdk/aiohttp_version_checker.py | 1 + slack_sdk/audit_logs/__init__.py | 1 + slack_sdk/oauth/__init__.py | 1 + .../oauth/installation_store/installation_store.py | 1 + slack_sdk/oauth/state_store/__init__.py | 1 + slack_sdk/proxy_env_variable_loader.py | 1 + slack_sdk/rtm_v2/__init__.py | 1 + slack_sdk/scim/__init__.py | 1 + slack_sdk/scim/v1/async_client.py | 14 ++++++++------ slack_sdk/socket_mode/__init__.py | 1 + slack_sdk/web/__init__.py | 1 + slack_sdk/webhook/__init__.py | 1 + 17 files changed, 36 insertions(+), 9 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index dc523d227..960e36050 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -8,6 +8,11 @@ updates: schedule: interval: "monthly" open-pull-requests-limit: 5 + ignore: + - dependency-name: "black" + update-types: + - version-update:semver-patch + - version-update:semver-minor - package-ecosystem: "github-actions" directory: "/" schedule: diff --git a/integration_tests/web/test_admin_conversations_restrictAccess.py b/integration_tests/web/test_admin_conversations_restrictAccess.py index 54ee4e6c9..97915abe5 100644 --- a/integration_tests/web/test_admin_conversations_restrictAccess.py +++ b/integration_tests/web/test_admin_conversations_restrictAccess.py @@ -40,7 +40,10 @@ def setUp(self): if self.channel_id is None: millis = int(round(time.time() * 1000)) channel_name = f"private-test-channel-{millis}" - self.channel_id = client.conversations_create(name=channel_name, is_private=True,)[ + self.channel_id = client.conversations_create( + name=channel_name, + is_private=True, + )[ "channel" ]["id"] diff --git a/integration_tests/web/test_calls.py b/integration_tests/web/test_calls.py index 7f5979378..d285c03f0 100644 --- a/integration_tests/web/test_calls.py +++ b/integration_tests/web/test_calls.py @@ -24,7 +24,12 @@ def tearDown(self): def test_sync(self): client = self.sync_client - user_id = list(filter(lambda u: not u["deleted"] and "bot_id" not in u, client.users_list(limit=50)["members"],))[ + user_id = list( + filter( + lambda u: not u["deleted"] and "bot_id" not in u, + client.users_list(limit=50)["members"], + ) + )[ 0 ]["id"] diff --git a/requirements/testing.txt b/requirements/testing.txt index 3c9e941e5..3d702a91c 100644 --- a/requirements/testing.txt +++ b/requirements/testing.txt @@ -8,7 +8,7 @@ pytest-cov>=2,<8 flake8>=5.0.4,<8 # Don't change this version without running CI builds; # The latest version may not be available for older Python runtime -black==22.10.0; +black==23.3.0; click==8.0.4 # black is affected by https://github.com/pallets/click/issues/2225 psutil>=6.0.0,<8 # used only under slack_sdk/*_store diff --git a/slack_sdk/__init__.py b/slack_sdk/__init__.py index 3adab865a..b5204e3e3 100644 --- a/slack_sdk/__init__.py +++ b/slack_sdk/__init__.py @@ -37,6 +37,7 @@ * `slack_sdk.scim.v1.async_client` """ + import logging from logging import NullHandler diff --git a/slack_sdk/aiohttp_version_checker.py b/slack_sdk/aiohttp_version_checker.py index 9f4d70fc3..1eff14efa 100644 --- a/slack_sdk/aiohttp_version_checker.py +++ b/slack_sdk/aiohttp_version_checker.py @@ -1,4 +1,5 @@ """Internal module for checking aiohttp compatibility of async modules""" + import logging from typing import Callable diff --git a/slack_sdk/audit_logs/__init__.py b/slack_sdk/audit_logs/__init__.py index 26a3b30d6..f8a7a2a91 100644 --- a/slack_sdk/audit_logs/__init__.py +++ b/slack_sdk/audit_logs/__init__.py @@ -2,6 +2,7 @@ Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details. """ + from .v1.client import AuditLogsClient from .v1.response import AuditLogsResponse diff --git a/slack_sdk/oauth/__init__.py b/slack_sdk/oauth/__init__.py index 286b87aa1..a27b606b0 100644 --- a/slack_sdk/oauth/__init__.py +++ b/slack_sdk/oauth/__init__.py @@ -2,6 +2,7 @@ https://docs.slack.dev/tools/python-slack-sdk/oauth """ + from .authorize_url_generator import AuthorizeUrlGenerator from .authorize_url_generator import OpenIDConnectAuthorizeUrlGenerator from .installation_store import InstallationStore diff --git a/slack_sdk/oauth/installation_store/installation_store.py b/slack_sdk/oauth/installation_store/installation_store.py index f01503408..8143d2fb7 100644 --- a/slack_sdk/oauth/installation_store/installation_store.py +++ b/slack_sdk/oauth/installation_store/installation_store.py @@ -2,6 +2,7 @@ Refer to https://docs.slack.dev/tools/python-slack-sdk/oauth for details. """ + from logging import Logger from typing import Optional diff --git a/slack_sdk/oauth/state_store/__init__.py b/slack_sdk/oauth/state_store/__init__.py index 18eddaff6..15491fd1d 100644 --- a/slack_sdk/oauth/state_store/__init__.py +++ b/slack_sdk/oauth/state_store/__init__.py @@ -2,6 +2,7 @@ Refer to https://docs.slack.dev/tools/python-slack-sdk/oauth for details. """ + # from .amazon_s3_state_store import AmazonS3OAuthStateStore from .file import FileOAuthStateStore from .state_store import OAuthStateStore diff --git a/slack_sdk/proxy_env_variable_loader.py b/slack_sdk/proxy_env_variable_loader.py index 848436905..7df080b9b 100644 --- a/slack_sdk/proxy_env_variable_loader.py +++ b/slack_sdk/proxy_env_variable_loader.py @@ -1,4 +1,5 @@ """Internal module for loading proxy-related env variables""" + import logging import os from typing import Optional diff --git a/slack_sdk/rtm_v2/__init__.py b/slack_sdk/rtm_v2/__init__.py index 21f96e347..be059303d 100644 --- a/slack_sdk/rtm_v2/__init__.py +++ b/slack_sdk/rtm_v2/__init__.py @@ -1,4 +1,5 @@ """A Python module for interacting with Slack's RTM API.""" + import inspect import json import logging diff --git a/slack_sdk/scim/__init__.py b/slack_sdk/scim/__init__.py index 901782a1c..25ad76109 100644 --- a/slack_sdk/scim/__init__.py +++ b/slack_sdk/scim/__init__.py @@ -4,6 +4,7 @@ Refer to https://docs.slack.dev/tools/python-slack-sdk/scim for details. """ + from .v1.client import SCIMClient from .v1.response import SCIMResponse from .v1.response import SearchUsersResponse, ReadUserResponse diff --git a/slack_sdk/scim/v1/async_client.py b/slack_sdk/scim/v1/async_client.py index 87f836a74..ad92ac49f 100644 --- a/slack_sdk/scim/v1/async_client.py +++ b/slack_sdk/scim/v1/async_client.py @@ -149,9 +149,9 @@ async def patch_user(self, id: str, partial_user: Union[Dict[str, Any], User]) - await self.api_call( http_verb="PATCH", path=f"Users/{quote(id)}", - body_params=partial_user.to_dict() - if isinstance(partial_user, User) - else _to_dict_without_not_given(partial_user), + body_params=( + partial_user.to_dict() if isinstance(partial_user, User) else _to_dict_without_not_given(partial_user) + ), ) ) @@ -214,9 +214,11 @@ async def patch_group(self, id: str, partial_group: Union[Dict[str, Any], Group] await self.api_call( http_verb="PATCH", path=f"Groups/{quote(id)}", - body_params=partial_group.to_dict() - if isinstance(partial_group, Group) - else _to_dict_without_not_given(partial_group), + body_params=( + partial_group.to_dict() + if isinstance(partial_group, Group) + else _to_dict_without_not_given(partial_group) + ), ) ) diff --git a/slack_sdk/socket_mode/__init__.py b/slack_sdk/socket_mode/__init__.py index 6cdee82cb..b8e1883c1 100644 --- a/slack_sdk/socket_mode/__init__.py +++ b/slack_sdk/socket_mode/__init__.py @@ -4,6 +4,7 @@ https://docs.slack.dev/apis/events-api/using-socket-mode/ """ + from .builtin import SocketModeClient __all__ = [ diff --git a/slack_sdk/web/__init__.py b/slack_sdk/web/__init__.py index a3d5ef286..41f3b5a77 100644 --- a/slack_sdk/web/__init__.py +++ b/slack_sdk/web/__init__.py @@ -1,5 +1,6 @@ """The Slack Web API allows you to build applications that interact with Slack in more complex ways than the integrations we provide out of the box.""" + from .client import WebClient from .slack_response import SlackResponse diff --git a/slack_sdk/webhook/__init__.py b/slack_sdk/webhook/__init__.py index ea52f6bf1..09e2292ab 100644 --- a/slack_sdk/webhook/__init__.py +++ b/slack_sdk/webhook/__init__.py @@ -1,6 +1,7 @@ """You can use slack_sdk.webhook.WebhookClient for Incoming Webhooks and message responses using response_url in payloads. """ + # from .async_client import AsyncWebhookClient from .client import WebhookClient from .webhook_response import WebhookResponse From 04acf86c94c3f20df4e571faffac46f626925b92 Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Mon, 3 Nov 2025 16:06:04 -0500 Subject: [PATCH 42/72] fix: dependabot config to ignore black (#1778) --- .github/dependabot.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 960e36050..ac86badc1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,9 +10,6 @@ updates: open-pull-requests-limit: 5 ignore: - dependency-name: "black" - update-types: - - version-update:semver-patch - - version-update:semver-minor - package-ecosystem: "github-actions" directory: "/" schedule: From 618808f4e12ca7c9c63a73b31ec0e65d5eab09b0 Mon Sep 17 00:00:00 2001 From: Luke Russell <31357343+lukegalbraithrussell@users.noreply.github.com> Date: Mon, 3 Nov 2025 13:56:04 -0800 Subject: [PATCH 43/72] docs: corrects typo in reference url on landing page (#1779) --- docs/english/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/english/index.md b/docs/english/index.md index 7e5a47fb7..7fdbcd6e4 100644 --- a/docs/english/index.md +++ b/docs/english/index.md @@ -18,7 +18,7 @@ The Slack platform offers several APIs to build apps. Each Slack API delivers pa | Request Signature Verification | Verify incoming requests from the Slack API servers. | `slack_sdk.signature` | | UI Builders | Construct UI components using easy-to-use builders. | `slack_sdk.models` | -You can also view the [Python module documents](https://docs.slack.dev/python-slack-sdk/reference)! +You can also view the [Python module documents](https://docs.slack.dev/tools/python-slack-sdk/reference)! ## Getting help {#getting-help} From 902d5835e81e0fce9d0c3de6cd0bfe162416e564 Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Wed, 5 Nov 2025 11:46:02 -0500 Subject: [PATCH 44/72] chore: automate release process (#1781) --- .github/maintainers_guide.md | 182 +++++++++++------- .github/release.yml | 24 +++ .github/workflows/pypi-release.yml | 87 +++++++++ scripts/deploy_to_prod_pypi_org.sh | 12 -- ...est_pypi_org.sh => deploy_to_test_pypi.sh} | 0 5 files changed, 219 insertions(+), 86 deletions(-) create mode 100644 .github/release.yml create mode 100644 .github/workflows/pypi-release.yml delete mode 100755 scripts/deploy_to_prod_pypi_org.sh rename scripts/{deploy_to_test_pypi_org.sh => deploy_to_test_pypi.sh} (100%) diff --git a/.github/maintainers_guide.md b/.github/maintainers_guide.md index fe7251f57..9869cc622 100644 --- a/.github/maintainers_guide.md +++ b/.github/maintainers_guide.md @@ -10,9 +10,9 @@ this project. If you use this package within your own software as is but don't p We recommend using [pyenv](https://github.com/pyenv/pyenv) for Python runtime management. If you use macOS, follow the following steps: -```bash -$ brew update -$ brew install pyenv +```sh +brew update +brew install pyenv ``` You can hook `pyenv` into your shell automatically by running `pyenv init` and following the instructions. @@ -23,7 +23,7 @@ GitHub Actions](https://github.com/slackapi/python-slack-sdk/blob/main/.github/w but make sure you are running at least one version that we execute our tests in locally so that you can run the tests yourself. -```bash +```sh $ pyenv install -l | grep -v "-e[conda|stackless|pypy]" $ pyenv install 3.9.6 # select the latest patch version @@ -40,9 +40,9 @@ $ pyenv rehash Then, you can create a new [Virtual Environment](https://docs.python.org/3/tutorial/venv.html) specific to the Python version you just installed by running: -```bash -$ python -m venv env_3.9.6 -$ source env_3.9.6/bin/activate +```sh +python -m venv env_3.9.6 +source env_3.9.6/bin/activate ``` At this point you have a clean, Python-version-specific environment "activated" for @@ -55,8 +55,8 @@ run `source env_3.9.6/bin/activate` again. The last step is to install this project's dependencies and run all unit tests; to do so, you can run -```bash -$ ./scripts/run_validation.sh +```sh +./scripts/run_validation.sh ``` Also check out [how @@ -73,20 +73,20 @@ When you make changes to this SDK, please write unit tests verifying if the chan Run all the unit tests, code formatter, and code analyzer: -```bash -$ ./scripts/run_validation.sh +```sh +./scripts/run_validation.sh ``` Run all the unit tests (no formatter nor code analyzer): -```bash -$ ./scripts/run_unit_tests.sh +```sh +./scripts/run_unit_tests.sh ``` Run a specific unit test: -```bash -$ ./scripts/run_unit_tests.sh tests/web/test_web_client.py +```sh +./scripts/run_unit_tests.sh tests/web/test_web_client.py ``` You can rely on GitHub Actions builds for running the tests on a variety of Python runtimes. @@ -97,14 +97,14 @@ This project also has integration tests that verify the SDK works with the Slack Run all integration tests: -```bash -$ ./scripts/run_integration_tests.sh +```sh +./scripts/run_integration_tests.sh ``` Run a specific integration test: -```bash -$ ./scripts/run_integration_tests.sh integration_tests/web/test_async_web_client.py +```sh +./scripts/run_integration_tests.sh integration_tests/web/test_async_web_client.py ``` #### Develop Locally @@ -113,14 +113,14 @@ If you want to test the package locally you can. 1. Build the package locally - Run - ```bash + ```sh scripts/build_pypi_package.sh ``` - This will create a `.whl` file in the `./dist` folder 2. Use the built package - Example `/dist/slack_sdk-1.2.3-py2.py3-none-any.whl` was created - From anywhere on your machine you can install this package to a project with - ```bash + ```sh pip install /dist/slack_sdk-1.2.3-py2.py3-none-any.whl ``` - It is also possible to include `slack_sdk @ file:////dist/slack_sdk-1.2.3-py2.py3-none-any.whl` in a [requirements.txt](https://pip.pypa.io/en/stable/user_guide/#requirements-files) file @@ -131,75 +131,109 @@ See [`/docs/README`](https://github.com/slackapi/python-slack-sdk/blob/main/docs The API reference is generated from a script. You can generate and preview the **API _reference_ documents for `slack_sdk` package modules** by running: -```bash -$ ./scripts/generate_api_docs.sh +```sh +./scripts/generate_api_docs.sh ``` ### Releasing -1. Create the commit for the release: +#### test.pypi.org deployment - - Bump the version number in adherence to [Semantic Versioning](http://semver.org/) in `slack_sdk/version.py`. - - Build the reference docs with `./scripts/generate_api_docs.sh`. - - Create a branch for the release with `git checkout -b v2.5.0` - - Make a commit that includes the new version number: `git commit -a -m 'version 2.5.0'`. - - Open a PR and merge after receiving at least one approval from other maintainers. +[TestPyPI](https://test.pypi.org/) is a separate instance of the Python Package +Index that allows you to try distribution tools and processes without affecting +the real index. This is particularly useful when making changes related to the +package configuration itself, for example, modifications to the `pyproject.toml` file. -2. Distribute the release +You can deploy this project to TestPyPI using GitHub Actions. - - Use the latest stable Python runtime - - `python -m venv env` - - `./scripts/deploy_to_prod_pypi_org.sh` - - Create a new GitHub Release from the [Releases page](https://github.com/slackapi/python-slack-sdk/releases) by clicking the "Draft a new release" button. - - Enter the new version number updated from the commit (e.g. `v2.5.0`) into the "Choose a tag" input. - - Ensure the tag `Target` branch is `main` (e.g `Target:main`). - - Click the "Create a new tag: x.x.x on publish" button. This won't create your tag immediately. - - Name the release after the version number updated from the commit (e.g. `version 2.5.0`) - - Auto-generate the release notes by clicking the "Auto-generate release - notes" button. This will pull in changes that will be included in your - release. - - Edit the resulting notes to ensure they have decent messaging that are - understandable by non-contributors, but each commit should still have it's - own line. - - Ensure that this version adheres to [semantic versioning][semver]. See - [Versioning](#versioning-and-tags) for correct version format. Version tags - should match the following pattern: `v2.5.0`. +To deploy using GitHub Actions: - ```markdown - Refer to [v{version} milestone](https://github.com/slackapi/python-slack-sdk/milestone/{TODO}?closed=1) to know the complete list of the issues resolved by this release. +1. Push your changes to a branch or tag +2. Navigate to +3. Click on "Run workflow" +4. Select your branch or tag from the dropdown +5. Click "Run workflow" to build and deploy your branch to TestPyPI - **Updates** +Alternatively, you can deploy from your local machine with: - 1. [WebClient] #111 Make an awesome change - Thanks @SlackHQ - 2. [RTMClient] #222 Make an awesome change - Thanks @SlackAPI - - **All Changes** - - * All issues/pull requests: https://github.com/slackapi/python-slack-sdk/milestone/{milestone for the release} - * All changes: https://github.com/slackapi/python-slack-sdk/compare/{the previous release version tag}...{the release version tag} - ``` - - - Close the milestone relating to the Release - - Create the next patch version Milestone. To be used by the following release. - -3. (Slack Internal) Communicate the release internally - - - Include a link to the GitHub release - -4. Make announcements - - - #slack-api in dev4slack.slack.com - - #lang-python in community.slack.com - -5. (Slack Internal) Tweet by @SlackAPI +```sh +./scripts/deploy_to_test_pypi.sh +``` - - Not necessary for patch updates, might be needed for minor updates, definitely needed for major updates. Include a link to the GitHub release +#### Development Deployment + +Deploying a new version of this library to PyPI is triggered by publishing a GitHub Release. +Before creating a new release, ensure that everything on a stable branch has +landed, then [run the tests](#unit-tests). + +1. Create the commit for the release + 1. In `slack_sdk/version.py` bump the version number in adherence to [Semantic Versioning](http://semver.org/) and [Developmental Release](https://peps.python.org/pep-0440/#developmental-releases). + - Example: if the current version is `1.2.3`, a proper development bump would be `1.2.4.dev0` + - `.dev` will indicate to pip that this is a [Development Release](https://peps.python.org/pep-0440/#developmental-releases) + - Note that the `dev` version can be bumped in development releases: `1.2.4.dev0` -> `1.2.4.dev1` + 2. Build the docs with `./scripts/generate_api_docs.sh`. + 3. Commit with a message including the new version number. For example `1.2.4.dev0` & push the commit to a branch where the development release will live (create it if it does not exist) + 1. `git checkout -b future-release` + 2. `git commit -m 'chore(release): version 1.2.4.dev0'` + 3. `git push -u origin future-release` +2. Create a new GitHub Release + 1. Navigate to the [Releases page](https://github.com/slackapi/python-slack-sdk/releases). + 2. Click the "Draft a new release" button. + 3. Set the "Target" to the feature branch with the development changes. + 4. Click "Tag: Select tag" + 5. Input a new tag name manually. The tag name must match the version in `slack_sdk/version.py` prefixed with "v" (e.g., if version is `1.2.4.dev0`, enter `v1.2.4.dev0`) + 6. Click the "Create a new tag" button. This won't create your tag immediately. + 7. Click the "Generate release notes" button. + 8. The release name should match the tag name! + 9. Edit the resulting notes to ensure they have decent messaging that is understandable by non-contributors, but each commit should still have its own line. + 10. Set this release as a pre-release. + 11. Publish the release by clicking the "Publish release" button! +3. Navigate to the [release workflow run](https://github.com/slackapi/python-slack-sdk/actions/workflows/pypi-release.yml). You will need to approve the deployment! +4. After a few minutes, the corresponding version will be available on . +5. (Slack Internal) Communicate the release internally + +#### Production Deployment + +Deploying a new version of this library to PyPI is triggered by publishing a GitHub Release. +Before creating a new release, ensure that everything on the `main` branch since +the last tag is in a releasable state! At a minimum, [run the tests](#unit-tests). + +1. Create the commit for the release + 1. In `slack_sdk/version.py` bump the version number in adherence to [Semantic Versioning](http://semver.org/) and the [Versioning](#versioning-and-tags) section. + 2. Build the docs with `./scripts/generate_api_docs.sh`. + 3. Commit with a message including the new version number. For example `1.2.3` & push the commit to a branch and create a PR to sanity check. + 1. `git checkout -b 1.2.3-release` + 2. `git commit -m 'chore(release): version 1.2.3'` + 3. `git push -u origin 1.2.3-release` + 4. Add relevant labels to the PR and add the PR to a GitHub Milestone. + 5. Merge in release PR after getting an approval from at least one maintainer. +2. Create a new GitHub Release + 1. Navigate to the [Releases page](https://github.com/slackapi/python-slack-sdk/releases). + 2. Click the "Draft a new release" button. + 3. Set the "Target" to the `main` branch. + 4. Click "Tag: Select tag" + 5. Input a new tag name manually. The tag name must match the version in `slack_sdk/version.py` prefixed with "v" (e.g., if version is `1.2.3`, enter `v1.2.3`) + 6. Click the "Create a new tag" button. This won't create your tag immediately. + 7. Click the "Generate release notes" button. + 8. The release name should match the tag name! + 9. Edit the resulting notes to ensure they have decent messaging that is understandable by non-contributors, but each commit should still have its own line. + 10. Include a link to the current GitHub Milestone. + 11. Ensure the "latest release" checkbox is checked to mark this as the latest stable release. + 12. Publish the release by clicking the "Publish release" button! +3. Navigate to the [release workflow run](https://github.com/slackapi/python-slack-sdk/actions/workflows/pypi-release.yml). You will need to approve the deployment! +4. After a few minutes, the corresponding version will be available on . +5. Close the current GitHub Milestone and create one for the next patch version. +6. (Slack Internal) Communicate the release internally + - Include a link to the GitHub release +7. (Slack Internal) Tweet by @SlackAPI + - Not necessary for patch updates, might be needed for minor updates, + definitely needed for major updates. Include a link to the GitHub release ## Workflow ### Versioning and Tags -This project uses semantic versioning, expressed through the numbering scheme of +This project uses [Semantic Versioning](http://semver.org/), expressed through the numbering scheme of [PEP-0440](https://www.python.org/dev/peps/pep-0440/). ### Branches diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 000000000..b2574b7cc --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,24 @@ +# https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes#configuring-automatically-generated-release-notes +changelog: + categories: + - title: 🚀 Enhancements + labels: + - enhancement + - title: 🐛 Bug Fixes + labels: + - bug + - title: 📚 Documentation + labels: + - docs + - title: 🤖 Build + labels: + - build + - title: 🧪 Testing/Code Health + labels: + - code health + - title: 🔒 Security + labels: + - security + - title: 📦 Other changes + labels: + - "*" diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml new file mode 100644 index 000000000..21b472247 --- /dev/null +++ b/.github/workflows/pypi-release.yml @@ -0,0 +1,87 @@ +name: Upload A Release to pypi.org or test.pypi.org + +on: + release: + types: + - published + workflow_dispatch: + inputs: + dry_run: + description: "Dry run (build only, do not publish)" + required: false + type: boolean + +jobs: + release-build: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + ref: ${{ github.event.release.tag_name || github.ref }} + persist-credentials: false + + - name: Set up Python + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: "3.x" + + - name: Build release distributions + run: | + scripts/build_pypi_package.sh + + - name: Persist dist folder + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: release-dist + path: dist/ + + test-pypi-publish: + runs-on: ubuntu-latest + needs: + - release-build + # Run this job for workflow_dispatch events when dry_run input is not 'true' + # Note: The comparison is against a string value 'true' since GitHub Actions inputs are strings + if: github.event_name == 'workflow_dispatch' && github.event.inputs.dry_run != 'true' + environment: + name: testpypi + permissions: + id-token: write + + steps: + - name: Retrieve dist folder + uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 + with: + name: release-dist + path: dist/ + + - name: Publish release distributions to test.pypi.org + # Using OIDC for PyPI publishing (no API tokens needed) + # See: https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-pypi + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 + with: + repository-url: https://test.pypi.org/legacy/ + + pypi-publish: + runs-on: ubuntu-latest + needs: + - release-build + if: github.event_name == 'release' + environment: + name: pypi + permissions: + id-token: write + + steps: + - name: Retrieve dist folder + uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 + with: + name: release-dist + path: dist/ + + - name: Publish release distributions to pypi.org + # Using OIDC for PyPI publishing (no API tokens needed) + # See: https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-pypi + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 diff --git a/scripts/deploy_to_prod_pypi_org.sh b/scripts/deploy_to_prod_pypi_org.sh deleted file mode 100755 index b96cdef62..000000000 --- a/scripts/deploy_to_prod_pypi_org.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -script_dir=`dirname $0` -cd ${script_dir}/.. -rm -rf ./slack_sdk.egg-info - -pip install -U pip && \ - pip install -U twine build && \ - rm -rf dist/ build/ slack_sdk.egg-info/ && \ - python -m build --sdist --wheel && \ - twine check dist/* && \ - twine upload dist/* diff --git a/scripts/deploy_to_test_pypi_org.sh b/scripts/deploy_to_test_pypi.sh similarity index 100% rename from scripts/deploy_to_test_pypi_org.sh rename to scripts/deploy_to_test_pypi.sh From 47843def5a70f35232f54ec3b682456179bf9ab4 Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Mon, 10 Nov 2025 12:24:14 -0500 Subject: [PATCH 45/72] chore: add a formatter script for maintainers (#1785) --- .github/maintainers_guide.md | 12 ++++++++++-- requirements/testing.txt | 10 ++-------- requirements/tools.txt | 7 +++++++ scripts/format.sh | 10 ++++++++++ 4 files changed, 29 insertions(+), 10 deletions(-) create mode 100644 requirements/tools.txt create mode 100755 scripts/format.sh diff --git a/.github/maintainers_guide.md b/.github/maintainers_guide.md index 9869cc622..611c2e97f 100644 --- a/.github/maintainers_guide.md +++ b/.github/maintainers_guide.md @@ -65,19 +65,27 @@ our continuous integration](https://github.com/slackapi/python-slack-sdk/blob/v3 ## Tasks +### Formatting + +This project uses code formatting tools to maintain consistent style. You can format the codebase by running: + +```sh +./scripts/format.sh +``` + ### Testing #### Unit Tests When you make changes to this SDK, please write unit tests verifying if the changes work as you expected. You can easily run all the tests and formatting/linter with the below scripts. -Run all the unit tests, code formatter, and code analyzer: +Run all the unit tests, code linter, and code analyzer: ```sh ./scripts/run_validation.sh ``` -Run all the unit tests (no formatter nor code analyzer): +Run all the unit tests (no linter nor code analyzer): ```sh ./scripts/run_unit_tests.sh diff --git a/requirements/testing.txt b/requirements/testing.txt index 3d702a91c..9b702718c 100644 --- a/requirements/testing.txt +++ b/requirements/testing.txt @@ -3,19 +3,13 @@ aiohttp<4 # used for a WebSocket server mock pytest>=7.0.1,<9 pytest-asyncio<2 # for async pytest-cov>=2,<8 -# while flake8 5.x have issues with Python 3.12, flake8 6.x requires Python >= 3.8.1, -# so 5.x should be kept in order to stay compatible with Python 3.7/3.8 -flake8>=5.0.4,<8 -# Don't change this version without running CI builds; -# The latest version may not be available for older Python runtime -black==23.3.0; click==8.0.4 # black is affected by https://github.com/pallets/click/issues/2225 psutil>=6.0.0,<8 # used only under slack_sdk/*_store boto3<=2 # For AWS tests moto>=4.0.13,<6 -mypy<=1.18.2 # For AsyncSQLAlchemy tests greenlet<=4 -aiosqlite<=1 \ No newline at end of file +aiosqlite<=1 +-r tools.txt diff --git a/requirements/tools.txt b/requirements/tools.txt new file mode 100644 index 000000000..0a646dc12 --- /dev/null +++ b/requirements/tools.txt @@ -0,0 +1,7 @@ +mypy<=1.18.2 +# while flake8 5.x have issues with Python 3.12, flake8 6.x requires Python >= 3.8.1, +# so 5.x should be kept in order to stay compatible with Python 3.7/3.8 +flake8>=5.0.4,<8 +# Don't change this version without running CI builds; +# The latest version may not be available for older Python runtime +black==23.3.0; diff --git a/scripts/format.sh b/scripts/format.sh new file mode 100755 index 000000000..d4236258f --- /dev/null +++ b/scripts/format.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# ./scripts/format.sh + +script_dir=`dirname $0` +cd ${script_dir}/.. + +pip install -U pip +pip install -U -r requirements/tools.txt + +black slack/ slack_sdk/ tests/ integration_tests/ From c84c1af0ea0440af4805eb6ff44e5a8d9da7e960 Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Mon, 10 Nov 2025 14:57:06 -0500 Subject: [PATCH 46/72] feat: support python 3.14 (#1784) --- .github/workflows/tests.yml | 5 +++-- pyproject.toml | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index eca347fff..9fda873f3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,7 +17,7 @@ jobs: timeout-minutes: 5 strategy: matrix: - python-version: ["3.13"] + python-version: ["3.14"] permissions: contents: read steps: @@ -39,6 +39,7 @@ jobs: fail-fast: false matrix: python-version: + - "3.14" - "3.13" - "3.12" - "3.11" @@ -86,7 +87,7 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} verbose: true - name: Upload test coverage to Codecov (only with latest supported version) - if: startsWith(matrix.python-version, '3.13') + if: startsWith(matrix.python-version, '3.14') uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: token: ${{ secrets.CODECOV_TOKEN }} diff --git a/pyproject.toml b/pyproject.toml index 1a1c5761b..37c6f3546 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", ] From 0c218147e7c1d059c7aff4a6da6fbb994413d389 Mon Sep 17 00:00:00 2001 From: Gritty_dev <101377478+codomposer@users.noreply.github.com> Date: Tue, 11 Nov 2025 10:31:30 -0500 Subject: [PATCH 47/72] use filename for uploaded files (#1774) Co-authored-by: Ashley <12901850+hello-ashleyintech@users.noreply.github.com> --- README.md | 1 + slack_sdk/web/internal_utils.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3070399d9..568efbea2 100644 --- a/README.md +++ b/README.md @@ -302,3 +302,4 @@ helpful and collaborative way. [slack-community]: https://slackcommunity.com/ [files_upload_v2]: https://github.com/slackapi/python-slack-sdk/releases/tag/v3.19.0 [aiohttp]: https://aiohttp.readthedocs.io/ + diff --git a/slack_sdk/web/internal_utils.py b/slack_sdk/web/internal_utils.py index 3b5e01c62..fadda929f 100644 --- a/slack_sdk/web/internal_utils.py +++ b/slack_sdk/web/internal_utils.py @@ -345,11 +345,11 @@ def _to_v2_file_upload_item(upload_file: Dict[str, Any]) -> Dict[str, Optional[A if filename is None: # use the local filename if filename is missing if isinstance(file, (str, os.PathLike)): - filename = os.fspath(file).split(os.path.sep)[-1] + filename = os.path.basename(os.fspath(file)) else: filename = "Uploaded file" - title = upload_file.get("title", "Uploaded file") + title = upload_file.get("title") if data is None: raise SlackRequestError(f"File content not found for filename: {filename}, title: {title}") From 9e089031db3041e1f4c7611aa023923ae586d5fa Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 11 Nov 2025 08:59:43 -0800 Subject: [PATCH 48/72] ci: upload test results using the recommended codecov action (#1787) --- .github/workflows/tests.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 9fda873f3..92ed007c8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -80,19 +80,24 @@ jobs: PYTHONPATH=$PWD:$PYTHONPATH pytest tests/slack_sdk/oauth/state_store/test_sqlalchemy.py - name: Upload test results to Codecov if: ${{ !cancelled() }} - uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1 + uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: directory: ./reports/ + fail_ci_if_error: true flags: ${{ matrix.python-version }} + report_type: test_results token: ${{ secrets.CODECOV_TOKEN }} verbose: true - name: Upload test coverage to Codecov (only with latest supported version) if: startsWith(matrix.python-version, '3.14') uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: - token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: true # Run validation generates the coverage file files: ./coverage.xml + report_type: coverage + token: ${{ secrets.CODECOV_TOKEN }} + verbose: true notifications: name: Regression notifications runs-on: ubuntu-latest From 66b45239097983b8a0b5b82a02e694ba8f90a06e Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 11 Nov 2025 10:13:00 -0800 Subject: [PATCH 49/72] docs: link to context actions block and related reference (#1789) --- slack_sdk/models/blocks/basic_components.py | 1 + slack_sdk/models/blocks/block_elements.py | 2 ++ slack_sdk/models/blocks/blocks.py | 1 + 3 files changed, 4 insertions(+) diff --git a/slack_sdk/models/blocks/basic_components.py b/slack_sdk/models/blocks/basic_components.py index f118c5a7f..6f22c88e1 100644 --- a/slack_sdk/models/blocks/basic_components.py +++ b/slack_sdk/models/blocks/basic_components.py @@ -551,6 +551,7 @@ def __init__( ): """ A feedback button element object for either positive or negative feedback. + https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element#button-object-fields Args: text (required): An object containing some text. Maximum length for this field is 75 characters. diff --git a/slack_sdk/models/blocks/block_elements.py b/slack_sdk/models/blocks/block_elements.py index d176cfb24..89f0a7994 100644 --- a/slack_sdk/models/blocks/block_elements.py +++ b/slack_sdk/models/blocks/block_elements.py @@ -561,6 +561,7 @@ def __init__( **others: dict, ): """Buttons to indicate positive or negative feedback. + https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element Args: action_id (required): An identifier for this action. @@ -650,6 +651,7 @@ def __init__( **others: dict, ): """An icon button to perform actions. + https://docs.slack.dev/reference/block-kit/block-elements/icon-button-element Args: action_id: An identifier for this action. diff --git a/slack_sdk/models/blocks/blocks.py b/slack_sdk/models/blocks/blocks.py index 69200be25..9976de5b4 100644 --- a/slack_sdk/models/blocks/blocks.py +++ b/slack_sdk/models/blocks/blocks.py @@ -375,6 +375,7 @@ def __init__( **others: dict, ): """Displays actions as contextual info, which can include both feedback buttons and icon buttons. + https://docs.slack.dev/reference/block-kit/blocks/context-actions-block Args: elements (required): An array of feedback_buttons or icon_button block elements. Maximum number of items is 5. From ae366555d6d430befd11dd2f0bf76707879635aa Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Thu, 13 Nov 2025 10:49:31 -0500 Subject: [PATCH 50/72] chore(release): version 3.38.0 (#1790) --- .../models/blocks/basic_components.html | 4 ++- .../models/blocks/block_elements.html | 11 ++++++-- docs/reference/models/blocks/blocks.html | 4 ++- docs/reference/models/blocks/index.html | 19 ++++++++++--- docs/reference/scim/async_client.html | 28 +++++++++++-------- docs/reference/scim/v1/async_client.html | 28 +++++++++++-------- .../socket_mode/websocket_client/index.html | 16 +++++------ slack_sdk/version.py | 2 +- 8 files changed, 71 insertions(+), 41 deletions(-) diff --git a/docs/reference/models/blocks/basic_components.html b/docs/reference/models/blocks/basic_components.html index 8a48c9a6a..09ba7e190 100644 --- a/docs/reference/models/blocks/basic_components.html +++ b/docs/reference/models/blocks/basic_components.html @@ -378,6 +378,7 @@

                        Inherited members

                        ): """ A feedback button element object for either positive or negative feedback. + https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element#button-object-fields Args: text (required): An object containing some text. Maximum length for this field is 75 characters. @@ -410,7 +411,8 @@

                        Inherited members

                        return json

                        The base class for JSON serializable class objects

                        -

                        A feedback button element object for either positive or negative feedback.

                        +

                        A feedback button element object for either positive or negative feedback. +https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element#button-object-fields

                        Args

                        text : required
                        diff --git a/docs/reference/models/blocks/block_elements.html b/docs/reference/models/blocks/block_elements.html index ac23c73a1..375ee07ce 100644 --- a/docs/reference/models/blocks/block_elements.html +++ b/docs/reference/models/blocks/block_elements.html @@ -1868,6 +1868,7 @@

                        Inherited members

                        **others: dict, ): """Buttons to indicate positive or negative feedback. + https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element Args: action_id (required): An identifier for this action. @@ -1885,7 +1886,8 @@

                        Inherited members

                        Block Elements are things that exists inside of your Blocks. https://docs.slack.dev/reference/block-kit/block-elements/

                        -

                        Buttons to indicate positive or negative feedback.

                        +

                        Buttons to indicate positive or negative feedback. +https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element

                        Args

                        action_id : required
                        @@ -2074,6 +2076,7 @@

                        Inherited members

                        **others: dict, ): """An icon button to perform actions. + https://docs.slack.dev/reference/block-kit/block-elements/icon-button-element Args: action_id: An identifier for this action. @@ -2103,7 +2106,8 @@

                        Inherited members

                        Block Elements are things that exists inside of your Blocks. https://docs.slack.dev/reference/block-kit/block-elements/

                        -

                        An icon button to perform actions.

                        +

                        An icon button to perform actions. +https://docs.slack.dev/reference/block-kit/block-elements/icon-button-element

                        Args

                        action_id
                        @@ -3225,11 +3229,13 @@

                        Inherited members

                        italic: Optional[bool] = None, strike: Optional[bool] = None, code: Optional[bool] = None, + underline: Optional[bool] = None, ): self.bold = bold self.italic = italic self.strike = strike self.code = code + self.underline = underline def to_dict(self, *args) -> dict: result = { @@ -3237,6 +3243,7 @@

                        Inherited members

                        "italic": self.italic, "strike": self.strike, "code": self.code, + "underline": self.underline, } return {k: v for k, v in result.items() if v is not None} diff --git a/docs/reference/models/blocks/blocks.html b/docs/reference/models/blocks/blocks.html index e01a02436..f266b5cad 100644 --- a/docs/reference/models/blocks/blocks.html +++ b/docs/reference/models/blocks/blocks.html @@ -433,6 +433,7 @@

                        Inherited members

                        **others: dict, ): """Displays actions as contextual info, which can include both feedback buttons and icon buttons. + https://docs.slack.dev/reference/block-kit/blocks/context-actions-block Args: elements (required): An array of feedback_buttons or icon_button block elements. Maximum number of items is 5. @@ -457,7 +458,8 @@

                        Inherited members

                        Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. https://docs.slack.dev/reference/block-kit/blocks

                        -

                        Displays actions as contextual info, which can include both feedback buttons and icon buttons.

                        +

                        Displays actions as contextual info, which can include both feedback buttons and icon buttons. +https://docs.slack.dev/reference/block-kit/blocks/context-actions-block

                        Args

                        elements : required
                        diff --git a/docs/reference/models/blocks/index.html b/docs/reference/models/blocks/index.html index ad0c7b088..182ab927a 100644 --- a/docs/reference/models/blocks/index.html +++ b/docs/reference/models/blocks/index.html @@ -1369,6 +1369,7 @@

                        Inherited members

                        **others: dict, ): """Displays actions as contextual info, which can include both feedback buttons and icon buttons. + https://docs.slack.dev/reference/block-kit/blocks/context-actions-block Args: elements (required): An array of feedback_buttons or icon_button block elements. Maximum number of items is 5. @@ -1393,7 +1394,8 @@

                        Inherited members

                        Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. https://docs.slack.dev/reference/block-kit/blocks

                        -

                        Displays actions as contextual info, which can include both feedback buttons and icon buttons.

                        +

                        Displays actions as contextual info, which can include both feedback buttons and icon buttons. +https://docs.slack.dev/reference/block-kit/blocks/context-actions-block

                        Args

                        elements : required
                        @@ -2762,6 +2764,7 @@

                        Inherited members

                        ): """ A feedback button element object for either positive or negative feedback. + https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element#button-object-fields Args: text (required): An object containing some text. Maximum length for this field is 75 characters. @@ -2794,7 +2797,8 @@

                        Inherited members

                        return json

                        The base class for JSON serializable class objects

                        -

                        A feedback button element object for either positive or negative feedback.

                        +

                        A feedback button element object for either positive or negative feedback. +https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element#button-object-fields

                        Args

                        text : required
                        @@ -2901,6 +2905,7 @@

                        Inherited members

                        **others: dict, ): """Buttons to indicate positive or negative feedback. + https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element Args: action_id (required): An identifier for this action. @@ -2918,7 +2923,8 @@

                        Inherited members

                        Block Elements are things that exists inside of your Blocks. https://docs.slack.dev/reference/block-kit/block-elements/

                        -

                        Buttons to indicate positive or negative feedback.

                        +

                        Buttons to indicate positive or negative feedback. +https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element

                        Args

                        action_id : required
                        @@ -3196,6 +3202,7 @@

                        Inherited members

                        **others: dict, ): """An icon button to perform actions. + https://docs.slack.dev/reference/block-kit/block-elements/icon-button-element Args: action_id: An identifier for this action. @@ -3225,7 +3232,8 @@

                        Inherited members

                        Block Elements are things that exists inside of your Blocks. https://docs.slack.dev/reference/block-kit/block-elements/

                        -

                        An icon button to perform actions.

                        +

                        An icon button to perform actions. +https://docs.slack.dev/reference/block-kit/block-elements/icon-button-element

                        Args

                        action_id
                        @@ -5617,11 +5625,13 @@

                        Inherited members

                        italic: Optional[bool] = None, strike: Optional[bool] = None, code: Optional[bool] = None, + underline: Optional[bool] = None, ): self.bold = bold self.italic = italic self.strike = strike self.code = code + self.underline = underline def to_dict(self, *args) -> dict: result = { @@ -5629,6 +5639,7 @@

                        Inherited members

                        "italic": self.italic, "strike": self.strike, "code": self.code, + "underline": self.underline, } return {k: v for k, v in result.items() if v is not None} diff --git a/docs/reference/scim/async_client.html b/docs/reference/scim/async_client.html index 426ca9299..c91441c29 100644 --- a/docs/reference/scim/async_client.html +++ b/docs/reference/scim/async_client.html @@ -163,9 +163,9 @@

                        Classes

                        await self.api_call( http_verb="PATCH", path=f"Users/{quote(id)}", - body_params=partial_user.to_dict() - if isinstance(partial_user, User) - else _to_dict_without_not_given(partial_user), + body_params=( + partial_user.to_dict() if isinstance(partial_user, User) else _to_dict_without_not_given(partial_user) + ), ) ) @@ -228,9 +228,11 @@

                        Classes

                        await self.api_call( http_verb="PATCH", path=f"Groups/{quote(id)}", - body_params=partial_group.to_dict() - if isinstance(partial_group, Group) - else _to_dict_without_not_given(partial_group), + body_params=( + partial_group.to_dict() + if isinstance(partial_group, Group) + else _to_dict_without_not_given(partial_group) + ), ) ) @@ -620,9 +622,11 @@

                        Methods

                        await self.api_call( http_verb="PATCH", path=f"Groups/{quote(id)}", - body_params=partial_group.to_dict() - if isinstance(partial_group, Group) - else _to_dict_without_not_given(partial_group), + body_params=( + partial_group.to_dict() + if isinstance(partial_group, Group) + else _to_dict_without_not_given(partial_group) + ), ) ) @@ -641,9 +645,9 @@

                        Methods

                        await self.api_call( http_verb="PATCH", path=f"Users/{quote(id)}", - body_params=partial_user.to_dict() - if isinstance(partial_user, User) - else _to_dict_without_not_given(partial_user), + body_params=( + partial_user.to_dict() if isinstance(partial_user, User) else _to_dict_without_not_given(partial_user) + ), ) ) diff --git a/docs/reference/scim/v1/async_client.html b/docs/reference/scim/v1/async_client.html index 59fb723f3..6a971bb80 100644 --- a/docs/reference/scim/v1/async_client.html +++ b/docs/reference/scim/v1/async_client.html @@ -163,9 +163,9 @@

                        Classes

                        await self.api_call( http_verb="PATCH", path=f"Users/{quote(id)}", - body_params=partial_user.to_dict() - if isinstance(partial_user, User) - else _to_dict_without_not_given(partial_user), + body_params=( + partial_user.to_dict() if isinstance(partial_user, User) else _to_dict_without_not_given(partial_user) + ), ) ) @@ -228,9 +228,11 @@

                        Classes

                        await self.api_call( http_verb="PATCH", path=f"Groups/{quote(id)}", - body_params=partial_group.to_dict() - if isinstance(partial_group, Group) - else _to_dict_without_not_given(partial_group), + body_params=( + partial_group.to_dict() + if isinstance(partial_group, Group) + else _to_dict_without_not_given(partial_group) + ), ) ) @@ -620,9 +622,11 @@

                        Methods

                        await self.api_call( http_verb="PATCH", path=f"Groups/{quote(id)}", - body_params=partial_group.to_dict() - if isinstance(partial_group, Group) - else _to_dict_without_not_given(partial_group), + body_params=( + partial_group.to_dict() + if isinstance(partial_group, Group) + else _to_dict_without_not_given(partial_group) + ), ) )
                        @@ -641,9 +645,9 @@

                        Methods

                        await self.api_call( http_verb="PATCH", path=f"Users/{quote(id)}", - body_params=partial_user.to_dict() - if isinstance(partial_user, User) - else _to_dict_without_not_given(partial_user), + body_params=( + partial_user.to_dict() if isinstance(partial_user, User) else _to_dict_without_not_given(partial_user) + ), ) ) diff --git a/docs/reference/socket_mode/websocket_client/index.html b/docs/reference/socket_mode/websocket_client/index.html index fe43e29b1..b90aa9137 100644 --- a/docs/reference/socket_mode/websocket_client/index.html +++ b/docs/reference/socket_mode/websocket_client/index.html @@ -213,10 +213,10 @@

                        Classes

                        self.current_session = websocket.WebSocketApp( self.wss_uri, - on_open=on_open, # type: ignore[arg-type] - on_message=on_message, # type: ignore[arg-type] - on_error=on_error, # type: ignore[arg-type] - on_close=on_close, # type: ignore[arg-type] + on_open=on_open, + on_message=on_message, + on_error=on_error, + on_close=on_close, ) self.auto_reconnect_enabled = self.default_auto_reconnect_enabled @@ -441,10 +441,10 @@

                        Methods

                        self.current_session = websocket.WebSocketApp( self.wss_uri, - on_open=on_open, # type: ignore[arg-type] - on_message=on_message, # type: ignore[arg-type] - on_error=on_error, # type: ignore[arg-type] - on_close=on_close, # type: ignore[arg-type] + on_open=on_open, + on_message=on_message, + on_error=on_error, + on_close=on_close, ) self.auto_reconnect_enabled = self.default_auto_reconnect_enabled diff --git a/slack_sdk/version.py b/slack_sdk/version.py index a23f01f83..c787aa278 100644 --- a/slack_sdk/version.py +++ b/slack_sdk/version.py @@ -1,3 +1,3 @@ """Check the latest version at https://pypi.org/project/slack-sdk/""" -__version__ = "3.37.0" +__version__ = "3.38.0" From 21ac4f79e8e8ab6fb868682fc3814522ea37ab6a Mon Sep 17 00:00:00 2001 From: Michael Brooks Date: Thu, 13 Nov 2025 11:41:16 -0800 Subject: [PATCH 51/72] chore: Add .github/CODEOWNERS file (#1791) --- .github/CODEOWNERS | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..4a08579c2 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,12 @@ +# Salesforce Open Source project configuration +# Learn more: https://github.com/salesforce/oss-template +#ECCN:Open Source +#GUSINFO:Open Source,Open Source Workflow + +# @slackapi/slack-platform-python +# are code reviewers for all changes in this repo. +* @slackapi/slack-platform-python + +# @slackapi/developer-education +# are code reviewers for changes in the `/docs` directory. +/docs/ @slackapi/developer-education From 998ee043209ec90adaa29f12c16210f218bfbb61 Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Fri, 14 Nov 2025 09:48:24 -0500 Subject: [PATCH 52/72] fix: improve the release instructions (#1792) --- .github/maintainers_guide.md | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/.github/maintainers_guide.md b/.github/maintainers_guide.md index 611c2e97f..ccda1607f 100644 --- a/.github/maintainers_guide.md +++ b/.github/maintainers_guide.md @@ -175,15 +175,17 @@ Before creating a new release, ensure that everything on a stable branch has landed, then [run the tests](#unit-tests). 1. Create the commit for the release - 1. In `slack_sdk/version.py` bump the version number in adherence to [Semantic Versioning](http://semver.org/) and [Developmental Release](https://peps.python.org/pep-0440/#developmental-releases). + 1. Use the latest supported Python version. Using a [virtual environment](#python-and-friends) is recommended. + 2. In `slack_sdk/version.py` bump the version number in adherence to [Semantic Versioning](http://semver.org/) and [Developmental Release](https://peps.python.org/pep-0440/#developmental-releases). - Example: if the current version is `1.2.3`, a proper development bump would be `1.2.4.dev0` - `.dev` will indicate to pip that this is a [Development Release](https://peps.python.org/pep-0440/#developmental-releases) - Note that the `dev` version can be bumped in development releases: `1.2.4.dev0` -> `1.2.4.dev1` - 2. Build the docs with `./scripts/generate_api_docs.sh`. - 3. Commit with a message including the new version number. For example `1.2.4.dev0` & push the commit to a branch where the development release will live (create it if it does not exist) + 3. Build the docs with `./scripts/generate_api_docs.sh`. + 4. Commit with a message including the new version number. For example `1.2.4.dev0` & push the commit to a branch where the development release will live (create it if it does not exist) 1. `git checkout -b future-release` - 2. `git commit -m 'chore(release): version 1.2.4.dev0'` - 3. `git push -u origin future-release` + 2. `git add --all` (review files with `git status` before committing) + 3. `git commit -m 'chore(release): version 1.2.4.dev0'` + 4. `git push -u origin future-release` 2. Create a new GitHub Release 1. Navigate to the [Releases page](https://github.com/slackapi/python-slack-sdk/releases). 2. Click the "Draft a new release" button. @@ -207,14 +209,16 @@ Before creating a new release, ensure that everything on the `main` branch since the last tag is in a releasable state! At a minimum, [run the tests](#unit-tests). 1. Create the commit for the release - 1. In `slack_sdk/version.py` bump the version number in adherence to [Semantic Versioning](http://semver.org/) and the [Versioning](#versioning-and-tags) section. - 2. Build the docs with `./scripts/generate_api_docs.sh`. - 3. Commit with a message including the new version number. For example `1.2.3` & push the commit to a branch and create a PR to sanity check. + 1. Use the latest supported Python version. Using a [virtual environment](#python-and-friends) is recommended. + 2. In `slack_sdk/version.py` bump the version number in adherence to [Semantic Versioning](http://semver.org/) and the [Versioning](#versioning-and-tags) section. + 3. Build the docs with `./scripts/generate_api_docs.sh`. + 4. Commit with a message including the new version number. For example `1.2.3` & push the commit to a branch and create a PR to sanity check. 1. `git checkout -b 1.2.3-release` - 2. `git commit -m 'chore(release): version 1.2.3'` - 3. `git push -u origin 1.2.3-release` - 4. Add relevant labels to the PR and add the PR to a GitHub Milestone. - 5. Merge in release PR after getting an approval from at least one maintainer. + 2. `git add --all` (review files with `git status` before committing) + 3. `git commit -m 'chore(release): version 1.2.3'` + 4. `git push -u origin 1.2.3-release` + 5. Add relevant labels to the PR and add the PR to a GitHub Milestone. + 6. Merge in release PR after getting an approval from at least one maintainer. 2. Create a new GitHub Release 1. Navigate to the [Releases page](https://github.com/slackapi/python-slack-sdk/releases). 2. Click the "Draft a new release" button. From 4277ed87a0572cad92894b0b8b2b5104efe2d3f6 Mon Sep 17 00:00:00 2001 From: Elaine Vegeris Date: Mon, 17 Nov 2025 11:30:10 -0500 Subject: [PATCH 53/72] feat: Add work objects support (#1783) --- .../web/test_message_metadata.py | 119 +- slack_sdk/models/basic_objects.py | 9 +- slack_sdk/models/metadata/__init__.py | 1229 ++++++++++++++++- slack_sdk/web/async_client.py | 29 +- slack_sdk/web/client.py | 29 +- slack_sdk/web/internal_utils.py | 10 +- slack_sdk/web/legacy_client.py | 29 +- tests/slack_sdk/models/test_metadata.py | 307 ++++ 8 files changed, 1747 insertions(+), 14 deletions(-) create mode 100644 tests/slack_sdk/models/test_metadata.py diff --git a/integration_tests/web/test_message_metadata.py b/integration_tests/web/test_message_metadata.py index bb3a4de7b..dc2626d27 100644 --- a/integration_tests/web/test_message_metadata.py +++ b/integration_tests/web/test_message_metadata.py @@ -2,9 +2,32 @@ import os import time import unittest +import json from integration_tests.env_variable_names import SLACK_SDK_TEST_BOT_TOKEN -from slack_sdk.models.metadata import Metadata +from slack_sdk.models.metadata import ( + Metadata, + EventAndEntityMetadata, + EntityMetadata, + ExternalRef, + EntityPayload, + EntityAttributes, + EntityTitle, + TaskEntityFields, + EntityStringField, + EntityTitle, + EntityAttributes, + EntityFullSizePreview, + TaskEntityFields, + EntityTypedField, + EntityStringField, + EntityTimestampField, + EntityEditSupport, + EntityEditTextConfig, + EntityCustomField, + EntityUserIDField, + ExternalRef, +) from slack_sdk.web import WebClient @@ -125,3 +148,97 @@ def test_publishing_message_metadata_using_models(self): ) self.assertIsNone(scheduled.get("error")) self.assertIsNotNone(scheduled.get("message").get("metadata")) + + def test_publishing_entity_metadata(self): + client: WebClient = WebClient(token=self.bot_token) + new_message = client.chat_postMessage( + channel="C014KLZN9M0", + text="Message with entity metadata", + metadata={ + "entities": [ + { + "entity_type": "slack#/entities/task", + "url": "https://abc.com/123", + "external_ref": {"id": "123"}, + "entity_payload": { + "attributes": {"title": {"text": "My task"}, "product_name": "We reference only"}, + "fields": { + "due_date": {"value": "2026-06-06", "type": "slack#/types/date", "edit": {"enabled": True}}, + "created_by": {"type": "slack#/types/user", "user": {"user_id": "U014KLZE350"}}, + "date_created": {"value": 1760629278}, + }, + "custom_fields": [ + { + "label": "img", + "key": "img", + "type": "slack#/types/image", + "image_url": "https://s3-media2.fl.yelpcdn.com/bphoto/korel-1YjNtFtJlMTaC26A/o.jpg", + } + ], + }, + } + ] + }, + ) + + self.assertIsNone(new_message.get("error")) + self.assertIsNone(new_message.get("warning")) + + def test_publishing_entity_metadata_using_models(self): + # Build the metadata + + title = EntityTitle(text="My title") + full_size_preview = EntityFullSizePreview( + is_supported=True, + preview_url="https://s3-media3.fl.yelpcdn.com/bphoto/c7ed05m9lC2EmA3Aruue7A/o.jpg", + mime_type="image/jpeg", + ) + attributes = EntityAttributes(title=title, product_name="My Product", full_size_preview=full_size_preview) + description = EntityStringField( + value="Description of the task.", + long=True, + edit=EntityEditSupport(enabled=True, text=EntityEditTextConfig(min_length=5, max_length=100)), + ) + due_date = EntityTypedField(value="2026-06-06", type="slack#/types/date", edit=EntityEditSupport(enabled=True)) + created_by = EntityTypedField( + type="slack#/types/user", + user=EntityUserIDField(user_id="USLACKBOT"), + ) + date_created = EntityTimestampField(value=1762450663, type="slack#/types/timestamp") + date_updated = EntityTimestampField(value=1762450663, type="slack#/types/timestamp") + fields = TaskEntityFields( + description=description, + due_date=due_date, + created_by=created_by, + date_created=date_created, + date_updated=date_updated, + ) + custom_fields = [] + custom_fields.append( + EntityCustomField( + label="My Image", + key="my-image", + type="slack#/types/image", + image_url="https://s3-media3.fl.yelpcdn.com/bphoto/c7ed05m9lC2EmA3Aruue7A/o.jpg", + ) + ) + entity = EntityPayload(attributes=attributes, fields=fields, custom_fields=custom_fields) + + client: WebClient = WebClient(token=self.bot_token) + new_message = client.chat_postMessage( + channel="#random", + text="Message with entity metadata", + metadata=EventAndEntityMetadata( + entities=[ + EntityMetadata( + entity_type="slack#/entities/task", + external_ref=ExternalRef(id="abc123"), + url="https://myappdomain.com", + entity_payload=entity, + ) + ] + ), + ) + + self.assertIsNone(new_message.get("error")) + self.assertIsNone(new_message.get("warning")) diff --git a/slack_sdk/models/basic_objects.py b/slack_sdk/models/basic_objects.py index 339358790..4feefe3f6 100644 --- a/slack_sdk/models/basic_objects.py +++ b/slack_sdk/models/basic_objects.py @@ -40,6 +40,9 @@ def validate_json(self) -> None: if callable(method) and hasattr(method, "validator"): method() + def get_object_attribute(self, key: str): + return getattr(self, key, None) + def get_non_null_attributes(self) -> dict: """ Construct a dictionary out of non-null keys (from attributes property) @@ -57,7 +60,7 @@ def to_dict_compatible(value: Union[dict, list, object, tuple]) -> Union[dict, l return value def is_not_empty(self, key: str) -> bool: - value = getattr(self, key, None) + value = self.get_object_attribute(key) if value is None: return False @@ -75,7 +78,9 @@ def is_not_empty(self, key: str) -> bool: return value is not None return { - key: to_dict_compatible(getattr(self, key, None)) for key in sorted(self.attributes) if is_not_empty(self, key) + key: to_dict_compatible(value=self.get_object_attribute(key)) + for key in sorted(self.attributes) + if is_not_empty(self, key) } def to_dict(self, *args) -> dict: diff --git a/slack_sdk/models/metadata/__init__.py b/slack_sdk/models/metadata/__init__.py index ddf24f1ae..7e4918401 100644 --- a/slack_sdk/models/metadata/__init__.py +++ b/slack_sdk/models/metadata/__init__.py @@ -1,5 +1,5 @@ -from typing import Dict, Any -from slack_sdk.models.basic_objects import JsonObject +from typing import Dict, Any, Union, Optional, List +from slack_sdk.models.basic_objects import JsonObject, EnumValidator class Metadata(JsonObject): @@ -28,3 +28,1228 @@ def __str__(self): def __repr__(self): return self.__str__() + + +# +# Work object entity metadata +# https://docs.slack.dev/messaging/work-objects/ +# + + +"""Entity types""" +EntityType = { + "slack#/entities/task", + "slack#/entities/file", + "slack#/entities/item", + "slack#/entities/incident", + "slack#/entities/content_item", +} + + +"""Custom field types""" +CustomFieldType = { + "integer", + "string", + "array", + "boolean", + "slack#/types/date", + "slack#/types/timestamp", + "slack#/types/image", + "slack#/types/channel_id", + "slack#/types/user", + "slack#/types/entity_ref", + "slack#/types/link", + "slack#/types/email", +} + + +class ExternalRef(JsonObject): + """Reference (and optional type) used to identify an entity within the developer's system""" + + attributes = { + "id", + "type", + } + + def __init__( + self, + id: str, + type: Optional[str] = None, + **kwargs, + ): + self.id = id + self.type = type + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class FileEntitySlackFile(JsonObject): + """Slack file reference for file entities""" + + attributes = { + "id", + "type", + } + + def __init__( + self, + id: str, + type: Optional[str] = None, + **kwargs, + ): + self.id = id + self.type = type + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityIconSlackFile(JsonObject): + """Slack file reference for entity icon""" + + attributes = { + "id", + "url", + } + + def __init__( + self, + id: Optional[str] = None, + url: Optional[str] = None, + **kwargs, + ): + self.id = id + self.url = url + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityIconField(JsonObject): + """Icon field for entity attributes""" + + attributes = { + "alt_text", + "url", + "slack_file", + } + + def __init__( + self, + alt_text: str, + url: Optional[str] = None, + slack_file: Optional[Union[Dict[str, Any], EntityIconSlackFile]] = None, + **kwargs, + ): + self.alt_text = alt_text + self.url = url + self.slack_file = slack_file + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityEditSelectConfig(JsonObject): + """Select configuration for entity edit support""" + + attributes = { + "current_value", + "current_values", + "static_options", + "fetch_options_dynamically", + "min_query_length", + } + + def __init__( + self, + current_value: Optional[str] = None, + current_values: Optional[List[str]] = None, + static_options: Optional[List[Dict[str, Any]]] = None, # Option[] + fetch_options_dynamically: Optional[bool] = None, + min_query_length: Optional[int] = None, + **kwargs, + ): + self.current_value = current_value + self.current_values = current_values + self.static_options = static_options + self.fetch_options_dynamically = fetch_options_dynamically + self.min_query_length = min_query_length + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityEditNumberConfig(JsonObject): + """Number configuration for entity edit support""" + + attributes = { + "is_decimal_allowed", + "min_value", + "max_value", + } + + def __init__( + self, + is_decimal_allowed: Optional[bool] = None, + min_value: Optional[Union[int, float]] = None, + max_value: Optional[Union[int, float]] = None, + **kwargs, + ): + self.is_decimal_allowed = is_decimal_allowed + self.min_value = min_value + self.max_value = max_value + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityEditTextConfig(JsonObject): + """Text configuration for entity edit support""" + + attributes = { + "min_length", + "max_length", + } + + def __init__( + self, + min_length: Optional[int] = None, + max_length: Optional[int] = None, + **kwargs, + ): + self.min_length = min_length + self.max_length = max_length + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityEditSupport(JsonObject): + """Edit support configuration for entity fields""" + + attributes = { + "enabled", + "placeholder", + "hint", + "optional", + "select", + "number", + "text", + } + + def __init__( + self, + enabled: bool, + placeholder: Optional[Dict[str, Any]] = None, # PlainTextElement + hint: Optional[Dict[str, Any]] = None, # PlainTextElement + optional: Optional[bool] = None, + select: Optional[Union[Dict[str, Any], EntityEditSelectConfig]] = None, + number: Optional[Union[Dict[str, Any], EntityEditNumberConfig]] = None, + text: Optional[Union[Dict[str, Any], EntityEditTextConfig]] = None, + **kwargs, + ): + self.enabled = enabled + self.placeholder = placeholder + self.hint = hint + self.optional = optional + self.select = select + self.number = number + self.text = text + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityFullSizePreviewError(JsonObject): + """Error information for full-size preview""" + + attributes = { + "code", + "message", + } + + def __init__( + self, + code: str, + message: Optional[str] = None, + **kwargs, + ): + self.code = code + self.message = message + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityFullSizePreview(JsonObject): + """Full-size preview configuration for entity""" + + attributes = { + "is_supported", + "preview_url", + "mime_type", + "error", + } + + def __init__( + self, + is_supported: bool, + preview_url: Optional[str] = None, + mime_type: Optional[str] = None, + error: Optional[Union[Dict[str, Any], EntityFullSizePreviewError]] = None, + **kwargs, + ): + self.is_supported = is_supported + self.preview_url = preview_url + self.mime_type = mime_type + self.error = error + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityUserIDField(JsonObject): + """User ID field for entity""" + + attributes = { + "user_id", + } + + def __init__( + self, + user_id: str, + **kwargs, + ): + self.user_id = user_id + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityUserField(JsonObject): + """User field for entity""" + + attributes = { + "text", + "url", + "email", + "icon", + } + + def __init__( + self, + text: str, + url: Optional[str] = None, + email: Optional[str] = None, + icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + **kwargs, + ): + self.text = text + self.url = url + self.email = email + self.icon = icon + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityRefField(JsonObject): + """Entity reference field""" + + attributes = { + "entity_url", + "external_ref", + "title", + "display_type", + "icon", + } + + def __init__( + self, + entity_url: str, + external_ref: Union[Dict[str, Any], ExternalRef], + title: str, + display_type: Optional[str] = None, + icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + **kwargs, + ): + self.entity_url = entity_url + self.external_ref = external_ref + self.title = title + self.display_type = display_type + self.icon = icon + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityTypedField(JsonObject): + """Typed field for entity with various display options""" + + attributes = { + "type", + "label", + "value", + "link", + "icon", + "long", + "format", + "image_url", + "slack_file", + "alt_text", + "edit", + "tag_color", + "user", + "entity_ref", + } + + def __init__( + self, + type: str, + label: Optional[str] = None, + value: Optional[Union[str, int]] = None, + link: Optional[str] = None, + icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + long: Optional[bool] = None, + format: Optional[str] = None, + image_url: Optional[str] = None, + slack_file: Optional[Dict[str, Any]] = None, + alt_text: Optional[str] = None, + edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None, + tag_color: Optional[str] = None, + user: Optional[Union[Dict[str, Any], EntityUserIDField, EntityUserField]] = None, + entity_ref: Optional[Union[Dict[str, Any], EntityRefField]] = None, + **kwargs, + ): + self.type = type + self.label = label + self.value = value + self.link = link + self.icon = icon + self.long = long + self.format = format + self.image_url = image_url + self.slack_file = slack_file + self.alt_text = alt_text + self.edit = edit + self.tag_color = tag_color + self.user = user + self.entity_ref = entity_ref + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityStringField(JsonObject): + """String field for entity""" + + attributes = { + "value", + "label", + "format", + "link", + "icon", + "long", + "type", + "tag_color", + "edit", + } + + def __init__( + self, + value: str, + label: Optional[str] = None, + format: Optional[str] = None, + link: Optional[str] = None, + icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + long: Optional[bool] = None, + type: Optional[str] = None, + tag_color: Optional[str] = None, + edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None, + **kwargs, + ): + self.value = value + self.label = label + self.format = format + self.link = link + self.icon = icon + self.long = long + self.type = type + self.tag_color = tag_color + self.edit = edit + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityTimestampField(JsonObject): + """Timestamp field for entity""" + + attributes = { + "value", + "label", + "type", + "edit", + } + + def __init__( + self, + value: int, + label: Optional[str] = None, + type: Optional[str] = None, + edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None, + **kwargs, + ): + self.value = value + self.label = label + self.type = type + self.edit = edit + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityImageField(JsonObject): + """Image field for entity""" + + attributes = { + "alt_text", + "label", + "image_url", + "slack_file", + "title", + "type", + } + + def __init__( + self, + alt_text: str, + label: Optional[str] = None, + image_url: Optional[str] = None, + slack_file: Optional[Dict[str, Any]] = None, + title: Optional[str] = None, + type: Optional[str] = None, + **kwargs, + ): + self.alt_text = alt_text + self.label = label + self.image_url = image_url + self.slack_file = slack_file + self.title = title + self.type = type + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityBooleanCheckboxField(JsonObject): + """Boolean checkbox properties""" + + attributes = {"type", "text", "description"} + + def __init__( + self, + type: str, + text: str, + description: Optional[str], + **kwargs, + ): + self.type = type + self.text = text + self.description = description + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityBooleanTextField(JsonObject): + """Boolean text properties""" + + attributes = {"type", "true_text", "false_text", "true_description", "false_description"} + + def __init__( + self, + type: str, + true_text: str, + false_text: str, + true_description: Optional[str], + false_description: Optional[str], + **kwargs, + ): + self.type = type + self.true_text = (true_text,) + self.false_text = (false_text,) + self.true_description = (true_description,) + self.false_description = (false_description,) + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityArrayItemField(JsonObject): + """Array item field for entity (similar to EntityTypedField but with optional type)""" + + attributes = { + "type", + "label", + "value", + "link", + "icon", + "long", + "format", + "image_url", + "slack_file", + "alt_text", + "edit", + "tag_color", + "user", + "entity_ref", + } + + def __init__( + self, + type: Optional[str] = None, + label: Optional[str] = None, + value: Optional[Union[str, int]] = None, + link: Optional[str] = None, + icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + long: Optional[bool] = None, + format: Optional[str] = None, + image_url: Optional[str] = None, + slack_file: Optional[Dict[str, Any]] = None, + alt_text: Optional[str] = None, + edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None, + tag_color: Optional[str] = None, + user: Optional[Union[Dict[str, Any], EntityUserIDField, EntityUserField]] = None, + entity_ref: Optional[Union[Dict[str, Any], EntityRefField]] = None, + **kwargs, + ): + self.type = type + self.label = label + self.value = value + self.link = link + self.icon = icon + self.long = long + self.format = format + self.image_url = image_url + self.slack_file = slack_file + self.alt_text = alt_text + self.edit = edit + self.tag_color = tag_color + self.user = user + self.entity_ref = entity_ref + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityCustomField(JsonObject): + """Custom field for entity with flexible types""" + + attributes = { + "label", + "key", + "type", + "value", + "link", + "icon", + "long", + "format", + "image_url", + "slack_file", + "alt_text", + "tag_color", + "edit", + "item_type", + "user", + "entity_ref", + "boolean", + } + + def __init__( + self, + label: str, + key: str, + type: str, + value: Optional[Union[str, int, List[Union[Dict[str, Any], EntityArrayItemField]]]] = None, + link: Optional[str] = None, + icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + long: Optional[bool] = None, + format: Optional[str] = None, + image_url: Optional[str] = None, + slack_file: Optional[Dict[str, Any]] = None, + alt_text: Optional[str] = None, + tag_color: Optional[str] = None, + edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None, + item_type: Optional[str] = None, + user: Optional[Union[Dict[str, Any], EntityUserIDField, EntityUserField]] = None, + entity_ref: Optional[Union[Dict[str, Any], EntityRefField]] = None, + boolean: Optional[Union[Dict[str, Any], EntityBooleanCheckboxField, EntityBooleanTextField]] = None, + **kwargs, + ): + self.label = label + self.key = key + self.type = type + self.value = value + self.link = link + self.icon = icon + self.long = long + self.format = format + self.image_url = image_url + self.slack_file = slack_file + self.alt_text = alt_text + self.tag_color = tag_color + self.edit = edit + self.item_type = item_type + self.user = user + self.entity_ref = entity_ref + self.boolean = boolean + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + @EnumValidator("type", CustomFieldType) + def type_valid(self): + return self.type is None or self.type in CustomFieldType + + +class FileEntityFields(JsonObject): + """Fields specific to file entities""" + + attributes = { + "preview", + "created_by", + "date_created", + "date_updated", + "last_modified_by", + "file_size", + "mime_type", + "full_size_preview", + } + + def __init__( + self, + preview: Optional[Union[Dict[str, Any], EntityImageField]] = None, + created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + last_modified_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + file_size: Optional[Union[Dict[str, Any], EntityStringField]] = None, + mime_type: Optional[Union[Dict[str, Any], EntityStringField]] = None, + full_size_preview: Optional[Union[Dict[str, Any], EntityFullSizePreview]] = None, + **kwargs, + ): + self.preview = preview + self.created_by = created_by + self.date_created = date_created + self.date_updated = date_updated + self.last_modified_by = last_modified_by + self.file_size = file_size + self.mime_type = mime_type + self.full_size_preview = full_size_preview + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class TaskEntityFields(JsonObject): + """Fields specific to task entities""" + + attributes = { + "description", + "created_by", + "date_created", + "date_updated", + "assignee", + "status", + "due_date", + "priority", + } + + def __init__( + self, + description: Optional[Union[Dict[str, Any], EntityStringField]] = None, + created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + assignee: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + status: Optional[Union[Dict[str, Any], EntityStringField]] = None, + due_date: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + priority: Optional[Union[Dict[str, Any], EntityStringField]] = None, + **kwargs, + ): + self.description = description + self.created_by = created_by + self.date_created = date_created + self.date_updated = date_updated + self.assignee = assignee + self.status = status + self.due_date = due_date + self.priority = priority + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class IncidentEntityFields(JsonObject): + """Fields specific to incident entities""" + + attributes = { + "status", + "priority", + "urgency", + "created_by", + "assigned_to", + "date_created", + "date_updated", + "description", + "service", + } + + def __init__( + self, + status: Optional[Union[Dict[str, Any], EntityStringField]] = None, + priority: Optional[Union[Dict[str, Any], EntityStringField]] = None, + urgency: Optional[Union[Dict[str, Any], EntityStringField]] = None, + created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + assigned_to: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + description: Optional[Union[Dict[str, Any], EntityStringField]] = None, + service: Optional[Union[Dict[str, Any], EntityStringField]] = None, + **kwargs, + ): + self.status = status + self.priority = priority + self.urgency = urgency + self.created_by = created_by + self.assigned_to = assigned_to + self.date_created = date_created + self.date_updated = date_updated + self.description = description + self.service = service + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class ContentItemEntityFields(JsonObject): + """Fields specific to content item entities""" + + attributes = { + "preview", + "description", + "created_by", + "date_created", + "date_updated", + "last_modified_by", + } + + def __init__( + self, + preview: Optional[Union[Dict[str, Any], EntityImageField]] = None, + description: Optional[Union[Dict[str, Any], EntityStringField]] = None, + created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + last_modified_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + **kwargs, + ): + self.preview = preview + self.description = description + self.created_by = created_by + self.date_created = date_created + self.date_updated = date_updated + self.last_modified_by = last_modified_by + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityActionProcessingState(JsonObject): + """Processing state configuration for entity action button""" + + attributes = { + "enabled", + "interstitial_text", + } + + def __init__( + self, + enabled: bool, + interstitial_text: Optional[str] = None, + **kwargs, + ): + self.enabled = enabled + self.interstitial_text = interstitial_text + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityActionButton(JsonObject): + """Action button for entity""" + + attributes = { + "text", + "action_id", + "value", + "style", + "url", + "accessibility_label", + "processing_state", + } + + def __init__( + self, + text: str, + action_id: str, + value: Optional[str] = None, + style: Optional[str] = None, + url: Optional[str] = None, + accessibility_label: Optional[str] = None, + processing_state: Optional[Union[Dict[str, Any], EntityActionProcessingState]] = None, + **kwargs, + ): + self.text = text + self.action_id = action_id + self.value = value + self.style = style + self.url = url + self.accessibility_label = accessibility_label + self.processing_state = processing_state + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityTitle(JsonObject): + """Title for entity attributes""" + + attributes = { + "text", + "edit", + } + + def __init__( + self, + text: str, + edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None, + **kwargs, + ): + self.text = text + self.edit = edit + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityAttributes(JsonObject): + """Attributes for an entity""" + + attributes = { + "title", + "display_type", + "display_id", + "product_icon", + "product_name", + "locale", + "full_size_preview", + "metadata_last_modified", + } + + def __init__( + self, + title: Union[Dict[str, Any], EntityTitle], + display_type: Optional[str] = None, + display_id: Optional[str] = None, + product_icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + product_name: Optional[str] = None, + locale: Optional[str] = None, + full_size_preview: Optional[Union[Dict[str, Any], EntityFullSizePreview]] = None, + metadata_last_modified: Optional[int] = None, + **kwargs, + ): + self.title = title + self.display_type = display_type + self.display_id = display_id + self.product_icon = product_icon + self.product_name = product_name + self.locale = locale + self.full_size_preview = full_size_preview + self.metadata_last_modified = metadata_last_modified + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityActions(JsonObject): + """Actions configuration for entity""" + + attributes = { + "primary_actions", + "overflow_actions", + } + + def __init__( + self, + primary_actions: Optional[List[Union[Dict[str, Any], EntityActionButton]]] = None, + overflow_actions: Optional[List[Union[Dict[str, Any], EntityActionButton]]] = None, + **kwargs, + ): + self.primary_actions = primary_actions + self.overflow_actions = overflow_actions + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityPayload(JsonObject): + """Payload schema for an entity""" + + attributes = { + "attributes", + "fields", + "custom_fields", + "slack_file", + "display_order", + "actions", + } + + def __init__( + self, + attributes: Union[Dict[str, Any], EntityAttributes], + fields: Optional[ + Union[Dict[str, Any], ContentItemEntityFields, FileEntityFields, IncidentEntityFields, TaskEntityFields] + ] = None, + custom_fields: Optional[List[Union[Dict[str, Any], EntityCustomField]]] = None, + slack_file: Optional[Union[Dict[str, Any], FileEntitySlackFile]] = None, + display_order: Optional[List[str]] = None, + actions: Optional[Union[Dict[str, Any], EntityActions]] = None, + **kwargs, + ): + # Store entity attributes data with a different internal name to avoid + # shadowing the class-level 'attributes' set used for JSON serialization + self._entity_attributes = attributes + self.fields = fields + self.custom_fields = custom_fields + self.slack_file = slack_file + self.display_order = display_order + self.actions = actions + self.additional_attributes = kwargs + + @property + def entity_attributes(self) -> Union[Dict[str, Any], EntityAttributes]: + """Get the entity attributes data. + + Note: Use this property to access the attributes data. The class-level + 'attributes' is reserved for the JSON serialization schema. + """ + return self._entity_attributes + + @entity_attributes.setter + def entity_attributes(self, value: Union[Dict[str, Any], EntityAttributes]): + """Set the entity attributes data.""" + self._entity_attributes = value + + def get_object_attribute(self, key: str): + if key == "attributes": + return self._entity_attributes + else: + return getattr(self, key, None) + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityMetadata(JsonObject): + """Work object entity metadata + + https://docs.slack.dev/messaging/work-objects/ + """ + + attributes = { + "entity_type", + "entity_payload", + "external_ref", + "url", + "app_unfurl_url", + } + + def __init__( + self, + entity_type: str, + entity_payload: Union[Dict[str, Any], EntityPayload], + external_ref: Union[Dict[str, Any], ExternalRef], + url: str, + app_unfurl_url: Optional[str] = None, + **kwargs, + ): + self.entity_type = entity_type + self.entity_payload = entity_payload + self.external_ref = external_ref + self.url = url + self.app_unfurl_url = app_unfurl_url + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + @EnumValidator("entity_type", EntityType) + def entity_type_valid(self): + return self.entity_type is None or self.entity_type in EntityType + + +class EventAndEntityMetadata(JsonObject): + """Message metadata with entities + + https://docs.slack.dev/messaging/message-metadata/ + https://docs.slack.dev/messaging/work-objects/ + """ + + attributes = {"event_type", "event_payload", "entities"} + + def __init__( + self, + event_type: Optional[str] = None, + event_payload: Optional[Dict[str, Any]] = None, + entities: Optional[List[Union[Dict[str, Any], EntityMetadata]]] = None, + **kwargs, + ): + self.event_type = event_type + self.event_payload = event_payload + self.entities = entities + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index 7b82a0923..050e93294 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -22,7 +22,7 @@ from ..models.attachments import Attachment from ..models.blocks import Block -from ..models.metadata import Metadata +from ..models.metadata import Metadata, EventAndEntityMetadata from .async_base_client import AsyncBaseClient, AsyncSlackResponse from .internal_utils import ( _parse_web_class_objects, @@ -2769,7 +2769,7 @@ async def chat_postMessage( link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: @@ -2998,6 +2998,7 @@ async def chat_unfurl( source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -3014,6 +3015,7 @@ async def chat_unfurl( "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -3645,6 +3647,29 @@ async def emoji_list( kwargs.update({"include_categories": include_categories}) return await self.api_call("emoji.list", http_verb="GET", params=kwargs) + async def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[dict] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, str]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + return await self.api_call("entity.presentDetails", json=kwargs) + async def files_comments_delete( self, *, diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index 8410ffee2..830f481d0 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -12,7 +12,7 @@ from ..models.attachments import Attachment from ..models.blocks import Block -from ..models.metadata import Metadata +from ..models.metadata import Metadata, EventAndEntityMetadata from .base_client import BaseClient, SlackResponse from .internal_utils import ( _parse_web_class_objects, @@ -2759,7 +2759,7 @@ def chat_postMessage( link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: @@ -2988,6 +2988,7 @@ def chat_unfurl( source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -3004,6 +3005,7 @@ def chat_unfurl( "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -3635,6 +3637,29 @@ def emoji_list( kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) + def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[dict] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, str]] = None, + **kwargs, + ) -> SlackResponse: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + return self.api_call("entity.presentDetails", json=kwargs) + def files_comments_delete( self, *, diff --git a/slack_sdk/web/internal_utils.py b/slack_sdk/web/internal_utils.py index fadda929f..57afc6be4 100644 --- a/slack_sdk/web/internal_utils.py +++ b/slack_sdk/web/internal_utils.py @@ -17,7 +17,7 @@ from slack_sdk.errors import SlackRequestError from slack_sdk.models.attachments import Attachment from slack_sdk.models.blocks import Block -from slack_sdk.models.metadata import Metadata +from slack_sdk.models.metadata import Metadata, EventAndEntityMetadata, EntityMetadata def convert_bool_to_0_or_1(params: Optional[Dict[str, Any]]) -> Optional[Dict[str, Any]]: @@ -187,13 +187,17 @@ def _build_req_args( def _parse_web_class_objects(kwargs) -> None: - def to_dict(obj: Union[Dict, Block, Attachment, Metadata]): + def to_dict(obj: Union[Dict, Block, Attachment, Metadata, EventAndEntityMetadata, EntityMetadata]): if isinstance(obj, Block): return obj.to_dict() if isinstance(obj, Attachment): return obj.to_dict() if isinstance(obj, Metadata): return obj.to_dict() + if isinstance(obj, EventAndEntityMetadata): + return obj.to_dict() + if isinstance(obj, EntityMetadata): + return obj.to_dict() return obj for blocks_name in ["blocks", "user_auth_blocks"]: @@ -208,7 +212,7 @@ def to_dict(obj: Union[Dict, Block, Attachment, Metadata]): kwargs.update({"attachments": dict_attachments}) metadata = kwargs.get("metadata", None) - if metadata is not None and isinstance(metadata, Metadata): + if metadata is not None and (isinstance(metadata, Metadata) or isinstance(metadata, EventAndEntityMetadata)): kwargs.update({"metadata": to_dict(metadata)}) diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index 88c0fcf1a..cce4bd1ad 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -23,7 +23,7 @@ from ..models.attachments import Attachment from ..models.blocks import Block -from ..models.metadata import Metadata +from ..models.metadata import Metadata, EventAndEntityMetadata from .legacy_base_client import LegacyBaseClient, SlackResponse from .internal_utils import ( _parse_web_class_objects, @@ -2770,7 +2770,7 @@ def chat_postMessage( link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: @@ -2936,6 +2936,7 @@ def chat_unfurl( source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -2952,6 +2953,7 @@ def chat_unfurl( "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -3583,6 +3585,29 @@ def emoji_list( kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) + def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[dict] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, str]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + return self.api_call("entity.presentDetails", json=kwargs) + def files_comments_delete( self, *, diff --git a/tests/slack_sdk/models/test_metadata.py b/tests/slack_sdk/models/test_metadata.py new file mode 100644 index 000000000..14635c661 --- /dev/null +++ b/tests/slack_sdk/models/test_metadata.py @@ -0,0 +1,307 @@ +import unittest + +from slack_sdk.models.metadata import ( + EventAndEntityMetadata, + EntityMetadata, + ExternalRef, + FileEntitySlackFile, + EntityIconField, + EntityEditTextConfig, + EntityEditSupport, + EntityFullSizePreviewError, + EntityFullSizePreview, + EntityUserIDField, + EntityUserField, + EntityTypedField, + EntityStringField, + EntityTimestampField, + EntityImageField, + EntityCustomField, + FileEntityFields, + TaskEntityFields, + EntityActionButton, + EntityTitle, + EntityAttributes, + EntityActions, + EntityPayload, +) + + +class EntityMetadataTests(unittest.TestCase): + maxDiff = None + + # ============================================================================ + # Entity JSON + # ============================================================================ + + task_entity_json = { + "app_unfurl_url": "https://myappdomain.com/123?myquery=param", + "entity_type": "slack#/entities/task", + "url": "https://myappdomain.com/123", + "external_ref": {"id": "123"}, + "entity_payload": { + "attributes": { + "title": {"text": "My Title"}, + "display_type": "Incident", + "display_id": "123", + "product_name": "My Product", + }, + "fields": { + "date_created": {"value": 1741164235}, + "status": {"value": "In Progress"}, + "description": { + "value": "My Description", + "long": True, + "edit": {"enabled": True, "text": {"min_length": 5, "max_length": 100}}, + }, + "due_date": {"value": "2026-06-06", "type": "slack#/types/date"}, + "created_by": {"type": "slack#/types/user", "user": {"user_id": "USLACKBOT"}}, + }, + "custom_fields": [ + { + "label": "My Users", + "key": "my-users", + "type": "array", + "item_type": "slack#/types/user", + "value": [ + {"type": "slack#/types/user", "user": {"user_id": "USLACKBOT"}}, + { + "type": "slack#/types/user", + "user": { + "text": "John Smith", + "email": "j@example.com", + "icon": {"alt_text": "Avatar", "url": "https://my-hosted-icon.com"}, + }, + }, + ], + } + ], + }, + } + + file_entity_json = { + "app_unfurl_url": "https://myappdomain.com/file/456?view=preview", + "entity_type": "slack#/entities/file", + "url": "https://myappdomain.com/file/456", + "external_ref": {"id": "456", "type": "DOC"}, + "entity_payload": { + "attributes": { + "title": {"text": "Q4 Product Roadmap"}, + "display_type": "PDF Document", + "display_id": "DOC-456", + "product_icon": {"alt_text": "Product Logo", "url": "https://myappdomain.com/icons/logo.png"}, + "product_name": "FileVault Pro", + "locale": "en-US", + "full_size_preview": { + "is_supported": True, + "preview_url": "https://myappdomain.com/previews/456/full.png", + "mime_type": "image/png", + }, + }, + "fields": { + "preview": { + "alt_text": "Document preview thumbnail", + "label": "Preview", + "image_url": "https://myappdomain.com/previews/456/thumb.png", + "type": "slack#/types/image", + }, + "date_created": {"value": 1709554321, "type": "slack#/types/timestamp"}, + "mime_type": {"value": "application/pdf"}, + }, + "slack_file": {"id": "F123ABC456", "type": "pdf"}, + "display_order": ["date_created", "mime_type", "preview"], + "actions": { + "primary_actions": [ + { + "text": "Open", + "action_id": "open_file", + "value": "456", + "style": "primary", + "url": "https://myappdomain.com/file/456/view", + } + ], + "overflow_actions": [{"text": "Delete", "action_id": "delete_file", "value": "456", "style": "danger"}], + }, + }, + } + + # ============================================================================ + # Methods returning re-usable metadata components + # ============================================================================ + + def attributes(self): + return EntityAttributes( + title=EntityTitle(text="My Title"), + product_name="My Product", + display_type="Incident", + display_id="123", + ) + + def sample_file_attributes(self): + return EntityAttributes( + title=EntityTitle(text="Q4 Product Roadmap"), + display_type="PDF Document", + display_id="DOC-456", + product_icon=EntityIconField(alt_text="Product Logo", url="https://myappdomain.com/icons/logo.png"), + product_name="FileVault Pro", + locale="en-US", + full_size_preview=EntityFullSizePreview( + is_supported=True, preview_url="https://myappdomain.com/previews/456/full.png", mime_type="image/png" + ), + ) + + def user_array_custom_field(self): + return EntityCustomField( + label="My Users", + key="my-users", + type="array", + item_type="slack#/types/user", + value=[ + EntityTypedField(type="slack#/types/user", user=EntityUserIDField(user_id="USLACKBOT")), + EntityTypedField( + type="slack#/types/user", + user=EntityUserField( + text="John Smith", + email="j@example.com", + icon=EntityIconField(alt_text="Avatar", url="https://my-hosted-icon.com"), + ), + ), + ], + ) + + def task_fields(self): + return TaskEntityFields( + date_created=EntityTimestampField(value=1741164235), + status=EntityStringField(value="In Progress"), + description=EntityStringField( + value="My Description", + long=True, + edit=EntityEditSupport(enabled=True, text=EntityEditTextConfig(min_length=5, max_length=100)), + ), + due_date=EntityTypedField(value="2026-06-06", type="slack#/types/date"), + created_by=EntityTypedField( + type="slack#/types/user", + user=EntityUserIDField(user_id="USLACKBOT"), + ), + ) + + def file_fields(self): + return FileEntityFields( + preview=EntityImageField( + type="slack#/types/image", + alt_text="Document preview thumbnail", + label="Preview", + image_url="https://myappdomain.com/previews/456/thumb.png", + ), + date_created=EntityTimestampField(value=1709554321, type="slack#/types/timestamp"), + mime_type=EntityStringField(value="application/pdf"), + ) + + def supported_full_size_preview(self): + return EntityFullSizePreview( + is_supported=True, preview_url="https://example.com/preview.jpg", mime_type="image/jpeg" + ) + + def sample_file_actions(self): + return EntityActions( + primary_actions=[ + EntityActionButton( + text="Open", + action_id="open_file", + value="456", + style="primary", + url="https://myappdomain.com/file/456/view", + ) + ], + overflow_actions=[EntityActionButton(text="Delete", action_id="delete_file", value="456", style="danger")], + ) + + # ============================================================================ + # Tests + # ============================================================================ + + def test_entity_full_size_preview_error(self): + error = EntityFullSizePreviewError(code="not_found", message="File not found") + self.assertDictEqual(error.to_dict(), {"code": "not_found", "message": "File not found"}) + + def test_entity_full_size_preview_with_error(self): + preview = EntityFullSizePreview( + is_supported=False, error=EntityFullSizePreviewError(code="invalid_format", message="File not found") + ) + result = preview.to_dict() + self.assertFalse(result["is_supported"]) + self.assertIn("error", result) + + def test_attributes(self): + self.assertDictEqual( + self.attributes().to_dict(), + self.task_entity_json["entity_payload"]["attributes"], + ) + + def test_sample_file_attributes(self): + self.assertDictEqual( + self.sample_file_attributes().to_dict(), + self.file_entity_json["entity_payload"]["attributes"], + ) + + def test_array_custom_field(self): + self.assertDictEqual( + self.user_array_custom_field().to_dict(), + self.task_entity_json["entity_payload"]["custom_fields"][0], + ) + + def test_task_fields(self): + self.assertDictEqual( + self.task_fields().to_dict(), + self.task_entity_json["entity_payload"]["fields"], + ) + + def test_file_fields(self): + self.assertDictEqual( + self.file_fields().to_dict(), + self.file_entity_json["entity_payload"]["fields"], + ) + + def test_sample_file_actions(self): + self.assertDictEqual( + self.sample_file_actions().to_dict(), + self.file_entity_json["entity_payload"]["actions"], + ) + + def test_complete_task_entity_metadata(self): + entity_metadata = EventAndEntityMetadata( + entities=[ + EntityMetadata( + entity_type="slack#/entities/task", + external_ref=ExternalRef(id="123"), + url="https://myappdomain.com/123", + app_unfurl_url="https://myappdomain.com/123?myquery=param", + entity_payload=EntityPayload( + attributes=self.attributes(), + fields=self.task_fields(), + custom_fields=[self.user_array_custom_field()], + ), + ) + ] + ) + self.assertDictEqual(entity_metadata.to_dict(), {"entities": [self.task_entity_json]}) + + def test_complete_file_entity_metadata(self): + entity_metadata = EventAndEntityMetadata( + entities=[ + EntityMetadata( + entity_type="slack#/entities/file", + external_ref=ExternalRef(id="456", type="DOC"), + url="https://myappdomain.com/file/456", + app_unfurl_url="https://myappdomain.com/file/456?view=preview", + entity_payload=EntityPayload( + attributes=self.sample_file_attributes(), + fields=self.file_fields(), + slack_file=FileEntitySlackFile(id="F123ABC456", type="pdf"), + display_order=["date_created", "mime_type", "preview"], + actions=self.sample_file_actions(), + ), + ) + ] + ) + self.assertDictEqual(entity_metadata.to_dict(), {"entities": [self.file_entity_json]}) From e802f1716719f5ed3996f966e2c341033e1b0053 Mon Sep 17 00:00:00 2001 From: Elaine Vegeris Date: Tue, 18 Nov 2025 12:59:41 -0500 Subject: [PATCH 54/72] feat: update work objects support (entity.presentDetails) (#1793) --- slack_sdk/web/async_client.py | 7 ++++--- slack_sdk/web/client.py | 7 ++++--- slack_sdk/web/internal_utils.py | 6 +++++- slack_sdk/web/legacy_client.py | 7 ++++--- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index 050e93294..cedaa86d4 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -22,7 +22,7 @@ from ..models.attachments import Attachment from ..models.blocks import Block -from ..models.metadata import Metadata, EventAndEntityMetadata +from ..models.metadata import Metadata, EntityMetadata, EventAndEntityMetadata from .async_base_client import AsyncBaseClient, AsyncSlackResponse from .internal_utils import ( _parse_web_class_objects, @@ -3650,10 +3650,10 @@ async def emoji_list( async def entity_presentDetails( self, trigger_id: str, - metadata: Optional[dict] = None, + metadata: Optional[Union[Dict, EntityMetadata]] = None, user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = None, - error: Optional[Dict[str, str]] = None, + error: Optional[Dict[str, Any]] = None, **kwargs, ) -> AsyncSlackResponse: """Provides entity details for the flexpane. @@ -3668,6 +3668,7 @@ async def entity_presentDetails( kwargs.update({"user_auth_url": user_auth_url}) if error is not None: kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) return await self.api_call("entity.presentDetails", json=kwargs) async def files_comments_delete( diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index 830f481d0..4be33e8df 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -12,7 +12,7 @@ from ..models.attachments import Attachment from ..models.blocks import Block -from ..models.metadata import Metadata, EventAndEntityMetadata +from ..models.metadata import Metadata, EntityMetadata, EventAndEntityMetadata from .base_client import BaseClient, SlackResponse from .internal_utils import ( _parse_web_class_objects, @@ -3640,10 +3640,10 @@ def emoji_list( def entity_presentDetails( self, trigger_id: str, - metadata: Optional[dict] = None, + metadata: Optional[Union[Dict, EntityMetadata]] = None, user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = None, - error: Optional[Dict[str, str]] = None, + error: Optional[Dict[str, Any]] = None, **kwargs, ) -> SlackResponse: """Provides entity details for the flexpane. @@ -3658,6 +3658,7 @@ def entity_presentDetails( kwargs.update({"user_auth_url": user_auth_url}) if error is not None: kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) return self.api_call("entity.presentDetails", json=kwargs) def files_comments_delete( diff --git a/slack_sdk/web/internal_utils.py b/slack_sdk/web/internal_utils.py index 57afc6be4..87139559c 100644 --- a/slack_sdk/web/internal_utils.py +++ b/slack_sdk/web/internal_utils.py @@ -212,7 +212,11 @@ def to_dict(obj: Union[Dict, Block, Attachment, Metadata, EventAndEntityMetadata kwargs.update({"attachments": dict_attachments}) metadata = kwargs.get("metadata", None) - if metadata is not None and (isinstance(metadata, Metadata) or isinstance(metadata, EventAndEntityMetadata)): + if metadata is not None and ( + isinstance(metadata, Metadata) + or isinstance(metadata, EntityMetadata) + or isinstance(metadata, EventAndEntityMetadata) + ): kwargs.update({"metadata": to_dict(metadata)}) diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index cce4bd1ad..3aaa36f74 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -23,7 +23,7 @@ from ..models.attachments import Attachment from ..models.blocks import Block -from ..models.metadata import Metadata, EventAndEntityMetadata +from ..models.metadata import Metadata, EntityMetadata, EventAndEntityMetadata from .legacy_base_client import LegacyBaseClient, SlackResponse from .internal_utils import ( _parse_web_class_objects, @@ -3588,10 +3588,10 @@ def emoji_list( def entity_presentDetails( self, trigger_id: str, - metadata: Optional[dict] = None, + metadata: Optional[Union[Dict, EntityMetadata]] = None, user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = None, - error: Optional[Dict[str, str]] = None, + error: Optional[Dict[str, Any]] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Provides entity details for the flexpane. @@ -3606,6 +3606,7 @@ def entity_presentDetails( kwargs.update({"user_auth_url": user_auth_url}) if error is not None: kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) return self.api_call("entity.presentDetails", json=kwargs) def files_comments_delete( From c04e899f9e153fc102cf699d1b044202022148c1 Mon Sep 17 00:00:00 2001 From: Maria Alejandra <104795114+srtaalej@users.noreply.github.com> Date: Wed, 19 Nov 2025 14:39:36 -0500 Subject: [PATCH 55/72] feat(web-api): add slackLists methods (#1772) Co-authored-by: Eden Zimbelman --- integration_tests/web/test_slack_lists.py | 88 +++++++ slack_sdk/web/async_client.py | 245 +++++++++++++++++- slack_sdk/web/client.py | 245 +++++++++++++++++- slack_sdk/web/legacy_client.py | 245 +++++++++++++++++- .../web/test_web_client_coverage.py | 40 ++- 5 files changed, 859 insertions(+), 4 deletions(-) create mode 100644 integration_tests/web/test_slack_lists.py diff --git a/integration_tests/web/test_slack_lists.py b/integration_tests/web/test_slack_lists.py new file mode 100644 index 000000000..6d813bffe --- /dev/null +++ b/integration_tests/web/test_slack_lists.py @@ -0,0 +1,88 @@ +import logging +import os +import unittest + +from integration_tests.env_variable_names import ( + SLACK_SDK_TEST_BOT_TOKEN, +) +from integration_tests.helpers import async_test +from slack_sdk.web import WebClient +from slack_sdk.web.async_client import AsyncWebClient +from slack_sdk.models.blocks import RichTextBlock +from slack_sdk.models.blocks.block_elements import RichTextSection, RichTextText + + +class TestSlackLists(unittest.TestCase): + """Runs integration tests with real Slack API testing the slackLists.* APIs""" + + def setUp(self): + if not hasattr(self, "logger"): + self.logger = logging.getLogger(__name__) + self.bot_token = os.environ[SLACK_SDK_TEST_BOT_TOKEN] + self.async_client: AsyncWebClient = AsyncWebClient(token=self.bot_token) + self.sync_client: WebClient = WebClient(token=self.bot_token) + + def tearDown(self): + pass + + def test_create_list_with_dicts(self): + """Test creating a list with description_blocks as dicts""" + client = self.sync_client + + create_response = client.slackLists_create( + name="Test Sales Pipeline", + description_blocks=[ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [{"type": "text", "text": "This is a test list for integration testing"}], + } + ], + } + ], + schema=[ + {"key": "deal_name", "name": "Deal Name", "type": "text", "is_primary_column": True}, + {"key": "amount", "name": "Amount", "type": "number", "options": {"format": "currency", "precision": 2}}, + ], + ) + + self.assertIsNotNone(create_response) + self.assertTrue(create_response["ok"]) + self.assertIn("list", create_response) + list_id = create_response["list"]["id"] + self.logger.info(f"✓ Created list with ID: {list_id}") + + def test_create_list_with_rich_text_blocks(self): + """Test creating a list with RichTextBlock objects""" + client = self.sync_client + + create_response = client.slackLists_create( + name="Test List with Rich Text Blocks", + description_blocks=[ + RichTextBlock( + elements=[RichTextSection(elements=[RichTextText(text="Created with RichTextBlock objects!")])] + ) + ], + schema=[{"key": "task_name", "name": "Task", "type": "text", "is_primary_column": True}], + ) + + self.assertIsNotNone(create_response) + self.assertTrue(create_response["ok"]) + list_id = create_response["list"]["id"] + self.logger.info(f"✓ Created list with RichTextBlocks, ID: {list_id}") + + @async_test + async def test_create_list_async(self): + """Test creating a list with async client""" + client = self.async_client + + create_response = await client.slackLists_create( + name="Async Test List", schema=[{"key": "item_name", "name": "Item", "type": "text", "is_primary_column": True}] + ) + + self.assertIsNotNone(create_response) + self.assertTrue(create_response["ok"]) + list_id = create_response["list"]["id"] + self.logger.info(f"✓ Created list asynchronously, ID: {list_id}") diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index cedaa86d4..ca163da98 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -21,7 +21,7 @@ from slack_sdk.web.async_chat_stream import AsyncChatStream from ..models.attachments import Attachment -from ..models.blocks import Block +from ..models.blocks import Block, RichTextBlock from ..models.metadata import Metadata, EntityMetadata, EventAndEntityMetadata from .async_base_client import AsyncBaseClient, AsyncSlackResponse from .internal_utils import ( @@ -4925,6 +4925,249 @@ async def search_messages( ) return await self.api_call("search.messages", http_verb="GET", params=kwargs) + async def slackLists_access_delete( + self, + *, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete + """ + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.access.delete", json=kwargs) + + async def slackLists_access_set( + self, + *, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.access.set", json=kwargs) + + async def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create + """ + kwargs.update( + { + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.create", json=kwargs) + + async def slackLists_download_get( + self, + *, + list_id: str, + job_id: str, + **kwargs, + ) -> AsyncSlackResponse: + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get + """ + kwargs.update( + { + "list_id": list_id, + "job_id": job_id, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.download.get", json=kwargs) + + async def slackLists_download_start( + self, + *, + list_id: str, + include_archived: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start + """ + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.download.start", json=kwargs) + + async def slackLists_items_create( + self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create + """ + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.create", json=kwargs) + + async def slackLists_items_delete( + self, + *, + list_id: str, + id: str, + **kwargs, + ) -> AsyncSlackResponse: + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.delete", json=kwargs) + + async def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> AsyncSlackResponse: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + async def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.info", json=kwargs) + + async def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.list", json=kwargs) + + async def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> AsyncSlackResponse: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.update", json=kwargs) + + async def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.update", json=kwargs) + async def stars_add( self, *, diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index 4be33e8df..dfa771832 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -11,7 +11,7 @@ from slack_sdk.web.chat_stream import ChatStream from ..models.attachments import Attachment -from ..models.blocks import Block +from ..models.blocks import Block, RichTextBlock from ..models.metadata import Metadata, EntityMetadata, EventAndEntityMetadata from .base_client import BaseClient, SlackResponse from .internal_utils import ( @@ -4915,6 +4915,249 @@ def search_messages( ) return self.api_call("search.messages", http_verb="GET", params=kwargs) + def slackLists_access_delete( + self, + *, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> SlackResponse: + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete + """ + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.delete", json=kwargs) + + def slackLists_access_set( + self, + *, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> SlackResponse: + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.set", json=kwargs) + + def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create + """ + kwargs.update( + { + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.create", json=kwargs) + + def slackLists_download_get( + self, + *, + list_id: str, + job_id: str, + **kwargs, + ) -> SlackResponse: + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get + """ + kwargs.update( + { + "list_id": list_id, + "job_id": job_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.get", json=kwargs) + + def slackLists_download_start( + self, + *, + list_id: str, + include_archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start + """ + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.start", json=kwargs) + + def slackLists_items_create( + self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, + **kwargs, + ) -> SlackResponse: + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create + """ + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.create", json=kwargs) + + def slackLists_items_delete( + self, + *, + list_id: str, + id: str, + **kwargs, + ) -> SlackResponse: + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.delete", json=kwargs) + + def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> SlackResponse: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.info", json=kwargs) + + def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.list", json=kwargs) + + def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> SlackResponse: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.update", json=kwargs) + + def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.update", json=kwargs) + def stars_add( self, *, diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index 3aaa36f74..df2bcc370 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -22,7 +22,7 @@ from slack_sdk.models.views import View from ..models.attachments import Attachment -from ..models.blocks import Block +from ..models.blocks import Block, RichTextBlock from ..models.metadata import Metadata, EntityMetadata, EventAndEntityMetadata from .legacy_base_client import LegacyBaseClient, SlackResponse from .internal_utils import ( @@ -4863,6 +4863,249 @@ def search_messages( ) return self.api_call("search.messages", http_verb="GET", params=kwargs) + def slackLists_access_delete( + self, + *, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete + """ + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.delete", json=kwargs) + + def slackLists_access_set( + self, + *, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.set", json=kwargs) + + def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create + """ + kwargs.update( + { + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.create", json=kwargs) + + def slackLists_download_get( + self, + *, + list_id: str, + job_id: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get + """ + kwargs.update( + { + "list_id": list_id, + "job_id": job_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.get", json=kwargs) + + def slackLists_download_start( + self, + *, + list_id: str, + include_archived: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start + """ + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.start", json=kwargs) + + def slackLists_items_create( + self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create + """ + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.create", json=kwargs) + + def slackLists_items_delete( + self, + *, + list_id: str, + id: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.delete", json=kwargs) + + def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.info", json=kwargs) + + def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.list", json=kwargs) + + def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.update", json=kwargs) + + def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.update", json=kwargs) + def stars_add( self, *, diff --git a/tests/slack_sdk_async/web/test_web_client_coverage.py b/tests/slack_sdk_async/web/test_web_client_coverage.py index af6d92236..0a3c1687b 100644 --- a/tests/slack_sdk_async/web/test_web_client_coverage.py +++ b/tests/slack_sdk_async/web/test_web_client_coverage.py @@ -15,7 +15,7 @@ class TestWebClientCoverage(unittest.TestCase): # 295 endpoints as of September 17, 2025 # Can be fetched by running `var methodNames = [].slice.call(document.getElementsByClassName('apiReferenceFilterableList__listItemLink')).map(e => e.href.replace("https://api.slack.com/methods/", ""));console.log(methodNames.toString());console.log(methodNames.length);` on https://api.slack.com/methods - all_api_methods = "admin.analytics.getFile,admin.apps.activities.list,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.config.lookup,admin.apps.config.set,admin.apps.requests.cancel,admin.apps.requests.list,admin.apps.restricted.list,admin.audit.anomaly.allow.getItem,admin.audit.anomaly.allow.updateItem,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.bulkArchive,admin.conversations.bulkDelete,admin.conversations.bulkMove,admin.conversations.convertToPrivate,admin.conversations.convertToPublic,admin.conversations.create,admin.conversations.createForObjects,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.linkObjects,admin.conversations.lookup,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.unlinkObjects,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.functions.list,admin.functions.permissions.lookup,admin.functions.permissions.set,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.roles.addAssignments,admin.roles.listAssignments,admin.roles.removeAssignments,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.resetBulk,admin.users.session.setSettings,admin.users.unsupportedVersions.export,admin.workflows.collaborators.add,admin.workflows.collaborators.remove,admin.workflows.permissions.lookup,admin.workflows.search,admin.workflows.unpublish,admin.workflows.triggers.types.permissions.lookup,admin.workflows.triggers.types.permissions.set,api.test,apps.activities.list,apps.auth.external.delete,apps.auth.external.get,apps.connections.open,apps.uninstall,apps.datastore.bulkDelete,apps.datastore.bulkGet,apps.datastore.bulkPut,apps.datastore.count,apps.datastore.delete,apps.datastore.get,apps.datastore.put,apps.datastore.query,apps.datastore.update,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,assistant.search.context,assistant.threads.setStatus,assistant.threads.setSuggestedPrompts,assistant.threads.setTitle,auth.revoke,auth.test,auth.teams.list,bookmarks.add,bookmarks.edit,bookmarks.list,bookmarks.remove,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,canvases.access.delete,canvases.access.set,canvases.create,canvases.delete,canvases.edit,canvases.sections.lookup,channels.mark,chat.appendStream,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.scheduledMessages.list,chat.startStream,chat.stopStream,chat.unfurl,chat.update,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,conversations.canvases.create,conversations.externalInvitePermissions.set,conversations.requestSharedInvite.approve,conversations.requestSharedInvite.deny,conversations.requestSharedInvite.list,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.completeUploadExternal,files.delete,files.getUploadURLExternal,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.comments.delete,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,functions.completeError,functions.completeSuccess,functions.distributions.permissions.add,functions.distributions.permissions.list,functions.distributions.permissions.remove,functions.distributions.permissions.set,functions.workflows.steps.list,functions.workflows.steps.responses.export,groups.mark,migration.exchange,oauth.access,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.billing.info,team.externalTeams.disconnect,team.externalTeams.list,team.preferences.list,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.discoverableContacts.lookup,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.featured.add,workflows.featured.list,workflows.featured.remove,workflows.featured.set,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,workflows.triggers.permissions.add,workflows.triggers.permissions.list,workflows.triggers.permissions.remove,workflows.triggers.permissions.set,im.list,im.mark,mpim.list,mpim.mark".split( + all_api_methods = "admin.analytics.getFile,admin.apps.activities.list,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.config.lookup,admin.apps.config.set,admin.apps.requests.cancel,admin.apps.requests.list,admin.apps.restricted.list,admin.audit.anomaly.allow.getItem,admin.audit.anomaly.allow.updateItem,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.bulkArchive,admin.conversations.bulkDelete,admin.conversations.bulkMove,admin.conversations.convertToPrivate,admin.conversations.convertToPublic,admin.conversations.create,admin.conversations.createForObjects,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.linkObjects,admin.conversations.lookup,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.unlinkObjects,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.functions.list,admin.functions.permissions.lookup,admin.functions.permissions.set,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.roles.addAssignments,admin.roles.listAssignments,admin.roles.removeAssignments,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.resetBulk,admin.users.session.setSettings,admin.users.unsupportedVersions.export,admin.workflows.collaborators.add,admin.workflows.collaborators.remove,admin.workflows.permissions.lookup,admin.workflows.search,admin.workflows.unpublish,admin.workflows.triggers.types.permissions.lookup,admin.workflows.triggers.types.permissions.set,api.test,apps.activities.list,apps.auth.external.delete,apps.auth.external.get,apps.connections.open,apps.uninstall,apps.datastore.bulkDelete,apps.datastore.bulkGet,apps.datastore.bulkPut,apps.datastore.count,apps.datastore.delete,apps.datastore.get,apps.datastore.put,apps.datastore.query,apps.datastore.update,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,assistant.search.context,assistant.threads.setStatus,assistant.threads.setSuggestedPrompts,assistant.threads.setTitle,auth.revoke,auth.test,auth.teams.list,bookmarks.add,bookmarks.edit,bookmarks.list,bookmarks.remove,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,canvases.access.delete,canvases.access.set,canvases.create,canvases.delete,canvases.edit,canvases.sections.lookup,channels.mark,chat.appendStream,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.scheduledMessages.list,chat.startStream,chat.stopStream,chat.unfurl,chat.update,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,conversations.canvases.create,conversations.externalInvitePermissions.set,conversations.requestSharedInvite.approve,conversations.requestSharedInvite.deny,conversations.requestSharedInvite.list,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.completeUploadExternal,files.delete,files.getUploadURLExternal,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.comments.delete,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,functions.completeError,functions.completeSuccess,functions.distributions.permissions.add,functions.distributions.permissions.list,functions.distributions.permissions.remove,functions.distributions.permissions.set,functions.workflows.steps.list,functions.workflows.steps.responses.export,groups.mark,migration.exchange,oauth.access,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,slackLists.access.delete,slackLists.access.set,slackLists.create,slackLists.download.get,slackLists.download.start,slackLists.items.create,slackLists.items.delete,slackLists.items.delete,slackLists.items.deleteMultiple,slackLists.items.info,slackLists.items.list,slackLists.items.update,slackLists.update,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.billing.info,team.externalTeams.disconnect,team.externalTeams.list,team.preferences.list,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.discoverableContacts.lookup,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.featured.add,workflows.featured.list,workflows.featured.remove,workflows.featured.set,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,workflows.triggers.permissions.add,workflows.triggers.permissions.list,workflows.triggers.permissions.remove,workflows.triggers.permissions.set,im.list,im.mark,mpim.list,mpim.mark".split( "," ) @@ -802,6 +802,44 @@ async def run_method(self, method_name, method, async_method): elif method_name == "search_messages": self.api_methods_to_call.remove(method(query="Slack")["method"]) await async_method(query="Slack") + elif method_name == "slackLists_access_delete": + self.api_methods_to_call.remove(method(list_id="123")["method"]) + await async_method(list_id="123") + elif method_name == "slackLists_access_set": + self.api_methods_to_call.remove(method(list_id="123", access_level="private")["method"]) + await async_method(list_id="123", access_level="private") + elif method_name == "slackLists_create": + self.api_methods_to_call.remove(method(name="Backlog")["method"]) + await async_method(name="Backlog") + elif method_name == "slackLists_download_get": + self.api_methods_to_call.remove(method(list_id="123", job_id="123")["method"]) + await async_method(list_id="123", job_id="123") + elif method_name == "slackLists_download_start": + self.api_methods_to_call.remove(method(list_id="123")["method"]) + await async_method(list_id="123") + elif method_name == "slackLists_items_create": + self.api_methods_to_call.remove(method(list_id="123")["method"]) + await async_method(list_id="123") + elif method_name == "slackLists_items_delete": + self.api_methods_to_call.remove(method(list_id="123", id="123")["method"]) + await async_method(list_id="123", id="123") + elif method_name == "slackLists_items_deleteMultiple": + self.api_methods_to_call.remove(method(list_id="123", ids=["123", "456"])["method"]) + await async_method(list_id="123", ids=["123", "456"]) + elif method_name == "slackLists_items_info": + self.api_methods_to_call.remove(method(list_id="123", id="123")["method"]) + await async_method(list_id="123", id="123") + elif method_name == "slackLists_items_list": + self.api_methods_to_call.remove(method(list_id="123")["method"]) + await async_method(list_id="123") + elif method_name == "slackLists_items_update": + self.api_methods_to_call.remove( + method(list_id="123", cells=[{"column_id": "col123"}, {"row_id": "row123"}])["method"] + ) + await async_method(list_id="123", cells=[{"column_id": "col123"}, {"row_id": "row123"}]) + elif method_name == "slackLists_update": + self.api_methods_to_call.remove(method(id="123")["method"]) + await async_method(id="123") elif method_name == "team_externalTeams_disconnect": self.api_methods_to_call.remove(method(target_team="T111")["method"]) await async_method(target_team="T111") From 9fd33fe2d142ad53c699c6c61d99dc23baa34699 Mon Sep 17 00:00:00 2001 From: Gritty_dev <101377478+codomposer@users.noreply.github.com> Date: Wed, 19 Nov 2025 18:52:16 -0500 Subject: [PATCH 56/72] feat: add table block (#1788) Co-authored-by: Eden Zimbelman --- slack_sdk/models/blocks/__init__.py | 4 + slack_sdk/models/blocks/basic_components.py | 34 ++++ slack_sdk/models/blocks/blocks.py | 46 +++++ tests/slack_sdk/models/test_blocks.py | 202 ++++++++++++++++++++ 4 files changed, 286 insertions(+) diff --git a/slack_sdk/models/blocks/__init__.py b/slack_sdk/models/blocks/__init__.py index 334f55c40..d2776a9dc 100644 --- a/slack_sdk/models/blocks/__init__.py +++ b/slack_sdk/models/blocks/__init__.py @@ -16,6 +16,7 @@ Option, OptionGroup, PlainTextObject, + RawTextObject, TextObject, ) from .block_elements import ( @@ -71,6 +72,7 @@ MarkdownBlock, RichTextBlock, SectionBlock, + TableBlock, VideoBlock, ) @@ -83,6 +85,7 @@ "Option", "OptionGroup", "PlainTextObject", + "RawTextObject", "TextObject", "BlockElement", "ButtonElement", @@ -133,6 +136,7 @@ "InputBlock", "MarkdownBlock", "SectionBlock", + "TableBlock", "VideoBlock", "RichTextBlock", ] diff --git a/slack_sdk/models/blocks/basic_components.py b/slack_sdk/models/blocks/basic_components.py index 6f22c88e1..b6e71683a 100644 --- a/slack_sdk/models/blocks/basic_components.py +++ b/slack_sdk/models/blocks/basic_components.py @@ -157,6 +157,40 @@ def direct_from_link(link: Link, title: str = "") -> Dict[str, Any]: return MarkdownTextObject.from_link(link, title).to_dict() +class RawTextObject(TextObject): + """raw_text typed text object""" + + type = "raw_text" + + @property + def attributes(self) -> Set[str]: # type: ignore[override] + return {"text", "type"} + + def __init__(self, *, text: str): + """A raw text object used in table block cells. + https://docs.slack.dev/reference/block-kit/composition-objects/text-object/ + https://docs.slack.dev/reference/block-kit/blocks/table-block + + Args: + text (required): The text content for the table block cell. + """ + super().__init__(text=text, type=self.type) + + @staticmethod + def from_str(text: str) -> "RawTextObject": + """Transforms a string into a RawTextObject""" + return RawTextObject(text=text) + + @staticmethod + def direct_from_string(text: str) -> Dict[str, Any]: + """Transforms a string into the required object shape to act as a RawTextObject""" + return RawTextObject.from_str(text).to_dict() + + @JsonValidator("text attribute must have at least 1 character") + def _validate_text_min_length(self): + return len(self.text) >= 1 + + class Option(JsonObject): """Option object used in dialogs, legacy message actions (interactivity in attachments), and blocks. JSON must be retrieved with an explicit option_type - the Slack API has diff --git a/slack_sdk/models/blocks/blocks.py b/slack_sdk/models/blocks/blocks.py index 9976de5b4..cac463c99 100644 --- a/slack_sdk/models/blocks/blocks.py +++ b/slack_sdk/models/blocks/blocks.py @@ -95,6 +95,8 @@ def parse(cls, block: Union[dict, "Block"]) -> Optional["Block"]: return VideoBlock(**block) elif type == RichTextBlock.type: return RichTextBlock(**block) + elif type == TableBlock.type: + return TableBlock(**block) else: cls.logger.warning(f"Unknown block detected and skipped ({block})") return None @@ -731,3 +733,47 @@ def __init__( show_unknown_key_warning(self, others) self.elements = BlockElement.parse_all(elements) + + +class TableBlock(Block): + type = "table" + + @property + def attributes(self) -> Set[str]: # type: ignore[override] + return super().attributes.union({"rows", "column_settings"}) + + def __init__( + self, + *, + rows: Sequence[Sequence[Dict[str, Any]]], + column_settings: Optional[Sequence[Optional[Dict[str, Any]]]] = None, + block_id: Optional[str] = None, + **others: dict, + ): + """Displays structured information in a table. + https://docs.slack.dev/reference/block-kit/blocks/table-block + + Args: + rows (required): An array consisting of table rows. Maximum 100 rows. + Each row object is an array with a max of 20 table cells. + Table cells can have a type of raw_text or rich_text. + column_settings: An array describing column behavior. If there are fewer items in the column_settings array + than there are columns in the table, then the items in the the column_settings array will describe + the same number of columns in the table as there are in the array itself. + Any additional columns will have the default behavior. Maximum 20 items. + See below for column settings schema. + block_id: A unique identifier for a block. If not specified, a block_id will be generated. + You can use this block_id when you receive an interaction payload to identify the source of the action. + Maximum length for this field is 255 characters. + block_id should be unique for each message and each iteration of a message. + If a message is updated, use a new block_id. + """ + super().__init__(type=self.type, block_id=block_id) + show_unknown_key_warning(self, others) + + self.rows = rows + self.column_settings = column_settings + + @JsonValidator("rows attribute must be specified") + def _validate_rows(self): + return self.rows is not None and len(self.rows) > 0 diff --git a/tests/slack_sdk/models/test_blocks.py b/tests/slack_sdk/models/test_blocks.py index a07ce11b8..6f3b9f141 100644 --- a/tests/slack_sdk/models/test_blocks.py +++ b/tests/slack_sdk/models/test_blocks.py @@ -21,6 +21,7 @@ Option, OverflowMenuElement, PlainTextObject, + RawTextObject, RichTextBlock, RichTextElementParts, RichTextListElement, @@ -29,6 +30,7 @@ RichTextSectionElement, SectionBlock, StaticSelectElement, + TableBlock, VideoBlock, ) from slack_sdk.models.blocks.basic_components import FeedbackButtonObject, SlackFile @@ -1267,3 +1269,203 @@ def test_parsing_empty_block_elements(self): self.assertIsNotNone(block_dict["elements"][1].get("elements")) self.assertIsNotNone(block_dict["elements"][2].get("elements")) self.assertIsNotNone(block_dict["elements"][3].get("elements")) + + +# ---------------------------------------------- +# RawTextObject +# ---------------------------------------------- + + +class RawTextObjectTests(unittest.TestCase): + def test_basic_creation(self): + """Test basic RawTextObject creation""" + obj = RawTextObject(text="Hello") + expected = {"type": "raw_text", "text": "Hello"} + self.assertDictEqual(expected, obj.to_dict()) + + def test_from_str(self): + """Test RawTextObject.from_str() helper""" + obj = RawTextObject.from_str("Test text") + expected = {"type": "raw_text", "text": "Test text"} + self.assertDictEqual(expected, obj.to_dict()) + + def test_direct_from_string(self): + """Test RawTextObject.direct_from_string() helper""" + result = RawTextObject.direct_from_string("Direct text") + expected = {"type": "raw_text", "text": "Direct text"} + self.assertDictEqual(expected, result) + + def test_text_length_validation_min(self): + """Test that empty text fails validation""" + with self.assertRaises(SlackObjectFormationError): + RawTextObject(text="").to_dict() + + def test_text_length_validation_at_min(self): + """Test that text with 1 character passes validation""" + obj = RawTextObject(text="a") + obj.to_dict() # Should not raise + + def test_attributes(self): + """Test that RawTextObject only has text and type attributes""" + obj = RawTextObject(text="Test") + self.assertEqual(obj.attributes, {"text", "type"}) + # Should not have emoji attribute like PlainTextObject + self.assertNotIn("emoji", obj.to_dict()) + + +# ---------------------------------------------- +# Table +# ---------------------------------------------- + + +class TableBlockTests(unittest.TestCase): + def test_document(self): + """Test basic table block from Slack documentation example""" + input = { + "type": "table", + "column_settings": [{"is_wrapped": True}, {"align": "right"}], + "rows": [ + [{"type": "raw_text", "text": "Header A"}, {"type": "raw_text", "text": "Header B"}], + [{"type": "raw_text", "text": "Data 1A"}, {"type": "raw_text", "text": "Data 1B"}], + [{"type": "raw_text", "text": "Data 2A"}, {"type": "raw_text", "text": "Data 2B"}], + ], + } + self.assertDictEqual(input, TableBlock(**input).to_dict()) + self.assertDictEqual(input, Block.parse(input).to_dict()) + + def test_with_rich_text(self): + """Test table block with rich_text cells""" + input = { + "type": "table", + "column_settings": [{"is_wrapped": True}, {"align": "right"}], + "rows": [ + [{"type": "raw_text", "text": "Header A"}, {"type": "raw_text", "text": "Header B"}], + [ + {"type": "raw_text", "text": "Data 1A"}, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [{"text": "Data 1B", "type": "link", "url": "https://slack.com"}], + } + ], + }, + ], + ], + } + self.assertDictEqual(input, TableBlock(**input).to_dict()) + self.assertDictEqual(input, Block.parse(input).to_dict()) + + def test_minimal_table(self): + """Test table with only required fields""" + input = { + "type": "table", + "rows": [[{"type": "raw_text", "text": "Cell"}]], + } + self.assertDictEqual(input, TableBlock(**input).to_dict()) + + def test_with_block_id(self): + """Test table block with block_id""" + input = { + "type": "table", + "block_id": "table-123", + "rows": [ + [{"type": "raw_text", "text": "A"}, {"type": "raw_text", "text": "B"}], + [{"type": "raw_text", "text": "1"}, {"type": "raw_text", "text": "2"}], + ], + } + self.assertDictEqual(input, TableBlock(**input).to_dict()) + + def test_column_settings_variations(self): + """Test various column_settings configurations""" + # Left align + input1 = { + "type": "table", + "column_settings": [{"align": "left"}], + "rows": [[{"type": "raw_text", "text": "Left"}]], + } + self.assertDictEqual(input1, TableBlock(**input1).to_dict()) + + # Center align + input2 = { + "type": "table", + "column_settings": [{"align": "center"}], + "rows": [[{"type": "raw_text", "text": "Center"}]], + } + self.assertDictEqual(input2, TableBlock(**input2).to_dict()) + + # With wrapping + input3 = { + "type": "table", + "column_settings": [{"is_wrapped": False}], + "rows": [[{"type": "raw_text", "text": "No wrap"}]], + } + self.assertDictEqual(input3, TableBlock(**input3).to_dict()) + + # Combined settings + input4 = { + "type": "table", + "column_settings": [{"align": "center", "is_wrapped": True}], + "rows": [[{"type": "raw_text", "text": "Both"}]], + } + self.assertDictEqual(input4, TableBlock(**input4).to_dict()) + + def test_column_settings_with_none(self): + """Test column_settings with None to skip columns""" + input = { + "type": "table", + "column_settings": [{"align": "left"}, None, {"align": "right"}], + "rows": [ + [ + {"type": "raw_text", "text": "Left"}, + {"type": "raw_text", "text": "Default"}, + {"type": "raw_text", "text": "Right"}, + ] + ], + } + self.assertDictEqual(input, TableBlock(**input).to_dict()) + + def test_rows_validation(self): + """Test that rows validation works correctly""" + # Empty rows should fail validation + with self.assertRaises(SlackObjectFormationError): + TableBlock(rows=[]).to_dict() + + def test_multi_row_table(self): + """Test table with multiple rows""" + input = { + "type": "table", + "rows": [ + [{"type": "raw_text", "text": "Name"}, {"type": "raw_text", "text": "Age"}], + [{"type": "raw_text", "text": "Alice"}, {"type": "raw_text", "text": "30"}], + [{"type": "raw_text", "text": "Bob"}, {"type": "raw_text", "text": "25"}], + [{"type": "raw_text", "text": "Charlie"}, {"type": "raw_text", "text": "35"}], + ], + } + block = TableBlock(**input) + self.assertEqual(len(block.rows), 4) + self.assertDictEqual(input, block.to_dict()) + + def test_with_raw_text_object_helper(self): + """Test table using RawTextObject helper class""" + # Create table using RawTextObject helper + block = TableBlock( + rows=[ + [RawTextObject(text="Product").to_dict(), RawTextObject(text="Price").to_dict()], + [RawTextObject(text="Widget").to_dict(), RawTextObject(text="$10").to_dict()], + [RawTextObject(text="Gadget").to_dict(), RawTextObject(text="$20").to_dict()], + ], + column_settings=[{"is_wrapped": True}, {"align": "right"}], + ) + + expected = { + "type": "table", + "column_settings": [{"is_wrapped": True}, {"align": "right"}], + "rows": [ + [{"type": "raw_text", "text": "Product"}, {"type": "raw_text", "text": "Price"}], + [{"type": "raw_text", "text": "Widget"}, {"type": "raw_text", "text": "$10"}], + [{"type": "raw_text", "text": "Gadget"}, {"type": "raw_text", "text": "$20"}], + ], + } + self.assertDictEqual(expected, block.to_dict()) From 978dd5617f3c885142db8d968b03e26bc19ba135 Mon Sep 17 00:00:00 2001 From: Elaine Vegeris Date: Thu, 20 Nov 2025 10:05:22 -0500 Subject: [PATCH 57/72] chore(release): version 3.39.0 (#1795) --- docs/reference/http_retry/async_handler.html | 2 +- docs/reference/http_retry/index.html | 2 +- docs/reference/http_retry/response.html | 2 +- docs/reference/index.html | 702 ++++- docs/reference/models/basic_objects.html | 62 +- .../models/blocks/basic_components.html | 134 + docs/reference/models/blocks/blocks.html | 127 + docs/reference/models/blocks/index.html | 261 ++ docs/reference/models/index.html | 62 +- docs/reference/models/metadata/index.html | 2540 +++++++++++++++++ docs/reference/web/async_client.html | 702 ++++- docs/reference/web/client.html | 702 ++++- docs/reference/web/index.html | 702 ++++- docs/reference/web/legacy_client.html | 702 ++++- slack_sdk/version.py | 2 +- 15 files changed, 6672 insertions(+), 32 deletions(-) diff --git a/docs/reference/http_retry/async_handler.html b/docs/reference/http_retry/async_handler.html index 169110894..4f3889fcc 100644 --- a/docs/reference/http_retry/async_handler.html +++ b/docs/reference/http_retry/async_handler.html @@ -193,7 +193,7 @@

                        Static methods

                        class HttpResponse -(*,
                        status_code: str | int,
                        headers: Dict[str, str | List[str]],
                        body: Dict[str, Any] | None = None,
                        data: bytes | None = None)
                        +(*,
                        status_code: int | str,
                        headers: Dict[str, str | List[str]],
                        body: Dict[str, Any] | None = None,
                        data: bytes | None = None)
                        diff --git a/docs/reference/http_retry/index.html b/docs/reference/http_retry/index.html index 7e2294404..501a62c9e 100644 --- a/docs/reference/http_retry/index.html +++ b/docs/reference/http_retry/index.html @@ -388,7 +388,7 @@

                        Static methods

                        class HttpResponse -(*,
                        status_code: str | int,
                        headers: Dict[str, str | List[str]],
                        body: Dict[str, Any] | None = None,
                        data: bytes | None = None)
                        +(*,
                        status_code: int | str,
                        headers: Dict[str, str | List[str]],
                        body: Dict[str, Any] | None = None,
                        data: bytes | None = None)
                        diff --git a/docs/reference/http_retry/response.html b/docs/reference/http_retry/response.html index d9c82b4d8..4a786ab78 100644 --- a/docs/reference/http_retry/response.html +++ b/docs/reference/http_retry/response.html @@ -48,7 +48,7 @@

                        Classes

                        class HttpResponse -(*,
                        status_code: str | int,
                        headers: Dict[str, str | List[str]],
                        body: Dict[str, Any] | None = None,
                        data: bytes | None = None)
                        +(*,
                        status_code: int | str,
                        headers: Dict[str, str | List[str]],
                        body: Dict[str, Any] | None = None,
                        data: bytes | None = None)
                        diff --git a/docs/reference/index.html b/docs/reference/index.html index 282903146..7cc7723c1 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -2894,7 +2894,7 @@

                        Classes

                        link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: @@ -3123,6 +3123,7 @@

                        Classes

                        source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -3139,6 +3140,7 @@

                        Classes

                        "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -3770,6 +3772,30 @@

                        Classes

                        kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) + def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> SlackResponse: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return self.api_call("entity.presentDetails", json=kwargs) + def files_comments_delete( self, *, @@ -5024,6 +5050,249 @@

                        Classes

                        ) return self.api_call("search.messages", http_verb="GET", params=kwargs) + def slackLists_access_delete( + self, + *, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> SlackResponse: + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete + """ + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.delete", json=kwargs) + + def slackLists_access_set( + self, + *, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> SlackResponse: + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.set", json=kwargs) + + def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create + """ + kwargs.update( + { + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.create", json=kwargs) + + def slackLists_download_get( + self, + *, + list_id: str, + job_id: str, + **kwargs, + ) -> SlackResponse: + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get + """ + kwargs.update( + { + "list_id": list_id, + "job_id": job_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.get", json=kwargs) + + def slackLists_download_start( + self, + *, + list_id: str, + include_archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start + """ + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.start", json=kwargs) + + def slackLists_items_create( + self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, + **kwargs, + ) -> SlackResponse: + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create + """ + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.create", json=kwargs) + + def slackLists_items_delete( + self, + *, + list_id: str, + id: str, + **kwargs, + ) -> SlackResponse: + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.delete", json=kwargs) + + def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> SlackResponse: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.info", json=kwargs) + + def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.list", json=kwargs) + + def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> SlackResponse: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.update", json=kwargs) + + def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.update", json=kwargs) + def stars_add( self, *, @@ -10170,7 +10439,7 @@

                        Methods

                        https://docs.slack.dev/reference/methods/chat.postEphemeral

                        -def chat_postMessage(self,
                        *,
                        channel: str,
                        text: str | None = None,
                        as_user: bool | None = None,
                        attachments: str | Sequence[Dict | Attachment] | None = None,
                        blocks: str | Sequence[Dict | Block] | None = None,
                        thread_ts: str | None = None,
                        reply_broadcast: bool | None = None,
                        unfurl_links: bool | None = None,
                        unfurl_media: bool | None = None,
                        container_id: str | None = None,
                        icon_emoji: str | None = None,
                        icon_url: str | None = None,
                        mrkdwn: bool | None = None,
                        link_names: bool | None = None,
                        username: str | None = None,
                        parse: str | None = None,
                        metadata: Dict | Metadata | None = None,
                        markdown_text: str | None = None,
                        **kwargs) ‑> SlackResponse
                        +def chat_postMessage(self,
                        *,
                        channel: str,
                        text: str | None = None,
                        as_user: bool | None = None,
                        attachments: str | Sequence[Dict | Attachment] | None = None,
                        blocks: str | Sequence[Dict | Block] | None = None,
                        thread_ts: str | None = None,
                        reply_broadcast: bool | None = None,
                        unfurl_links: bool | None = None,
                        unfurl_media: bool | None = None,
                        container_id: str | None = None,
                        icon_emoji: str | None = None,
                        icon_url: str | None = None,
                        mrkdwn: bool | None = None,
                        link_names: bool | None = None,
                        username: str | None = None,
                        parse: str | None = None,
                        metadata: Dict | Metadata | EventAndEntityMetadata | None = None,
                        markdown_text: str | None = None,
                        **kwargs) ‑> SlackResponse
                        @@ -10196,7 +10465,7 @@

                        Methods

                        link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: @@ -10518,7 +10787,7 @@

                        Example

                        -def chat_unfurl(self,
                        *,
                        channel: str | None = None,
                        ts: str | None = None,
                        source: str | None = None,
                        unfurl_id: str | None = None,
                        unfurls: Dict[str, Dict] | None = None,
                        user_auth_blocks: str | Sequence[Dict | Block] | None = None,
                        user_auth_message: str | None = None,
                        user_auth_required: bool | None = None,
                        user_auth_url: str | None = None,
                        **kwargs) ‑> SlackResponse
                        +def chat_unfurl(self,
                        *,
                        channel: str | None = None,
                        ts: str | None = None,
                        source: str | None = None,
                        unfurl_id: str | None = None,
                        unfurls: Dict[str, Dict] | None = None,
                        metadata: Dict | EventAndEntityMetadata | None = None,
                        user_auth_blocks: str | Sequence[Dict | Block] | None = None,
                        user_auth_message: str | None = None,
                        user_auth_required: bool | None = None,
                        user_auth_url: str | None = None,
                        **kwargs) ‑> SlackResponse
                        @@ -10533,6 +10802,7 @@

                        Example

                        source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -10549,6 +10819,7 @@

                        Example

                        "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -11580,6 +11851,41 @@

                        Example

                        +
                        +def entity_presentDetails(self,
                        trigger_id: str,
                        metadata: Dict | EntityMetadata | None = None,
                        user_auth_required: bool | None = None,
                        user_auth_url: str | None = None,
                        error: Dict[str, Any] | None = None,
                        **kwargs) ‑> SlackResponse
                        +
                        +
                        +
                        + +Expand source code + +
                        def entity_presentDetails(
                        +    self,
                        +    trigger_id: str,
                        +    metadata: Optional[Union[Dict, EntityMetadata]] = None,
                        +    user_auth_required: Optional[bool] = None,
                        +    user_auth_url: Optional[str] = None,
                        +    error: Optional[Dict[str, Any]] = None,
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Provides entity details for the flexpane.
                        +    https://docs.slack.dev/reference/methods/entity.presentDetails/
                        +    """
                        +    kwargs.update({"trigger_id": trigger_id})
                        +    if metadata is not None:
                        +        kwargs.update({"metadata": metadata})
                        +    if user_auth_required is not None:
                        +        kwargs.update({"user_auth_required": user_auth_required})
                        +    if user_auth_url is not None:
                        +        kwargs.update({"user_auth_url": user_auth_url})
                        +    if error is not None:
                        +        kwargs.update({"error": error})
                        +    _parse_web_class_objects(kwargs)
                        +    return self.api_call("entity.presentDetails", json=kwargs)
                        +
                        +

                        Provides entity details for the flexpane. +https://docs.slack.dev/reference/methods/entity.presentDetails/

                        +
                        def files_comments_delete(self, *, file: str, id: str, **kwargs) ‑> SlackResponse
                        @@ -13555,6 +13861,381 @@

                        Example

                        Searches for messages matching a query. https://docs.slack.dev/reference/methods/search.messages

                        +
                        +def slackLists_access_delete(self,
                        *,
                        list_id: str,
                        channel_ids: List[str] | None = None,
                        user_ids: List[str] | None = None,
                        **kwargs) ‑> SlackResponse
                        +
                        +
                        +
                        + +Expand source code + +
                        def slackLists_access_delete(
                        +    self,
                        +    *,
                        +    list_id: str,
                        +    channel_ids: Optional[List[str]] = None,
                        +    user_ids: Optional[List[str]] = None,
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Revoke access to a List for specified entities.
                        +    https://docs.slack.dev/reference/methods/slackLists.access.delete
                        +    """
                        +    kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids})
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("slackLists.access.delete", json=kwargs)
                        +
                        +

                        Revoke access to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.delete

                        +
                        +
                        +def slackLists_access_set(self,
                        *,
                        list_id: str,
                        access_level: str,
                        channel_ids: List[str] | None = None,
                        user_ids: List[str] | None = None,
                        **kwargs) ‑> SlackResponse
                        +
                        +
                        +
                        + +Expand source code + +
                        def slackLists_access_set(
                        +    self,
                        +    *,
                        +    list_id: str,
                        +    access_level: str,
                        +    channel_ids: Optional[List[str]] = None,
                        +    user_ids: Optional[List[str]] = None,
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Set the access level to a List for specified entities.
                        +    https://docs.slack.dev/reference/methods/slackLists.access.set
                        +    """
                        +    kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids})
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("slackLists.access.set", json=kwargs)
                        +
                        +

                        Set the access level to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.set

                        +
                        +
                        +def slackLists_create(self,
                        *,
                        name: str,
                        description_blocks: str | Sequence[Dict | RichTextBlock] | None = None,
                        schema: List[Dict[str, Any]] | None = None,
                        copy_from_list_id: str | None = None,
                        include_copied_list_records: bool | None = None,
                        todo_mode: bool | None = None,
                        **kwargs) ‑> SlackResponse
                        +
                        +
                        +
                        + +Expand source code + +
                        def slackLists_create(
                        +    self,
                        +    *,
                        +    name: str,
                        +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
                        +    schema: Optional[List[Dict[str, Any]]] = None,
                        +    copy_from_list_id: Optional[str] = None,
                        +    include_copied_list_records: Optional[bool] = None,
                        +    todo_mode: Optional[bool] = None,
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Creates a List.
                        +    https://docs.slack.dev/reference/methods/slackLists.create
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "name": name,
                        +            "description_blocks": description_blocks,
                        +            "schema": schema,
                        +            "copy_from_list_id": copy_from_list_id,
                        +            "include_copied_list_records": include_copied_list_records,
                        +            "todo_mode": todo_mode,
                        +        }
                        +    )
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("slackLists.create", json=kwargs)
                        +
                        + +
                        +
                        +def slackLists_download_get(self, *, list_id: str, job_id: str, **kwargs) ‑> SlackResponse +
                        +
                        +
                        + +Expand source code + +
                        def slackLists_download_get(
                        +    self,
                        +    *,
                        +    list_id: str,
                        +    job_id: str,
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Retrieve List download URL from an export job to download List contents.
                        +    https://docs.slack.dev/reference/methods/slackLists.download.get
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "list_id": list_id,
                        +            "job_id": job_id,
                        +        }
                        +    )
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("slackLists.download.get", json=kwargs)
                        +
                        +

                        Retrieve List download URL from an export job to download List contents. +https://docs.slack.dev/reference/methods/slackLists.download.get

                        +
                        +
                        +def slackLists_download_start(self, *, list_id: str, include_archived: bool | None = None, **kwargs) ‑> SlackResponse +
                        +
                        +
                        + +Expand source code + +
                        def slackLists_download_start(
                        +    self,
                        +    *,
                        +    list_id: str,
                        +    include_archived: Optional[bool] = None,
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Initiate a job to export List contents.
                        +    https://docs.slack.dev/reference/methods/slackLists.download.start
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "list_id": list_id,
                        +            "include_archived": include_archived,
                        +        }
                        +    )
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("slackLists.download.start", json=kwargs)
                        +
                        + +
                        +
                        +def slackLists_items_create(self,
                        *,
                        list_id: str,
                        duplicated_item_id: str | None = None,
                        parent_item_id: str | None = None,
                        initial_fields: List[Dict[str, Any]] | None = None,
                        **kwargs) ‑> SlackResponse
                        +
                        +
                        +
                        + +Expand source code + +
                        def slackLists_items_create(
                        +    self,
                        +    *,
                        +    list_id: str,
                        +    duplicated_item_id: Optional[str] = None,
                        +    parent_item_id: Optional[str] = None,
                        +    initial_fields: Optional[List[Dict[str, Any]]] = None,
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Add a new item to an existing List.
                        +    https://docs.slack.dev/reference/methods/slackLists.items.create
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "list_id": list_id,
                        +            "duplicated_item_id": duplicated_item_id,
                        +            "parent_item_id": parent_item_id,
                        +            "initial_fields": initial_fields,
                        +        }
                        +    )
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("slackLists.items.create", json=kwargs)
                        +
                        + +
                        +
                        +def slackLists_items_delete(self, *, list_id: str, id: str, **kwargs) ‑> SlackResponse +
                        +
                        +
                        + +Expand source code + +
                        def slackLists_items_delete(
                        +    self,
                        +    *,
                        +    list_id: str,
                        +    id: str,
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Deletes an item from an existing List.
                        +    https://docs.slack.dev/reference/methods/slackLists.items.delete
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "list_id": list_id,
                        +            "id": id,
                        +        }
                        +    )
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("slackLists.items.delete", json=kwargs)
                        +
                        + +
                        +
                        +def slackLists_items_deleteMultiple(self, *, list_id: str, ids: List[str], **kwargs) ‑> SlackResponse +
                        +
                        +
                        + +Expand source code + +
                        def slackLists_items_deleteMultiple(
                        +    self,
                        +    *,
                        +    list_id: str,
                        +    ids: List[str],
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Deletes multiple items from an existing List.
                        +    https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "list_id": list_id,
                        +            "ids": ids,
                        +        }
                        +    )
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("slackLists.items.deleteMultiple", json=kwargs)
                        +
                        + +
                        +
                        +def slackLists_items_info(self, *, list_id: str, id: str, include_is_subscribed: bool | None = None, **kwargs) ‑> SlackResponse +
                        +
                        +
                        + +Expand source code + +
                        def slackLists_items_info(
                        +    self,
                        +    *,
                        +    list_id: str,
                        +    id: str,
                        +    include_is_subscribed: Optional[bool] = None,
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Get a row from a List.
                        +    https://docs.slack.dev/reference/methods/slackLists.items.info
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "list_id": list_id,
                        +            "id": id,
                        +            "include_is_subscribed": include_is_subscribed,
                        +        }
                        +    )
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("slackLists.items.info", json=kwargs)
                        +
                        + +
                        +
                        +def slackLists_items_list(self,
                        *,
                        list_id: str,
                        limit: int | None = None,
                        cursor: str | None = None,
                        archived: bool | None = None,
                        **kwargs) ‑> SlackResponse
                        +
                        +
                        +
                        + +Expand source code + +
                        def slackLists_items_list(
                        +    self,
                        +    *,
                        +    list_id: str,
                        +    limit: Optional[int] = None,
                        +    cursor: Optional[str] = None,
                        +    archived: Optional[bool] = None,
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Get records from a List.
                        +    https://docs.slack.dev/reference/methods/slackLists.items.list
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "list_id": list_id,
                        +            "limit": limit,
                        +            "cursor": cursor,
                        +            "archived": archived,
                        +        }
                        +    )
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("slackLists.items.list", json=kwargs)
                        +
                        + +
                        +
                        +def slackLists_items_update(self, *, list_id: str, cells: List[Dict[str, Any]], **kwargs) ‑> SlackResponse +
                        +
                        +
                        + +Expand source code + +
                        def slackLists_items_update(
                        +    self,
                        +    *,
                        +    list_id: str,
                        +    cells: List[Dict[str, Any]],
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Updates cells in a List.
                        +    https://docs.slack.dev/reference/methods/slackLists.items.update
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "list_id": list_id,
                        +            "cells": cells,
                        +        }
                        +    )
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("slackLists.items.update", json=kwargs)
                        +
                        + +
                        +
                        +def slackLists_update(self,
                        *,
                        id: str,
                        name: str | None = None,
                        description_blocks: str | Sequence[Dict | RichTextBlock] | None = None,
                        todo_mode: bool | None = None,
                        **kwargs) ‑> SlackResponse
                        +
                        +
                        +
                        + +Expand source code + +
                        def slackLists_update(
                        +    self,
                        +    *,
                        +    id: str,
                        +    name: Optional[str] = None,
                        +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
                        +    todo_mode: Optional[bool] = None,
                        +    **kwargs,
                        +) -> SlackResponse:
                        +    """Update a List.
                        +    https://docs.slack.dev/reference/methods/slackLists.update
                        +    """
                        +    kwargs.update(
                        +        {
                        +            "id": id,
                        +            "name": name,
                        +            "description_blocks": description_blocks,
                        +            "todo_mode": todo_mode,
                        +        }
                        +    )
                        +    kwargs = _remove_none_values(kwargs)
                        +    return self.api_call("slackLists.update", json=kwargs)
                        +
                        + +
                        def stars_add(self,
                        *,
                        channel: str | None = None,
                        file: str | None = None,
                        file_comment: str | None = None,
                        timestamp: str | None = None,
                        **kwargs) ‑> SlackResponse
                        @@ -15532,6 +16213,7 @@

                        WebClientdnd_setSnooze
                      • dnd_teamInfo
                      • emoji_list
                      • +
                      • entity_presentDetails
                      • files_comments_delete
                      • files_completeUploadExternal
                      • files_delete
                      • @@ -15601,6 +16283,18 @@

                        WebClientsearch_all
                      • search_files
                      • search_messages
                      • +
                      • slackLists_access_delete
                      • +
                      • slackLists_access_set
                      • +
                      • slackLists_create
                      • +
                      • slackLists_download_get
                      • +
                      • slackLists_download_start
                      • +
                      • slackLists_items_create
                      • +
                      • slackLists_items_delete
                      • +
                      • slackLists_items_deleteMultiple
                      • +
                      • slackLists_items_info
                      • +
                      • slackLists_items_list
                      • +
                      • slackLists_items_update
                      • +
                      • slackLists_update
                      • stars_add
                      • stars_list
                      • stars_remove
                      • diff --git a/docs/reference/models/basic_objects.html b/docs/reference/models/basic_objects.html index 972273cc9..193200f84 100644 --- a/docs/reference/models/basic_objects.html +++ b/docs/reference/models/basic_objects.html @@ -119,6 +119,9 @@

                        Ancestors

                        if callable(method) and hasattr(method, "validator"): method() + def get_object_attribute(self, key: str): + return getattr(self, key, None) + def get_non_null_attributes(self) -> dict: """ Construct a dictionary out of non-null keys (from attributes property) @@ -136,7 +139,7 @@

                        Ancestors

                        return value def is_not_empty(self, key: str) -> bool: - value = getattr(self, key, None) + value = self.get_object_attribute(key) if value is None: return False @@ -154,7 +157,9 @@

                        Ancestors

                        return value is not None return { - key: to_dict_compatible(getattr(self, key, None)) for key in sorted(self.attributes) if is_not_empty(self, key) + key: to_dict_compatible(value=self.get_object_attribute(key)) + for key in sorted(self.attributes) + if is_not_empty(self, key) } def to_dict(self, *args) -> dict: @@ -208,7 +213,40 @@

                        Subclasses

                      • DialogBuilder
                      • DialogTextComponent
                      • Message
                      • +
                      • ContentItemEntityFields
                      • +
                      • EntityActionButton
                      • +
                      • EntityActionProcessingState
                      • +
                      • EntityActions
                      • +
                      • EntityArrayItemField
                      • +
                      • EntityAttributes
                      • +
                      • EntityBooleanCheckboxField
                      • +
                      • EntityBooleanTextField
                      • +
                      • EntityCustomField
                      • +
                      • EntityEditNumberConfig
                      • +
                      • EntityEditSelectConfig
                      • +
                      • EntityEditSupport
                      • +
                      • EntityEditTextConfig
                      • +
                      • EntityFullSizePreview
                      • +
                      • EntityFullSizePreviewError
                      • +
                      • EntityIconField
                      • +
                      • EntityIconSlackFile
                      • +
                      • EntityImageField
                      • +
                      • EntityMetadata
                      • +
                      • EntityPayload
                      • +
                      • EntityRefField
                      • +
                      • EntityStringField
                      • +
                      • EntityTimestampField
                      • +
                      • EntityTitle
                      • +
                      • EntityTypedField
                      • +
                      • EntityUserField
                      • +
                      • EntityUserIDField
                      • +
                      • EventAndEntityMetadata
                      • +
                      • ExternalRef
                      • +
                      • FileEntityFields
                      • +
                      • FileEntitySlackFile
                      • +
                      • IncidentEntityFields
                      • Metadata
                      • +
                      • TaskEntityFields
                      • View
                      • ViewState
                      • ViewStateValue
                      • @@ -257,7 +295,7 @@

                        Methods

                        return value def is_not_empty(self, key: str) -> bool: - value = getattr(self, key, None) + value = self.get_object_attribute(key) if value is None: return False @@ -275,12 +313,27 @@

                        Methods

                        return value is not None return { - key: to_dict_compatible(getattr(self, key, None)) for key in sorted(self.attributes) if is_not_empty(self, key) + key: to_dict_compatible(value=self.get_object_attribute(key)) + for key in sorted(self.attributes) + if is_not_empty(self, key) }

                        Construct a dictionary out of non-null keys (from attributes property) present on this object

                        +
                        +def get_object_attribute(self, key: str) +
                        +
                        +
                        + +Expand source code + +
                        def get_object_attribute(self, key: str):
                        +    return getattr(self, key, None)
                        +
                        +
                        +
                        def to_dict(self, *args) ‑> dict
                        @@ -401,6 +454,7 @@

                      • attributes
                      • get_non_null_attributes
                      • +
                      • get_object_attribute
                      • to_dict
                      • validate_json
                      diff --git a/docs/reference/models/blocks/basic_components.html b/docs/reference/models/blocks/basic_components.html index 09ba7e190..2821b6a4b 100644 --- a/docs/reference/models/blocks/basic_components.html +++ b/docs/reference/models/blocks/basic_components.html @@ -1248,6 +1248,130 @@

                      Inherited members

                    +
                    +class RawTextObject +(*, text: str) +
                    +
                    +
                    + +Expand source code + +
                    class RawTextObject(TextObject):
                    +    """raw_text typed text object"""
                    +
                    +    type = "raw_text"
                    +
                    +    @property
                    +    def attributes(self) -> Set[str]:  # type: ignore[override]
                    +        return {"text", "type"}
                    +
                    +    def __init__(self, *, text: str):
                    +        """A raw text object used in table block cells.
                    +        https://docs.slack.dev/reference/block-kit/composition-objects/text-object/
                    +        https://docs.slack.dev/reference/block-kit/blocks/table-block
                    +
                    +        Args:
                    +            text (required): The text content for the table block cell.
                    +        """
                    +        super().__init__(text=text, type=self.type)
                    +
                    +    @staticmethod
                    +    def from_str(text: str) -> "RawTextObject":
                    +        """Transforms a string into a RawTextObject"""
                    +        return RawTextObject(text=text)
                    +
                    +    @staticmethod
                    +    def direct_from_string(text: str) -> Dict[str, Any]:
                    +        """Transforms a string into the required object shape to act as a RawTextObject"""
                    +        return RawTextObject.from_str(text).to_dict()
                    +
                    +    @JsonValidator("text attribute must have at least 1 character")
                    +    def _validate_text_min_length(self):
                    +        return len(self.text) >= 1
                    +
                    +

                    raw_text typed text object

                    +

                    A raw text object used in table block cells. +https://docs.slack.dev/reference/block-kit/composition-objects/text-object/ +https://docs.slack.dev/reference/block-kit/blocks/table-block

                    +

                    Args

                    +
                    +
                    text : required
                    +
                    The text content for the table block cell.
                    +
                    +

                    Ancestors

                    + +

                    Class variables

                    +
                    +
                    var type
                    +
                    +

                    The type of the None singleton.

                    +
                    +
                    +

                    Static methods

                    +
                    +
                    +def direct_from_string(text: str) ‑> Dict[str, Any] +
                    +
                    +
                    + +Expand source code + +
                    @staticmethod
                    +def direct_from_string(text: str) -> Dict[str, Any]:
                    +    """Transforms a string into the required object shape to act as a RawTextObject"""
                    +    return RawTextObject.from_str(text).to_dict()
                    +
                    +

                    Transforms a string into the required object shape to act as a RawTextObject

                    +
                    +
                    +def from_str(text: str) ‑> RawTextObject +
                    +
                    +
                    + +Expand source code + +
                    @staticmethod
                    +def from_str(text: str) -> "RawTextObject":
                    +    """Transforms a string into a RawTextObject"""
                    +    return RawTextObject(text=text)
                    +
                    +

                    Transforms a string into a RawTextObject

                    +
                    +
                    +

                    Instance variables

                    +
                    +
                    prop attributes : Set[str]
                    +
                    +
                    + +Expand source code + +
                    @property
                    +def attributes(self) -> Set[str]:  # type: ignore[override]
                    +    return {"text", "type"}
                    +
                    +

                    Build an unordered collection of unique elements.

                    +
                    +
                    +

                    Inherited members

                    + +
                    class SlackFile (*, id: str | None = None, url: str | None = None) @@ -1396,6 +1520,7 @@

                    Subclasses

                    Class variables

                    @@ -1633,6 +1758,15 @@

                  • +

                    RawTextObject

                    + +
                  • +
                  • SlackFile

                    • attributes
                    • diff --git a/docs/reference/models/blocks/blocks.html b/docs/reference/models/blocks/blocks.html index f266b5cad..722d12164 100644 --- a/docs/reference/models/blocks/blocks.html +++ b/docs/reference/models/blocks/blocks.html @@ -236,6 +236,8 @@

                      Inherited members

                      return VideoBlock(**block) elif type == RichTextBlock.type: return RichTextBlock(**block) + elif type == TableBlock.type: + return TableBlock(**block) else: cls.logger.warning(f"Unknown block detected and skipped ({block})") return None @@ -269,6 +271,7 @@

                      Subclasses

                    • MarkdownBlock
                    • RichTextBlock
                    • SectionBlock
                    • +
                    • TableBlock
                    • VideoBlock

                    Class variables

                    @@ -1580,6 +1583,123 @@

                    Inherited members

                  +
                  +class TableBlock +(*,
                  rows: Sequence[Sequence[Dict[str, Any]]],
                  column_settings: Sequence[Dict[str, Any] | None] | None = None,
                  block_id: str | None = None,
                  **others: dict)
                  +
                  +
                  +
                  + +Expand source code + +
                  class TableBlock(Block):
                  +    type = "table"
                  +
                  +    @property
                  +    def attributes(self) -> Set[str]:  # type: ignore[override]
                  +        return super().attributes.union({"rows", "column_settings"})
                  +
                  +    def __init__(
                  +        self,
                  +        *,
                  +        rows: Sequence[Sequence[Dict[str, Any]]],
                  +        column_settings: Optional[Sequence[Optional[Dict[str, Any]]]] = None,
                  +        block_id: Optional[str] = None,
                  +        **others: dict,
                  +    ):
                  +        """Displays structured information in a table.
                  +        https://docs.slack.dev/reference/block-kit/blocks/table-block
                  +
                  +        Args:
                  +            rows (required): An array consisting of table rows. Maximum 100 rows.
                  +                Each row object is an array with a max of 20 table cells.
                  +                Table cells can have a type of raw_text or rich_text.
                  +            column_settings: An array describing column behavior. If there are fewer items in the column_settings array
                  +                than there are columns in the table, then the items in the the column_settings array will describe
                  +                the same number of columns in the table as there are in the array itself.
                  +                Any additional columns will have the default behavior. Maximum 20 items.
                  +                See below for column settings schema.
                  +            block_id: A unique identifier for a block. If not specified, a block_id will be generated.
                  +                You can use this block_id when you receive an interaction payload to identify the source of the action.
                  +                Maximum length for this field is 255 characters.
                  +                block_id should be unique for each message and each iteration of a message.
                  +                If a message is updated, use a new block_id.
                  +        """
                  +        super().__init__(type=self.type, block_id=block_id)
                  +        show_unknown_key_warning(self, others)
                  +
                  +        self.rows = rows
                  +        self.column_settings = column_settings
                  +
                  +    @JsonValidator("rows attribute must be specified")
                  +    def _validate_rows(self):
                  +        return self.rows is not None and len(self.rows) > 0
                  +
                  +

                  Blocks are a series of components that can be combined +to create visually rich and compellingly interactive messages. +https://docs.slack.dev/reference/block-kit/blocks

                  +

                  Displays structured information in a table. +https://docs.slack.dev/reference/block-kit/blocks/table-block

                  +

                  Args

                  +
                  +
                  rows : required
                  +
                  An array consisting of table rows. Maximum 100 rows. +Each row object is an array with a max of 20 table cells. +Table cells can have a type of raw_text or rich_text.
                  +
                  column_settings
                  +
                  An array describing column behavior. If there are fewer items in the column_settings array +than there are columns in the table, then the items in the the column_settings array will describe +the same number of columns in the table as there are in the array itself. +Any additional columns will have the default behavior. Maximum 20 items. +See below for column settings schema.
                  +
                  block_id
                  +
                  A unique identifier for a block. If not specified, a block_id will be generated. +You can use this block_id when you receive an interaction payload to identify the source of the action. +Maximum length for this field is 255 characters. +block_id should be unique for each message and each iteration of a message. +If a message is updated, use a new block_id.
                  +
                  +

                  Ancestors

                  + +

                  Class variables

                  +
                  +
                  var type
                  +
                  +

                  The type of the None singleton.

                  +
                  +
                  +

                  Instance variables

                  +
                  +
                  prop attributes : Set[str]
                  +
                  +
                  + +Expand source code + +
                  @property
                  +def attributes(self) -> Set[str]:  # type: ignore[override]
                  +    return super().attributes.union({"rows", "column_settings"})
                  +
                  +

                  Build an unordered collection of unique elements.

                  +
                  +
                  +

                  Inherited members

                  + +
                  class VideoBlock (*,
                  block_id: str | None = None,
                  alt_text: str | None = None,
                  video_url: str | None = None,
                  thumbnail_url: str | None = None,
                  title: str | dict | PlainTextObject | None = None,
                  title_url: str | None = None,
                  description: str | dict | PlainTextObject | None = None,
                  provider_icon_url: str | None = None,
                  provider_name: str | None = None,
                  author_name: str | None = None,
                  **others: dict)
                  @@ -1904,6 +2024,13 @@

                  TableBlock

                  + +
                • +
                • VideoBlock

                  • attributes
                  • diff --git a/docs/reference/models/blocks/index.html b/docs/reference/models/blocks/index.html index 182ab927a..0d2047c12 100644 --- a/docs/reference/models/blocks/index.html +++ b/docs/reference/models/blocks/index.html @@ -258,6 +258,8 @@

                    Inherited members

                    return VideoBlock(**block) elif type == RichTextBlock.type: return RichTextBlock(**block) + elif type == TableBlock.type: + return TableBlock(**block) else: cls.logger.warning(f"Unknown block detected and skipped ({block})") return None @@ -291,6 +293,7 @@

                    Subclasses

                  • MarkdownBlock
                  • RichTextBlock
                  • SectionBlock
                  • +
                  • TableBlock
                  • VideoBlock

                  Class variables

                  @@ -5462,6 +5465,130 @@

                  Inherited members

                +
                +class RawTextObject +(*, text: str) +
                +
                +
                + +Expand source code + +
                class RawTextObject(TextObject):
                +    """raw_text typed text object"""
                +
                +    type = "raw_text"
                +
                +    @property
                +    def attributes(self) -> Set[str]:  # type: ignore[override]
                +        return {"text", "type"}
                +
                +    def __init__(self, *, text: str):
                +        """A raw text object used in table block cells.
                +        https://docs.slack.dev/reference/block-kit/composition-objects/text-object/
                +        https://docs.slack.dev/reference/block-kit/blocks/table-block
                +
                +        Args:
                +            text (required): The text content for the table block cell.
                +        """
                +        super().__init__(text=text, type=self.type)
                +
                +    @staticmethod
                +    def from_str(text: str) -> "RawTextObject":
                +        """Transforms a string into a RawTextObject"""
                +        return RawTextObject(text=text)
                +
                +    @staticmethod
                +    def direct_from_string(text: str) -> Dict[str, Any]:
                +        """Transforms a string into the required object shape to act as a RawTextObject"""
                +        return RawTextObject.from_str(text).to_dict()
                +
                +    @JsonValidator("text attribute must have at least 1 character")
                +    def _validate_text_min_length(self):
                +        return len(self.text) >= 1
                +
                +

                raw_text typed text object

                +

                A raw text object used in table block cells. +https://docs.slack.dev/reference/block-kit/composition-objects/text-object/ +https://docs.slack.dev/reference/block-kit/blocks/table-block

                +

                Args

                +
                +
                text : required
                +
                The text content for the table block cell.
                +
                +

                Ancestors

                + +

                Class variables

                +
                +
                var type
                +
                +

                The type of the None singleton.

                +
                +
                +

                Static methods

                +
                +
                +def direct_from_string(text: str) ‑> Dict[str, Any] +
                +
                +
                + +Expand source code + +
                @staticmethod
                +def direct_from_string(text: str) -> Dict[str, Any]:
                +    """Transforms a string into the required object shape to act as a RawTextObject"""
                +    return RawTextObject.from_str(text).to_dict()
                +
                +

                Transforms a string into the required object shape to act as a RawTextObject

                +
                +
                +def from_str(text: str) ‑> RawTextObject +
                +
                +
                + +Expand source code + +
                @staticmethod
                +def from_str(text: str) -> "RawTextObject":
                +    """Transforms a string into a RawTextObject"""
                +    return RawTextObject(text=text)
                +
                +

                Transforms a string into a RawTextObject

                +
                +
                +

                Instance variables

                +
                +
                prop attributes : Set[str]
                +
                +
                + +Expand source code + +
                @property
                +def attributes(self) -> Set[str]:  # type: ignore[override]
                +    return {"text", "type"}
                +
                +

                Build an unordered collection of unique elements.

                +
                +
                +

                Inherited members

                + +
                class RichTextBlock (*,
                elements: Sequence[dict | RichTextElement],
                block_id: str | None = None,
                **others: dict)
                @@ -6952,6 +7079,123 @@

                Inherited members

              +
              +class TableBlock +(*,
              rows: Sequence[Sequence[Dict[str, Any]]],
              column_settings: Sequence[Dict[str, Any] | None] | None = None,
              block_id: str | None = None,
              **others: dict)
              +
              +
              +
              + +Expand source code + +
              class TableBlock(Block):
              +    type = "table"
              +
              +    @property
              +    def attributes(self) -> Set[str]:  # type: ignore[override]
              +        return super().attributes.union({"rows", "column_settings"})
              +
              +    def __init__(
              +        self,
              +        *,
              +        rows: Sequence[Sequence[Dict[str, Any]]],
              +        column_settings: Optional[Sequence[Optional[Dict[str, Any]]]] = None,
              +        block_id: Optional[str] = None,
              +        **others: dict,
              +    ):
              +        """Displays structured information in a table.
              +        https://docs.slack.dev/reference/block-kit/blocks/table-block
              +
              +        Args:
              +            rows (required): An array consisting of table rows. Maximum 100 rows.
              +                Each row object is an array with a max of 20 table cells.
              +                Table cells can have a type of raw_text or rich_text.
              +            column_settings: An array describing column behavior. If there are fewer items in the column_settings array
              +                than there are columns in the table, then the items in the the column_settings array will describe
              +                the same number of columns in the table as there are in the array itself.
              +                Any additional columns will have the default behavior. Maximum 20 items.
              +                See below for column settings schema.
              +            block_id: A unique identifier for a block. If not specified, a block_id will be generated.
              +                You can use this block_id when you receive an interaction payload to identify the source of the action.
              +                Maximum length for this field is 255 characters.
              +                block_id should be unique for each message and each iteration of a message.
              +                If a message is updated, use a new block_id.
              +        """
              +        super().__init__(type=self.type, block_id=block_id)
              +        show_unknown_key_warning(self, others)
              +
              +        self.rows = rows
              +        self.column_settings = column_settings
              +
              +    @JsonValidator("rows attribute must be specified")
              +    def _validate_rows(self):
              +        return self.rows is not None and len(self.rows) > 0
              +
              +

              Blocks are a series of components that can be combined +to create visually rich and compellingly interactive messages. +https://docs.slack.dev/reference/block-kit/blocks

              +

              Displays structured information in a table. +https://docs.slack.dev/reference/block-kit/blocks/table-block

              +

              Args

              +
              +
              rows : required
              +
              An array consisting of table rows. Maximum 100 rows. +Each row object is an array with a max of 20 table cells. +Table cells can have a type of raw_text or rich_text.
              +
              column_settings
              +
              An array describing column behavior. If there are fewer items in the column_settings array +than there are columns in the table, then the items in the the column_settings array will describe +the same number of columns in the table as there are in the array itself. +Any additional columns will have the default behavior. Maximum 20 items. +See below for column settings schema.
              +
              block_id
              +
              A unique identifier for a block. If not specified, a block_id will be generated. +You can use this block_id when you receive an interaction payload to identify the source of the action. +Maximum length for this field is 255 characters. +block_id should be unique for each message and each iteration of a message. +If a message is updated, use a new block_id.
              +
              +

              Ancestors

              + +

              Class variables

              +
              +
              var type
              +
              +

              The type of the None singleton.

              +
              +
              +

              Instance variables

              +
              +
              prop attributes : Set[str]
              +
              +
              + +Expand source code + +
              @property
              +def attributes(self) -> Set[str]:  # type: ignore[override]
              +    return super().attributes.union({"rows", "column_settings"})
              +
              +

              Build an unordered collection of unique elements.

              +
              +
              +

              Inherited members

              + +
              class TextObject (text: str,
              type: str | None = None,
              subtype: str | None = None,
              emoji: bool | None = None,
              **kwargs)
              @@ -7030,6 +7274,7 @@

              Subclasses

              Class variables

              @@ -8151,6 +8396,15 @@

              RawTextObject

              + +
            • +
            • RichTextBlock

              • attributes
              • @@ -8248,6 +8502,13 @@

                TableBlock

                + + +
              • TextObject

                diff --git a/docs/reference/models/metadata/index.html b/docs/reference/models/metadata/index.html index 14663e790..1c4d7a69c 100644 --- a/docs/reference/models/metadata/index.html +++ b/docs/reference/models/metadata/index.html @@ -40,12 +40,2270 @@

                Module slack_sdk.models.metadata

                +

                Global variables

                +
                +
                var EntityType
                +
                +

                Custom field types

                +
                +

                Classes

                +
                +class ContentItemEntityFields +(preview: Dict[str, Any] | EntityImageField | None = None,
                description: Dict[str, Any] | EntityStringField | None = None,
                created_by: Dict[str, Any] | EntityTypedField | None = None,
                date_created: Dict[str, Any] | EntityTimestampField | None = None,
                date_updated: Dict[str, Any] | EntityTimestampField | None = None,
                last_modified_by: Dict[str, Any] | EntityTypedField | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class ContentItemEntityFields(JsonObject):
                +    """Fields specific to content item entities"""
                +
                +    attributes = {
                +        "preview",
                +        "description",
                +        "created_by",
                +        "date_created",
                +        "date_updated",
                +        "last_modified_by",
                +    }
                +
                +    def __init__(
                +        self,
                +        preview: Optional[Union[Dict[str, Any], EntityImageField]] = None,
                +        description: Optional[Union[Dict[str, Any], EntityStringField]] = None,
                +        created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
                +        date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
                +        date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
                +        last_modified_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
                +        **kwargs,
                +    ):
                +        self.preview = preview
                +        self.description = description
                +        self.created_by = created_by
                +        self.date_created = date_created
                +        self.date_updated = date_updated
                +        self.last_modified_by = last_modified_by
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Fields specific to content item entities

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityActionButton +(text: str,
                action_id: str,
                value: str | None = None,
                style: str | None = None,
                url: str | None = None,
                accessibility_label: str | None = None,
                processing_state: Dict[str, Any] | EntityActionProcessingState | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityActionButton(JsonObject):
                +    """Action button for entity"""
                +
                +    attributes = {
                +        "text",
                +        "action_id",
                +        "value",
                +        "style",
                +        "url",
                +        "accessibility_label",
                +        "processing_state",
                +    }
                +
                +    def __init__(
                +        self,
                +        text: str,
                +        action_id: str,
                +        value: Optional[str] = None,
                +        style: Optional[str] = None,
                +        url: Optional[str] = None,
                +        accessibility_label: Optional[str] = None,
                +        processing_state: Optional[Union[Dict[str, Any], EntityActionProcessingState]] = None,
                +        **kwargs,
                +    ):
                +        self.text = text
                +        self.action_id = action_id
                +        self.value = value
                +        self.style = style
                +        self.url = url
                +        self.accessibility_label = accessibility_label
                +        self.processing_state = processing_state
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Action button for entity

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityActionProcessingState +(enabled: bool, interstitial_text: str | None = None, **kwargs) +
                +
                +
                + +Expand source code + +
                class EntityActionProcessingState(JsonObject):
                +    """Processing state configuration for entity action button"""
                +
                +    attributes = {
                +        "enabled",
                +        "interstitial_text",
                +    }
                +
                +    def __init__(
                +        self,
                +        enabled: bool,
                +        interstitial_text: Optional[str] = None,
                +        **kwargs,
                +    ):
                +        self.enabled = enabled
                +        self.interstitial_text = interstitial_text
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Processing state configuration for entity action button

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityActions +(primary_actions: List[Dict[str, Any] | EntityActionButton] | None = None,
                overflow_actions: List[Dict[str, Any] | EntityActionButton] | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityActions(JsonObject):
                +    """Actions configuration for entity"""
                +
                +    attributes = {
                +        "primary_actions",
                +        "overflow_actions",
                +    }
                +
                +    def __init__(
                +        self,
                +        primary_actions: Optional[List[Union[Dict[str, Any], EntityActionButton]]] = None,
                +        overflow_actions: Optional[List[Union[Dict[str, Any], EntityActionButton]]] = None,
                +        **kwargs,
                +    ):
                +        self.primary_actions = primary_actions
                +        self.overflow_actions = overflow_actions
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Actions configuration for entity

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityArrayItemField +(type: str | None = None,
                label: str | None = None,
                value: str | int | None = None,
                link: str | None = None,
                icon: Dict[str, Any] | EntityIconField | None = None,
                long: bool | None = None,
                format: str | None = None,
                image_url: str | None = None,
                slack_file: Dict[str, Any] | None = None,
                alt_text: str | None = None,
                edit: Dict[str, Any] | EntityEditSupport | None = None,
                tag_color: str | None = None,
                user: Dict[str, Any] | EntityUserIDField | EntityUserField | None = None,
                entity_ref: Dict[str, Any] | EntityRefField | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityArrayItemField(JsonObject):
                +    """Array item field for entity (similar to EntityTypedField but with optional type)"""
                +
                +    attributes = {
                +        "type",
                +        "label",
                +        "value",
                +        "link",
                +        "icon",
                +        "long",
                +        "format",
                +        "image_url",
                +        "slack_file",
                +        "alt_text",
                +        "edit",
                +        "tag_color",
                +        "user",
                +        "entity_ref",
                +    }
                +
                +    def __init__(
                +        self,
                +        type: Optional[str] = None,
                +        label: Optional[str] = None,
                +        value: Optional[Union[str, int]] = None,
                +        link: Optional[str] = None,
                +        icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
                +        long: Optional[bool] = None,
                +        format: Optional[str] = None,
                +        image_url: Optional[str] = None,
                +        slack_file: Optional[Dict[str, Any]] = None,
                +        alt_text: Optional[str] = None,
                +        edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None,
                +        tag_color: Optional[str] = None,
                +        user: Optional[Union[Dict[str, Any], EntityUserIDField, EntityUserField]] = None,
                +        entity_ref: Optional[Union[Dict[str, Any], EntityRefField]] = None,
                +        **kwargs,
                +    ):
                +        self.type = type
                +        self.label = label
                +        self.value = value
                +        self.link = link
                +        self.icon = icon
                +        self.long = long
                +        self.format = format
                +        self.image_url = image_url
                +        self.slack_file = slack_file
                +        self.alt_text = alt_text
                +        self.edit = edit
                +        self.tag_color = tag_color
                +        self.user = user
                +        self.entity_ref = entity_ref
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Array item field for entity (similar to EntityTypedField but with optional type)

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityAttributes +(title: Dict[str, Any] | EntityTitle,
                display_type: str | None = None,
                display_id: str | None = None,
                product_icon: Dict[str, Any] | EntityIconField | None = None,
                product_name: str | None = None,
                locale: str | None = None,
                full_size_preview: Dict[str, Any] | EntityFullSizePreview | None = None,
                metadata_last_modified: int | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityAttributes(JsonObject):
                +    """Attributes for an entity"""
                +
                +    attributes = {
                +        "title",
                +        "display_type",
                +        "display_id",
                +        "product_icon",
                +        "product_name",
                +        "locale",
                +        "full_size_preview",
                +        "metadata_last_modified",
                +    }
                +
                +    def __init__(
                +        self,
                +        title: Union[Dict[str, Any], EntityTitle],
                +        display_type: Optional[str] = None,
                +        display_id: Optional[str] = None,
                +        product_icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
                +        product_name: Optional[str] = None,
                +        locale: Optional[str] = None,
                +        full_size_preview: Optional[Union[Dict[str, Any], EntityFullSizePreview]] = None,
                +        metadata_last_modified: Optional[int] = None,
                +        **kwargs,
                +    ):
                +        self.title = title
                +        self.display_type = display_type
                +        self.display_id = display_id
                +        self.product_icon = product_icon
                +        self.product_name = product_name
                +        self.locale = locale
                +        self.full_size_preview = full_size_preview
                +        self.metadata_last_modified = metadata_last_modified
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Attributes for an entity

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityBooleanCheckboxField +(type: str, text: str, description: str | None, **kwargs) +
                +
                +
                + +Expand source code + +
                class EntityBooleanCheckboxField(JsonObject):
                +    """Boolean checkbox properties"""
                +
                +    attributes = {"type", "text", "description"}
                +
                +    def __init__(
                +        self,
                +        type: str,
                +        text: str,
                +        description: Optional[str],
                +        **kwargs,
                +    ):
                +        self.type = type
                +        self.text = text
                +        self.description = description
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Boolean checkbox properties

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityBooleanTextField +(type: str,
                true_text: str,
                false_text: str,
                true_description: str | None,
                false_description: str | None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityBooleanTextField(JsonObject):
                +    """Boolean text properties"""
                +
                +    attributes = {"type", "true_text", "false_text", "true_description", "false_description"}
                +
                +    def __init__(
                +        self,
                +        type: str,
                +        true_text: str,
                +        false_text: str,
                +        true_description: Optional[str],
                +        false_description: Optional[str],
                +        **kwargs,
                +    ):
                +        self.type = type
                +        self.true_text = (true_text,)
                +        self.false_text = (false_text,)
                +        self.true_description = (true_description,)
                +        self.false_description = (false_description,)
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Boolean text properties

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityCustomField +(label: str,
                key: str,
                type: str,
                value: str | int | List[Dict[str, Any] | EntityArrayItemField] | None = None,
                link: str | None = None,
                icon: Dict[str, Any] | EntityIconField | None = None,
                long: bool | None = None,
                format: str | None = None,
                image_url: str | None = None,
                slack_file: Dict[str, Any] | None = None,
                alt_text: str | None = None,
                tag_color: str | None = None,
                edit: Dict[str, Any] | EntityEditSupport | None = None,
                item_type: str | None = None,
                user: Dict[str, Any] | EntityUserIDField | EntityUserField | None = None,
                entity_ref: Dict[str, Any] | EntityRefField | None = None,
                boolean: Dict[str, Any] | EntityBooleanCheckboxField | EntityBooleanTextField | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityCustomField(JsonObject):
                +    """Custom field for entity with flexible types"""
                +
                +    attributes = {
                +        "label",
                +        "key",
                +        "type",
                +        "value",
                +        "link",
                +        "icon",
                +        "long",
                +        "format",
                +        "image_url",
                +        "slack_file",
                +        "alt_text",
                +        "tag_color",
                +        "edit",
                +        "item_type",
                +        "user",
                +        "entity_ref",
                +        "boolean",
                +    }
                +
                +    def __init__(
                +        self,
                +        label: str,
                +        key: str,
                +        type: str,
                +        value: Optional[Union[str, int, List[Union[Dict[str, Any], EntityArrayItemField]]]] = None,
                +        link: Optional[str] = None,
                +        icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
                +        long: Optional[bool] = None,
                +        format: Optional[str] = None,
                +        image_url: Optional[str] = None,
                +        slack_file: Optional[Dict[str, Any]] = None,
                +        alt_text: Optional[str] = None,
                +        tag_color: Optional[str] = None,
                +        edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None,
                +        item_type: Optional[str] = None,
                +        user: Optional[Union[Dict[str, Any], EntityUserIDField, EntityUserField]] = None,
                +        entity_ref: Optional[Union[Dict[str, Any], EntityRefField]] = None,
                +        boolean: Optional[Union[Dict[str, Any], EntityBooleanCheckboxField, EntityBooleanTextField]] = None,
                +        **kwargs,
                +    ):
                +        self.label = label
                +        self.key = key
                +        self.type = type
                +        self.value = value
                +        self.link = link
                +        self.icon = icon
                +        self.long = long
                +        self.format = format
                +        self.image_url = image_url
                +        self.slack_file = slack_file
                +        self.alt_text = alt_text
                +        self.tag_color = tag_color
                +        self.edit = edit
                +        self.item_type = item_type
                +        self.user = user
                +        self.entity_ref = entity_ref
                +        self.boolean = boolean
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +    @EnumValidator("type", CustomFieldType)
                +    def type_valid(self):
                +        return self.type is None or self.type in CustomFieldType
                +
                +

                Custom field for entity with flexible types

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Methods

                +
                +
                +def type_valid(self) +
                +
                +
                + +Expand source code + +
                @EnumValidator("type", CustomFieldType)
                +def type_valid(self):
                +    return self.type is None or self.type in CustomFieldType
                +
                +
                +
                +
                +

                Inherited members

                + +
                +
                +class EntityEditNumberConfig +(is_decimal_allowed: bool | None = None,
                min_value: int | float | None = None,
                max_value: int | float | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityEditNumberConfig(JsonObject):
                +    """Number configuration for entity edit support"""
                +
                +    attributes = {
                +        "is_decimal_allowed",
                +        "min_value",
                +        "max_value",
                +    }
                +
                +    def __init__(
                +        self,
                +        is_decimal_allowed: Optional[bool] = None,
                +        min_value: Optional[Union[int, float]] = None,
                +        max_value: Optional[Union[int, float]] = None,
                +        **kwargs,
                +    ):
                +        self.is_decimal_allowed = is_decimal_allowed
                +        self.min_value = min_value
                +        self.max_value = max_value
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Number configuration for entity edit support

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityEditSelectConfig +(current_value: str | None = None,
                current_values: List[str] | None = None,
                static_options: List[Dict[str, Any]] | None = None,
                fetch_options_dynamically: bool | None = None,
                min_query_length: int | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityEditSelectConfig(JsonObject):
                +    """Select configuration for entity edit support"""
                +
                +    attributes = {
                +        "current_value",
                +        "current_values",
                +        "static_options",
                +        "fetch_options_dynamically",
                +        "min_query_length",
                +    }
                +
                +    def __init__(
                +        self,
                +        current_value: Optional[str] = None,
                +        current_values: Optional[List[str]] = None,
                +        static_options: Optional[List[Dict[str, Any]]] = None,  # Option[]
                +        fetch_options_dynamically: Optional[bool] = None,
                +        min_query_length: Optional[int] = None,
                +        **kwargs,
                +    ):
                +        self.current_value = current_value
                +        self.current_values = current_values
                +        self.static_options = static_options
                +        self.fetch_options_dynamically = fetch_options_dynamically
                +        self.min_query_length = min_query_length
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Select configuration for entity edit support

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityEditSupport +(enabled: bool,
                placeholder: Dict[str, Any] | None = None,
                hint: Dict[str, Any] | None = None,
                optional: bool | None = None,
                select: Dict[str, Any] | EntityEditSelectConfig | None = None,
                number: Dict[str, Any] | EntityEditNumberConfig | None = None,
                text: Dict[str, Any] | EntityEditTextConfig | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityEditSupport(JsonObject):
                +    """Edit support configuration for entity fields"""
                +
                +    attributes = {
                +        "enabled",
                +        "placeholder",
                +        "hint",
                +        "optional",
                +        "select",
                +        "number",
                +        "text",
                +    }
                +
                +    def __init__(
                +        self,
                +        enabled: bool,
                +        placeholder: Optional[Dict[str, Any]] = None,  # PlainTextElement
                +        hint: Optional[Dict[str, Any]] = None,  # PlainTextElement
                +        optional: Optional[bool] = None,
                +        select: Optional[Union[Dict[str, Any], EntityEditSelectConfig]] = None,
                +        number: Optional[Union[Dict[str, Any], EntityEditNumberConfig]] = None,
                +        text: Optional[Union[Dict[str, Any], EntityEditTextConfig]] = None,
                +        **kwargs,
                +    ):
                +        self.enabled = enabled
                +        self.placeholder = placeholder
                +        self.hint = hint
                +        self.optional = optional
                +        self.select = select
                +        self.number = number
                +        self.text = text
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Edit support configuration for entity fields

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityEditTextConfig +(min_length: int | None = None, max_length: int | None = None, **kwargs) +
                +
                +
                + +Expand source code + +
                class EntityEditTextConfig(JsonObject):
                +    """Text configuration for entity edit support"""
                +
                +    attributes = {
                +        "min_length",
                +        "max_length",
                +    }
                +
                +    def __init__(
                +        self,
                +        min_length: Optional[int] = None,
                +        max_length: Optional[int] = None,
                +        **kwargs,
                +    ):
                +        self.min_length = min_length
                +        self.max_length = max_length
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Text configuration for entity edit support

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityFullSizePreview +(is_supported: bool,
                preview_url: str | None = None,
                mime_type: str | None = None,
                error: Dict[str, Any] | EntityFullSizePreviewError | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityFullSizePreview(JsonObject):
                +    """Full-size preview configuration for entity"""
                +
                +    attributes = {
                +        "is_supported",
                +        "preview_url",
                +        "mime_type",
                +        "error",
                +    }
                +
                +    def __init__(
                +        self,
                +        is_supported: bool,
                +        preview_url: Optional[str] = None,
                +        mime_type: Optional[str] = None,
                +        error: Optional[Union[Dict[str, Any], EntityFullSizePreviewError]] = None,
                +        **kwargs,
                +    ):
                +        self.is_supported = is_supported
                +        self.preview_url = preview_url
                +        self.mime_type = mime_type
                +        self.error = error
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Full-size preview configuration for entity

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityFullSizePreviewError +(code: str, message: str | None = None, **kwargs) +
                +
                +
                + +Expand source code + +
                class EntityFullSizePreviewError(JsonObject):
                +    """Error information for full-size preview"""
                +
                +    attributes = {
                +        "code",
                +        "message",
                +    }
                +
                +    def __init__(
                +        self,
                +        code: str,
                +        message: Optional[str] = None,
                +        **kwargs,
                +    ):
                +        self.code = code
                +        self.message = message
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Error information for full-size preview

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityIconField +(alt_text: str,
                url: str | None = None,
                slack_file: Dict[str, Any] | EntityIconSlackFile | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityIconField(JsonObject):
                +    """Icon field for entity attributes"""
                +
                +    attributes = {
                +        "alt_text",
                +        "url",
                +        "slack_file",
                +    }
                +
                +    def __init__(
                +        self,
                +        alt_text: str,
                +        url: Optional[str] = None,
                +        slack_file: Optional[Union[Dict[str, Any], EntityIconSlackFile]] = None,
                +        **kwargs,
                +    ):
                +        self.alt_text = alt_text
                +        self.url = url
                +        self.slack_file = slack_file
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Icon field for entity attributes

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityIconSlackFile +(id: str | None = None, url: str | None = None, **kwargs) +
                +
                +
                + +Expand source code + +
                class EntityIconSlackFile(JsonObject):
                +    """Slack file reference for entity icon"""
                +
                +    attributes = {
                +        "id",
                +        "url",
                +    }
                +
                +    def __init__(
                +        self,
                +        id: Optional[str] = None,
                +        url: Optional[str] = None,
                +        **kwargs,
                +    ):
                +        self.id = id
                +        self.url = url
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Slack file reference for entity icon

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityImageField +(alt_text: str,
                label: str | None = None,
                image_url: str | None = None,
                slack_file: Dict[str, Any] | None = None,
                title: str | None = None,
                type: str | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityImageField(JsonObject):
                +    """Image field for entity"""
                +
                +    attributes = {
                +        "alt_text",
                +        "label",
                +        "image_url",
                +        "slack_file",
                +        "title",
                +        "type",
                +    }
                +
                +    def __init__(
                +        self,
                +        alt_text: str,
                +        label: Optional[str] = None,
                +        image_url: Optional[str] = None,
                +        slack_file: Optional[Dict[str, Any]] = None,
                +        title: Optional[str] = None,
                +        type: Optional[str] = None,
                +        **kwargs,
                +    ):
                +        self.alt_text = alt_text
                +        self.label = label
                +        self.image_url = image_url
                +        self.slack_file = slack_file
                +        self.title = title
                +        self.type = type
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Image field for entity

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityMetadata +(entity_type: str,
                entity_payload: Dict[str, Any] | EntityPayload,
                external_ref: Dict[str, Any] | ExternalRef,
                url: str,
                app_unfurl_url: str | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityMetadata(JsonObject):
                +    """Work object entity metadata
                +
                +    https://docs.slack.dev/messaging/work-objects/
                +    """
                +
                +    attributes = {
                +        "entity_type",
                +        "entity_payload",
                +        "external_ref",
                +        "url",
                +        "app_unfurl_url",
                +    }
                +
                +    def __init__(
                +        self,
                +        entity_type: str,
                +        entity_payload: Union[Dict[str, Any], EntityPayload],
                +        external_ref: Union[Dict[str, Any], ExternalRef],
                +        url: str,
                +        app_unfurl_url: Optional[str] = None,
                +        **kwargs,
                +    ):
                +        self.entity_type = entity_type
                +        self.entity_payload = entity_payload
                +        self.external_ref = external_ref
                +        self.url = url
                +        self.app_unfurl_url = app_unfurl_url
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +    @EnumValidator("entity_type", EntityType)
                +    def entity_type_valid(self):
                +        return self.entity_type is None or self.entity_type in EntityType
                +
                + +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Methods

                +
                +
                +def entity_type_valid(self) +
                +
                +
                + +Expand source code + +
                @EnumValidator("entity_type", EntityType)
                +def entity_type_valid(self):
                +    return self.entity_type is None or self.entity_type in EntityType
                +
                +
                +
                +
                +

                Inherited members

                + +
                +
                +class EntityPayload +(attributes: Dict[str, Any] | EntityAttributes,
                fields: Dict[str, Any] | ContentItemEntityFields | FileEntityFields | IncidentEntityFields | TaskEntityFields | None = None,
                custom_fields: List[Dict[str, Any] | EntityCustomField] | None = None,
                slack_file: Dict[str, Any] | FileEntitySlackFile | None = None,
                display_order: List[str] | None = None,
                actions: Dict[str, Any] | EntityActions | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityPayload(JsonObject):
                +    """Payload schema for an entity"""
                +
                +    attributes = {
                +        "attributes",
                +        "fields",
                +        "custom_fields",
                +        "slack_file",
                +        "display_order",
                +        "actions",
                +    }
                +
                +    def __init__(
                +        self,
                +        attributes: Union[Dict[str, Any], EntityAttributes],
                +        fields: Optional[
                +            Union[Dict[str, Any], ContentItemEntityFields, FileEntityFields, IncidentEntityFields, TaskEntityFields]
                +        ] = None,
                +        custom_fields: Optional[List[Union[Dict[str, Any], EntityCustomField]]] = None,
                +        slack_file: Optional[Union[Dict[str, Any], FileEntitySlackFile]] = None,
                +        display_order: Optional[List[str]] = None,
                +        actions: Optional[Union[Dict[str, Any], EntityActions]] = None,
                +        **kwargs,
                +    ):
                +        # Store entity attributes data with a different internal name to avoid
                +        # shadowing the class-level 'attributes' set used for JSON serialization
                +        self._entity_attributes = attributes
                +        self.fields = fields
                +        self.custom_fields = custom_fields
                +        self.slack_file = slack_file
                +        self.display_order = display_order
                +        self.actions = actions
                +        self.additional_attributes = kwargs
                +
                +    @property
                +    def entity_attributes(self) -> Union[Dict[str, Any], EntityAttributes]:
                +        """Get the entity attributes data.
                +
                +        Note: Use this property to access the attributes data. The class-level
                +        'attributes' is reserved for the JSON serialization schema.
                +        """
                +        return self._entity_attributes
                +
                +    @entity_attributes.setter
                +    def entity_attributes(self, value: Union[Dict[str, Any], EntityAttributes]):
                +        """Set the entity attributes data."""
                +        self._entity_attributes = value
                +
                +    def get_object_attribute(self, key: str):
                +        if key == "attributes":
                +            return self._entity_attributes
                +        else:
                +            return getattr(self, key, None)
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Payload schema for an entity

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Instance variables

                +
                +
                prop entity_attributes : Dict[str, Any] | EntityAttributes
                +
                +
                + +Expand source code + +
                @property
                +def entity_attributes(self) -> Union[Dict[str, Any], EntityAttributes]:
                +    """Get the entity attributes data.
                +
                +    Note: Use this property to access the attributes data. The class-level
                +    'attributes' is reserved for the JSON serialization schema.
                +    """
                +    return self._entity_attributes
                +
                +

                Get the entity attributes data.

                +

                Note: Use this property to access the attributes data. The class-level +'attributes' is reserved for the JSON serialization schema.

                +
                +
                +

                Methods

                +
                +
                +def get_object_attribute(self, key: str) +
                +
                +
                + +Expand source code + +
                def get_object_attribute(self, key: str):
                +    if key == "attributes":
                +        return self._entity_attributes
                +    else:
                +        return getattr(self, key, None)
                +
                +
                +
                +
                +

                Inherited members

                + +
                +
                +class EntityRefField +(entity_url: str,
                external_ref: Dict[str, Any] | ExternalRef,
                title: str,
                display_type: str | None = None,
                icon: Dict[str, Any] | EntityIconField | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityRefField(JsonObject):
                +    """Entity reference field"""
                +
                +    attributes = {
                +        "entity_url",
                +        "external_ref",
                +        "title",
                +        "display_type",
                +        "icon",
                +    }
                +
                +    def __init__(
                +        self,
                +        entity_url: str,
                +        external_ref: Union[Dict[str, Any], ExternalRef],
                +        title: str,
                +        display_type: Optional[str] = None,
                +        icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
                +        **kwargs,
                +    ):
                +        self.entity_url = entity_url
                +        self.external_ref = external_ref
                +        self.title = title
                +        self.display_type = display_type
                +        self.icon = icon
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Entity reference field

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityStringField +(value: str,
                label: str | None = None,
                format: str | None = None,
                link: str | None = None,
                icon: Dict[str, Any] | EntityIconField | None = None,
                long: bool | None = None,
                type: str | None = None,
                tag_color: str | None = None,
                edit: Dict[str, Any] | EntityEditSupport | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityStringField(JsonObject):
                +    """String field for entity"""
                +
                +    attributes = {
                +        "value",
                +        "label",
                +        "format",
                +        "link",
                +        "icon",
                +        "long",
                +        "type",
                +        "tag_color",
                +        "edit",
                +    }
                +
                +    def __init__(
                +        self,
                +        value: str,
                +        label: Optional[str] = None,
                +        format: Optional[str] = None,
                +        link: Optional[str] = None,
                +        icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
                +        long: Optional[bool] = None,
                +        type: Optional[str] = None,
                +        tag_color: Optional[str] = None,
                +        edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None,
                +        **kwargs,
                +    ):
                +        self.value = value
                +        self.label = label
                +        self.format = format
                +        self.link = link
                +        self.icon = icon
                +        self.long = long
                +        self.type = type
                +        self.tag_color = tag_color
                +        self.edit = edit
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                String field for entity

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityTimestampField +(value: int,
                label: str | None = None,
                type: str | None = None,
                edit: Dict[str, Any] | EntityEditSupport | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityTimestampField(JsonObject):
                +    """Timestamp field for entity"""
                +
                +    attributes = {
                +        "value",
                +        "label",
                +        "type",
                +        "edit",
                +    }
                +
                +    def __init__(
                +        self,
                +        value: int,
                +        label: Optional[str] = None,
                +        type: Optional[str] = None,
                +        edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None,
                +        **kwargs,
                +    ):
                +        self.value = value
                +        self.label = label
                +        self.type = type
                +        self.edit = edit
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Timestamp field for entity

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityTitle +(text: str,
                edit: Dict[str, Any] | EntityEditSupport | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityTitle(JsonObject):
                +    """Title for entity attributes"""
                +
                +    attributes = {
                +        "text",
                +        "edit",
                +    }
                +
                +    def __init__(
                +        self,
                +        text: str,
                +        edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None,
                +        **kwargs,
                +    ):
                +        self.text = text
                +        self.edit = edit
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Title for entity attributes

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityTypedField +(type: str,
                label: str | None = None,
                value: str | int | None = None,
                link: str | None = None,
                icon: Dict[str, Any] | EntityIconField | None = None,
                long: bool | None = None,
                format: str | None = None,
                image_url: str | None = None,
                slack_file: Dict[str, Any] | None = None,
                alt_text: str | None = None,
                edit: Dict[str, Any] | EntityEditSupport | None = None,
                tag_color: str | None = None,
                user: Dict[str, Any] | EntityUserIDField | EntityUserField | None = None,
                entity_ref: Dict[str, Any] | EntityRefField | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityTypedField(JsonObject):
                +    """Typed field for entity with various display options"""
                +
                +    attributes = {
                +        "type",
                +        "label",
                +        "value",
                +        "link",
                +        "icon",
                +        "long",
                +        "format",
                +        "image_url",
                +        "slack_file",
                +        "alt_text",
                +        "edit",
                +        "tag_color",
                +        "user",
                +        "entity_ref",
                +    }
                +
                +    def __init__(
                +        self,
                +        type: str,
                +        label: Optional[str] = None,
                +        value: Optional[Union[str, int]] = None,
                +        link: Optional[str] = None,
                +        icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
                +        long: Optional[bool] = None,
                +        format: Optional[str] = None,
                +        image_url: Optional[str] = None,
                +        slack_file: Optional[Dict[str, Any]] = None,
                +        alt_text: Optional[str] = None,
                +        edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None,
                +        tag_color: Optional[str] = None,
                +        user: Optional[Union[Dict[str, Any], EntityUserIDField, EntityUserField]] = None,
                +        entity_ref: Optional[Union[Dict[str, Any], EntityRefField]] = None,
                +        **kwargs,
                +    ):
                +        self.type = type
                +        self.label = label
                +        self.value = value
                +        self.link = link
                +        self.icon = icon
                +        self.long = long
                +        self.format = format
                +        self.image_url = image_url
                +        self.slack_file = slack_file
                +        self.alt_text = alt_text
                +        self.edit = edit
                +        self.tag_color = tag_color
                +        self.user = user
                +        self.entity_ref = entity_ref
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Typed field for entity with various display options

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityUserField +(text: str,
                url: str | None = None,
                email: str | None = None,
                icon: Dict[str, Any] | EntityIconField | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EntityUserField(JsonObject):
                +    """User field for entity"""
                +
                +    attributes = {
                +        "text",
                +        "url",
                +        "email",
                +        "icon",
                +    }
                +
                +    def __init__(
                +        self,
                +        text: str,
                +        url: Optional[str] = None,
                +        email: Optional[str] = None,
                +        icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
                +        **kwargs,
                +    ):
                +        self.text = text
                +        self.url = url
                +        self.email = email
                +        self.icon = icon
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                User field for entity

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EntityUserIDField +(user_id: str, **kwargs) +
                +
                +
                + +Expand source code + +
                class EntityUserIDField(JsonObject):
                +    """User ID field for entity"""
                +
                +    attributes = {
                +        "user_id",
                +    }
                +
                +    def __init__(
                +        self,
                +        user_id: str,
                +        **kwargs,
                +    ):
                +        self.user_id = user_id
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                User ID field for entity

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class EventAndEntityMetadata +(event_type: str | None = None,
                event_payload: Dict[str, Any] | None = None,
                entities: List[Dict[str, Any] | EntityMetadata] | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class EventAndEntityMetadata(JsonObject):
                +    """Message metadata with entities
                +
                +    https://docs.slack.dev/messaging/message-metadata/
                +    https://docs.slack.dev/messaging/work-objects/
                +    """
                +
                +    attributes = {"event_type", "event_payload", "entities"}
                +
                +    def __init__(
                +        self,
                +        event_type: Optional[str] = None,
                +        event_payload: Optional[Dict[str, Any]] = None,
                +        entities: Optional[List[Union[Dict[str, Any], EntityMetadata]]] = None,
                +        **kwargs,
                +    ):
                +        self.event_type = event_type
                +        self.event_payload = event_payload
                +        self.entities = entities
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                + +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class ExternalRef +(id: str, type: str | None = None, **kwargs) +
                +
                +
                + +Expand source code + +
                class ExternalRef(JsonObject):
                +    """Reference (and optional type) used to identify an entity within the developer's system"""
                +
                +    attributes = {
                +        "id",
                +        "type",
                +    }
                +
                +    def __init__(
                +        self,
                +        id: str,
                +        type: Optional[str] = None,
                +        **kwargs,
                +    ):
                +        self.id = id
                +        self.type = type
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Reference (and optional type) used to identify an entity within the developer's system

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class FileEntityFields +(preview: Dict[str, Any] | EntityImageField | None = None,
                created_by: Dict[str, Any] | EntityTypedField | None = None,
                date_created: Dict[str, Any] | EntityTimestampField | None = None,
                date_updated: Dict[str, Any] | EntityTimestampField | None = None,
                last_modified_by: Dict[str, Any] | EntityTypedField | None = None,
                file_size: Dict[str, Any] | EntityStringField | None = None,
                mime_type: Dict[str, Any] | EntityStringField | None = None,
                full_size_preview: Dict[str, Any] | EntityFullSizePreview | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class FileEntityFields(JsonObject):
                +    """Fields specific to file entities"""
                +
                +    attributes = {
                +        "preview",
                +        "created_by",
                +        "date_created",
                +        "date_updated",
                +        "last_modified_by",
                +        "file_size",
                +        "mime_type",
                +        "full_size_preview",
                +    }
                +
                +    def __init__(
                +        self,
                +        preview: Optional[Union[Dict[str, Any], EntityImageField]] = None,
                +        created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
                +        date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
                +        date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
                +        last_modified_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
                +        file_size: Optional[Union[Dict[str, Any], EntityStringField]] = None,
                +        mime_type: Optional[Union[Dict[str, Any], EntityStringField]] = None,
                +        full_size_preview: Optional[Union[Dict[str, Any], EntityFullSizePreview]] = None,
                +        **kwargs,
                +    ):
                +        self.preview = preview
                +        self.created_by = created_by
                +        self.date_created = date_created
                +        self.date_updated = date_updated
                +        self.last_modified_by = last_modified_by
                +        self.file_size = file_size
                +        self.mime_type = mime_type
                +        self.full_size_preview = full_size_preview
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Fields specific to file entities

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class FileEntitySlackFile +(id: str, type: str | None = None, **kwargs) +
                +
                +
                + +Expand source code + +
                class FileEntitySlackFile(JsonObject):
                +    """Slack file reference for file entities"""
                +
                +    attributes = {
                +        "id",
                +        "type",
                +    }
                +
                +    def __init__(
                +        self,
                +        id: str,
                +        type: Optional[str] = None,
                +        **kwargs,
                +    ):
                +        self.id = id
                +        self.type = type
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Slack file reference for file entities

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                +
                +class IncidentEntityFields +(status: Dict[str, Any] | EntityStringField | None = None,
                priority: Dict[str, Any] | EntityStringField | None = None,
                urgency: Dict[str, Any] | EntityStringField | None = None,
                created_by: Dict[str, Any] | EntityTypedField | None = None,
                assigned_to: Dict[str, Any] | EntityTypedField | None = None,
                date_created: Dict[str, Any] | EntityTimestampField | None = None,
                date_updated: Dict[str, Any] | EntityTimestampField | None = None,
                description: Dict[str, Any] | EntityStringField | None = None,
                service: Dict[str, Any] | EntityStringField | None = None,
                **kwargs)
                +
                +
                +
                + +Expand source code + +
                class IncidentEntityFields(JsonObject):
                +    """Fields specific to incident entities"""
                +
                +    attributes = {
                +        "status",
                +        "priority",
                +        "urgency",
                +        "created_by",
                +        "assigned_to",
                +        "date_created",
                +        "date_updated",
                +        "description",
                +        "service",
                +    }
                +
                +    def __init__(
                +        self,
                +        status: Optional[Union[Dict[str, Any], EntityStringField]] = None,
                +        priority: Optional[Union[Dict[str, Any], EntityStringField]] = None,
                +        urgency: Optional[Union[Dict[str, Any], EntityStringField]] = None,
                +        created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
                +        assigned_to: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
                +        date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
                +        date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
                +        description: Optional[Union[Dict[str, Any], EntityStringField]] = None,
                +        service: Optional[Union[Dict[str, Any], EntityStringField]] = None,
                +        **kwargs,
                +    ):
                +        self.status = status
                +        self.priority = priority
                +        self.urgency = urgency
                +        self.created_by = created_by
                +        self.assigned_to = assigned_to
                +        self.date_created = date_created
                +        self.date_updated = date_updated
                +        self.description = description
                +        self.service = service
                +        self.additional_attributes = kwargs
                +
                +    def __str__(self):
                +        return str(self.get_non_null_attributes())
                +
                +    def __repr__(self):
                +        return self.__str__()
                +
                +

                Fields specific to incident entities

                +

                Ancestors

                + +

                Class variables

                +
                +
                var attributes
                +
                +

                The type of the None singleton.

                +
                +
                +

                Inherited members

                + +
                class Metadata (event_type: str, event_payload: Dict[str, Any], **kwargs) @@ -107,6 +2365,81 @@

                Inherited members

              +
              +class TaskEntityFields +(description: Dict[str, Any] | EntityStringField | None = None,
              created_by: Dict[str, Any] | EntityTypedField | None = None,
              date_created: Dict[str, Any] | EntityTimestampField | None = None,
              date_updated: Dict[str, Any] | EntityTimestampField | None = None,
              assignee: Dict[str, Any] | EntityTypedField | None = None,
              status: Dict[str, Any] | EntityStringField | None = None,
              due_date: Dict[str, Any] | EntityTypedField | None = None,
              priority: Dict[str, Any] | EntityStringField | None = None,
              **kwargs)
              +
              +
              +
              + +Expand source code + +
              class TaskEntityFields(JsonObject):
              +    """Fields specific to task entities"""
              +
              +    attributes = {
              +        "description",
              +        "created_by",
              +        "date_created",
              +        "date_updated",
              +        "assignee",
              +        "status",
              +        "due_date",
              +        "priority",
              +    }
              +
              +    def __init__(
              +        self,
              +        description: Optional[Union[Dict[str, Any], EntityStringField]] = None,
              +        created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
              +        date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
              +        date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
              +        assignee: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
              +        status: Optional[Union[Dict[str, Any], EntityStringField]] = None,
              +        due_date: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
              +        priority: Optional[Union[Dict[str, Any], EntityStringField]] = None,
              +        **kwargs,
              +    ):
              +        self.description = description
              +        self.created_by = created_by
              +        self.date_created = date_created
              +        self.date_updated = date_updated
              +        self.assignee = assignee
              +        self.status = status
              +        self.due_date = due_date
              +        self.priority = priority
              +        self.additional_attributes = kwargs
              +
              +    def __str__(self):
              +        return str(self.get_non_null_attributes())
              +
              +    def __repr__(self):
              +        return self.__str__()
              +
              +

              Fields specific to task entities

              +

              Ancestors

              + +

              Class variables

              +
              +
              var attributes
              +
              +

              The type of the None singleton.

              +
              +
              +

              Inherited members

              + +
              @@ -120,14 +2453,221 @@

              Inherited members

            • slack_sdk.models
          • +
          • Global variables

            + +
          • Classes

          diff --git a/docs/reference/web/async_client.html b/docs/reference/web/async_client.html index 6e9c712fe..2ec1ba84a 100644 --- a/docs/reference/web/async_client.html +++ b/docs/reference/web/async_client.html @@ -2790,7 +2790,7 @@

          Classes

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: @@ -3019,6 +3019,7 @@

          Classes

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -3035,6 +3036,7 @@

          Classes

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -3666,6 +3668,30 @@

          Classes

          kwargs.update({"include_categories": include_categories}) return await self.api_call("emoji.list", http_verb="GET", params=kwargs) + async def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return await self.api_call("entity.presentDetails", json=kwargs) + async def files_comments_delete( self, *, @@ -4920,6 +4946,249 @@

          Classes

          ) return await self.api_call("search.messages", http_verb="GET", params=kwargs) + async def slackLists_access_delete( + self, + *, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete + """ + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.access.delete", json=kwargs) + + async def slackLists_access_set( + self, + *, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.access.set", json=kwargs) + + async def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create + """ + kwargs.update( + { + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.create", json=kwargs) + + async def slackLists_download_get( + self, + *, + list_id: str, + job_id: str, + **kwargs, + ) -> AsyncSlackResponse: + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get + """ + kwargs.update( + { + "list_id": list_id, + "job_id": job_id, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.download.get", json=kwargs) + + async def slackLists_download_start( + self, + *, + list_id: str, + include_archived: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start + """ + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.download.start", json=kwargs) + + async def slackLists_items_create( + self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create + """ + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.create", json=kwargs) + + async def slackLists_items_delete( + self, + *, + list_id: str, + id: str, + **kwargs, + ) -> AsyncSlackResponse: + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.delete", json=kwargs) + + async def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> AsyncSlackResponse: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + async def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.info", json=kwargs) + + async def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.list", json=kwargs) + + async def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> AsyncSlackResponse: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.update", json=kwargs) + + async def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.update", json=kwargs) + async def stars_add( self, *, @@ -10066,7 +10335,7 @@

          Methods

          https://docs.slack.dev/reference/methods/chat.postEphemeral

          -async def chat_postMessage(self,
          *,
          channel: str,
          text: str | None = None,
          as_user: bool | None = None,
          attachments: str | Sequence[Dict | Attachment] | None = None,
          blocks: str | Sequence[Dict | Block] | None = None,
          thread_ts: str | None = None,
          reply_broadcast: bool | None = None,
          unfurl_links: bool | None = None,
          unfurl_media: bool | None = None,
          container_id: str | None = None,
          icon_emoji: str | None = None,
          icon_url: str | None = None,
          mrkdwn: bool | None = None,
          link_names: bool | None = None,
          username: str | None = None,
          parse: str | None = None,
          metadata: Dict | Metadata | None = None,
          markdown_text: str | None = None,
          **kwargs) ‑> AsyncSlackResponse
          +async def chat_postMessage(self,
          *,
          channel: str,
          text: str | None = None,
          as_user: bool | None = None,
          attachments: str | Sequence[Dict | Attachment] | None = None,
          blocks: str | Sequence[Dict | Block] | None = None,
          thread_ts: str | None = None,
          reply_broadcast: bool | None = None,
          unfurl_links: bool | None = None,
          unfurl_media: bool | None = None,
          container_id: str | None = None,
          icon_emoji: str | None = None,
          icon_url: str | None = None,
          mrkdwn: bool | None = None,
          link_names: bool | None = None,
          username: str | None = None,
          parse: str | None = None,
          metadata: Dict | Metadata | EventAndEntityMetadata | None = None,
          markdown_text: str | None = None,
          **kwargs) ‑> AsyncSlackResponse
          @@ -10092,7 +10361,7 @@

          Methods

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: @@ -10414,7 +10683,7 @@

          Example

          -async def chat_unfurl(self,
          *,
          channel: str | None = None,
          ts: str | None = None,
          source: str | None = None,
          unfurl_id: str | None = None,
          unfurls: Dict[str, Dict] | None = None,
          user_auth_blocks: str | Sequence[Dict | Block] | None = None,
          user_auth_message: str | None = None,
          user_auth_required: bool | None = None,
          user_auth_url: str | None = None,
          **kwargs) ‑> AsyncSlackResponse
          +async def chat_unfurl(self,
          *,
          channel: str | None = None,
          ts: str | None = None,
          source: str | None = None,
          unfurl_id: str | None = None,
          unfurls: Dict[str, Dict] | None = None,
          metadata: Dict | EventAndEntityMetadata | None = None,
          user_auth_blocks: str | Sequence[Dict | Block] | None = None,
          user_auth_message: str | None = None,
          user_auth_required: bool | None = None,
          user_auth_url: str | None = None,
          **kwargs) ‑> AsyncSlackResponse
          @@ -10429,6 +10698,7 @@

          Example

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -10445,6 +10715,7 @@

          Example

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -11476,6 +11747,41 @@

          Example

          +
          +async def entity_presentDetails(self,
          trigger_id: str,
          metadata: Dict | EntityMetadata | None = None,
          user_auth_required: bool | None = None,
          user_auth_url: str | None = None,
          error: Dict[str, Any] | None = None,
          **kwargs) ‑> AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def entity_presentDetails(
          +    self,
          +    trigger_id: str,
          +    metadata: Optional[Union[Dict, EntityMetadata]] = None,
          +    user_auth_required: Optional[bool] = None,
          +    user_auth_url: Optional[str] = None,
          +    error: Optional[Dict[str, Any]] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Provides entity details for the flexpane.
          +    https://docs.slack.dev/reference/methods/entity.presentDetails/
          +    """
          +    kwargs.update({"trigger_id": trigger_id})
          +    if metadata is not None:
          +        kwargs.update({"metadata": metadata})
          +    if user_auth_required is not None:
          +        kwargs.update({"user_auth_required": user_auth_required})
          +    if user_auth_url is not None:
          +        kwargs.update({"user_auth_url": user_auth_url})
          +    if error is not None:
          +        kwargs.update({"error": error})
          +    _parse_web_class_objects(kwargs)
          +    return await self.api_call("entity.presentDetails", json=kwargs)
          +
          +

          Provides entity details for the flexpane. +https://docs.slack.dev/reference/methods/entity.presentDetails/

          +
          async def files_comments_delete(self, *, file: str, id: str, **kwargs) ‑> AsyncSlackResponse
          @@ -13451,6 +13757,381 @@

          Example

          Searches for messages matching a query. https://docs.slack.dev/reference/methods/search.messages

          +
          +async def slackLists_access_delete(self,
          *,
          list_id: str,
          channel_ids: List[str] | None = None,
          user_ids: List[str] | None = None,
          **kwargs) ‑> AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def slackLists_access_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Revoke access to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.delete
          +    """
          +    kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.access.delete", json=kwargs)
          +
          +

          Revoke access to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.delete

          +
          +
          +async def slackLists_access_set(self,
          *,
          list_id: str,
          access_level: str,
          channel_ids: List[str] | None = None,
          user_ids: List[str] | None = None,
          **kwargs) ‑> AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def slackLists_access_set(
          +    self,
          +    *,
          +    list_id: str,
          +    access_level: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Set the access level to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.set
          +    """
          +    kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.access.set", json=kwargs)
          +
          +

          Set the access level to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.set

          +
          +
          +async def slackLists_create(self,
          *,
          name: str,
          description_blocks: str | Sequence[Dict | RichTextBlock] | None = None,
          schema: List[Dict[str, Any]] | None = None,
          copy_from_list_id: str | None = None,
          include_copied_list_records: bool | None = None,
          todo_mode: bool | None = None,
          **kwargs) ‑> AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def slackLists_create(
          +    self,
          +    *,
          +    name: str,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    schema: Optional[List[Dict[str, Any]]] = None,
          +    copy_from_list_id: Optional[str] = None,
          +    include_copied_list_records: Optional[bool] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Creates a List.
          +    https://docs.slack.dev/reference/methods/slackLists.create
          +    """
          +    kwargs.update(
          +        {
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "schema": schema,
          +            "copy_from_list_id": copy_from_list_id,
          +            "include_copied_list_records": include_copied_list_records,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.create", json=kwargs)
          +
          + +
          +
          +async def slackLists_download_get(self, *, list_id: str, job_id: str, **kwargs) ‑> AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def slackLists_download_get(
          +    self,
          +    *,
          +    list_id: str,
          +    job_id: str,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Retrieve List download URL from an export job to download List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.get
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "job_id": job_id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.download.get", json=kwargs)
          +
          +

          Retrieve List download URL from an export job to download List contents. +https://docs.slack.dev/reference/methods/slackLists.download.get

          +
          +
          +async def slackLists_download_start(self, *, list_id: str, include_archived: bool | None = None, **kwargs) ‑> AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def slackLists_download_start(
          +    self,
          +    *,
          +    list_id: str,
          +    include_archived: Optional[bool] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Initiate a job to export List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.start
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "include_archived": include_archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.download.start", json=kwargs)
          +
          + +
          +
          +async def slackLists_items_create(self,
          *,
          list_id: str,
          duplicated_item_id: str | None = None,
          parent_item_id: str | None = None,
          initial_fields: List[Dict[str, Any]] | None = None,
          **kwargs) ‑> AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def slackLists_items_create(
          +    self,
          +    *,
          +    list_id: str,
          +    duplicated_item_id: Optional[str] = None,
          +    parent_item_id: Optional[str] = None,
          +    initial_fields: Optional[List[Dict[str, Any]]] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Add a new item to an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.create
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "duplicated_item_id": duplicated_item_id,
          +            "parent_item_id": parent_item_id,
          +            "initial_fields": initial_fields,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.items.create", json=kwargs)
          +
          + +
          +
          +async def slackLists_items_delete(self, *, list_id: str, id: str, **kwargs) ‑> AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def slackLists_items_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Deletes an item from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.delete
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.items.delete", json=kwargs)
          +
          + +
          +
          +async def slackLists_items_deleteMultiple(self, *, list_id: str, ids: List[str], **kwargs) ‑> AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def slackLists_items_deleteMultiple(
          +    self,
          +    *,
          +    list_id: str,
          +    ids: List[str],
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Deletes multiple items from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "ids": ids,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.items.deleteMultiple", json=kwargs)
          +
          + +
          +
          +async def slackLists_items_info(self, *, list_id: str, id: str, include_is_subscribed: bool | None = None, **kwargs) ‑> AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def slackLists_items_info(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    include_is_subscribed: Optional[bool] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Get a row from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.info
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +            "include_is_subscribed": include_is_subscribed,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.items.info", json=kwargs)
          +
          + +
          +
          +async def slackLists_items_list(self,
          *,
          list_id: str,
          limit: int | None = None,
          cursor: str | None = None,
          archived: bool | None = None,
          **kwargs) ‑> AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def slackLists_items_list(
          +    self,
          +    *,
          +    list_id: str,
          +    limit: Optional[int] = None,
          +    cursor: Optional[str] = None,
          +    archived: Optional[bool] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Get records from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.list
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "limit": limit,
          +            "cursor": cursor,
          +            "archived": archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.items.list", json=kwargs)
          +
          + +
          +
          +async def slackLists_items_update(self, *, list_id: str, cells: List[Dict[str, Any]], **kwargs) ‑> AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def slackLists_items_update(
          +    self,
          +    *,
          +    list_id: str,
          +    cells: List[Dict[str, Any]],
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Updates cells in a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.update
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "cells": cells,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.items.update", json=kwargs)
          +
          + +
          +
          +async def slackLists_update(self,
          *,
          id: str,
          name: str | None = None,
          description_blocks: str | Sequence[Dict | RichTextBlock] | None = None,
          todo_mode: bool | None = None,
          **kwargs) ‑> AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def slackLists_update(
          +    self,
          +    *,
          +    id: str,
          +    name: Optional[str] = None,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Update a List.
          +    https://docs.slack.dev/reference/methods/slackLists.update
          +    """
          +    kwargs.update(
          +        {
          +            "id": id,
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.update", json=kwargs)
          +
          + +
          async def stars_add(self,
          *,
          channel: str | None = None,
          file: str | None = None,
          file_comment: str | None = None,
          timestamp: str | None = None,
          **kwargs) ‑> AsyncSlackResponse
          @@ -14968,6 +15649,7 @@

          dnd_setSnooze
        • dnd_teamInfo
        • emoji_list
        • +
        • entity_presentDetails
        • files_comments_delete
        • files_completeUploadExternal
        • files_delete
        • @@ -15037,6 +15719,18 @@

          search_all
        • search_files
        • search_messages
        • +
        • slackLists_access_delete
        • +
        • slackLists_access_set
        • +
        • slackLists_create
        • +
        • slackLists_download_get
        • +
        • slackLists_download_start
        • +
        • slackLists_items_create
        • +
        • slackLists_items_delete
        • +
        • slackLists_items_deleteMultiple
        • +
        • slackLists_items_info
        • +
        • slackLists_items_list
        • +
        • slackLists_items_update
        • +
        • slackLists_update
        • stars_add
        • stars_list
        • stars_remove
        • diff --git a/docs/reference/web/client.html b/docs/reference/web/client.html index 6be773f23..6fded11e1 100644 --- a/docs/reference/web/client.html +++ b/docs/reference/web/client.html @@ -2790,7 +2790,7 @@

          Classes

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: @@ -3019,6 +3019,7 @@

          Classes

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -3035,6 +3036,7 @@

          Classes

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -3666,6 +3668,30 @@

          Classes

          kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) + def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> SlackResponse: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return self.api_call("entity.presentDetails", json=kwargs) + def files_comments_delete( self, *, @@ -4920,6 +4946,249 @@

          Classes

          ) return self.api_call("search.messages", http_verb="GET", params=kwargs) + def slackLists_access_delete( + self, + *, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> SlackResponse: + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete + """ + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.delete", json=kwargs) + + def slackLists_access_set( + self, + *, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> SlackResponse: + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.set", json=kwargs) + + def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create + """ + kwargs.update( + { + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.create", json=kwargs) + + def slackLists_download_get( + self, + *, + list_id: str, + job_id: str, + **kwargs, + ) -> SlackResponse: + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get + """ + kwargs.update( + { + "list_id": list_id, + "job_id": job_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.get", json=kwargs) + + def slackLists_download_start( + self, + *, + list_id: str, + include_archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start + """ + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.start", json=kwargs) + + def slackLists_items_create( + self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, + **kwargs, + ) -> SlackResponse: + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create + """ + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.create", json=kwargs) + + def slackLists_items_delete( + self, + *, + list_id: str, + id: str, + **kwargs, + ) -> SlackResponse: + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.delete", json=kwargs) + + def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> SlackResponse: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.info", json=kwargs) + + def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.list", json=kwargs) + + def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> SlackResponse: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.update", json=kwargs) + + def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.update", json=kwargs) + def stars_add( self, *, @@ -10066,7 +10335,7 @@

          Methods

          https://docs.slack.dev/reference/methods/chat.postEphemeral

          -def chat_postMessage(self,
          *,
          channel: str,
          text: str | None = None,
          as_user: bool | None = None,
          attachments: str | Sequence[Dict | Attachment] | None = None,
          blocks: str | Sequence[Dict | Block] | None = None,
          thread_ts: str | None = None,
          reply_broadcast: bool | None = None,
          unfurl_links: bool | None = None,
          unfurl_media: bool | None = None,
          container_id: str | None = None,
          icon_emoji: str | None = None,
          icon_url: str | None = None,
          mrkdwn: bool | None = None,
          link_names: bool | None = None,
          username: str | None = None,
          parse: str | None = None,
          metadata: Dict | Metadata | None = None,
          markdown_text: str | None = None,
          **kwargs) ‑> SlackResponse
          +def chat_postMessage(self,
          *,
          channel: str,
          text: str | None = None,
          as_user: bool | None = None,
          attachments: str | Sequence[Dict | Attachment] | None = None,
          blocks: str | Sequence[Dict | Block] | None = None,
          thread_ts: str | None = None,
          reply_broadcast: bool | None = None,
          unfurl_links: bool | None = None,
          unfurl_media: bool | None = None,
          container_id: str | None = None,
          icon_emoji: str | None = None,
          icon_url: str | None = None,
          mrkdwn: bool | None = None,
          link_names: bool | None = None,
          username: str | None = None,
          parse: str | None = None,
          metadata: Dict | Metadata | EventAndEntityMetadata | None = None,
          markdown_text: str | None = None,
          **kwargs) ‑> SlackResponse
          @@ -10092,7 +10361,7 @@

          Methods

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: @@ -10414,7 +10683,7 @@

          Example

          -def chat_unfurl(self,
          *,
          channel: str | None = None,
          ts: str | None = None,
          source: str | None = None,
          unfurl_id: str | None = None,
          unfurls: Dict[str, Dict] | None = None,
          user_auth_blocks: str | Sequence[Dict | Block] | None = None,
          user_auth_message: str | None = None,
          user_auth_required: bool | None = None,
          user_auth_url: str | None = None,
          **kwargs) ‑> SlackResponse
          +def chat_unfurl(self,
          *,
          channel: str | None = None,
          ts: str | None = None,
          source: str | None = None,
          unfurl_id: str | None = None,
          unfurls: Dict[str, Dict] | None = None,
          metadata: Dict | EventAndEntityMetadata | None = None,
          user_auth_blocks: str | Sequence[Dict | Block] | None = None,
          user_auth_message: str | None = None,
          user_auth_required: bool | None = None,
          user_auth_url: str | None = None,
          **kwargs) ‑> SlackResponse
          @@ -10429,6 +10698,7 @@

          Example

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -10445,6 +10715,7 @@

          Example

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -11476,6 +11747,41 @@

          Example

          +
          +def entity_presentDetails(self,
          trigger_id: str,
          metadata: Dict | EntityMetadata | None = None,
          user_auth_required: bool | None = None,
          user_auth_url: str | None = None,
          error: Dict[str, Any] | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def entity_presentDetails(
          +    self,
          +    trigger_id: str,
          +    metadata: Optional[Union[Dict, EntityMetadata]] = None,
          +    user_auth_required: Optional[bool] = None,
          +    user_auth_url: Optional[str] = None,
          +    error: Optional[Dict[str, Any]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Provides entity details for the flexpane.
          +    https://docs.slack.dev/reference/methods/entity.presentDetails/
          +    """
          +    kwargs.update({"trigger_id": trigger_id})
          +    if metadata is not None:
          +        kwargs.update({"metadata": metadata})
          +    if user_auth_required is not None:
          +        kwargs.update({"user_auth_required": user_auth_required})
          +    if user_auth_url is not None:
          +        kwargs.update({"user_auth_url": user_auth_url})
          +    if error is not None:
          +        kwargs.update({"error": error})
          +    _parse_web_class_objects(kwargs)
          +    return self.api_call("entity.presentDetails", json=kwargs)
          +
          +

          Provides entity details for the flexpane. +https://docs.slack.dev/reference/methods/entity.presentDetails/

          +
          def files_comments_delete(self, *, file: str, id: str, **kwargs) ‑> SlackResponse
          @@ -13451,6 +13757,381 @@

          Example

          Searches for messages matching a query. https://docs.slack.dev/reference/methods/search.messages

          +
          +def slackLists_access_delete(self,
          *,
          list_id: str,
          channel_ids: List[str] | None = None,
          user_ids: List[str] | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_access_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Revoke access to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.delete
          +    """
          +    kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.access.delete", json=kwargs)
          +
          +

          Revoke access to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.delete

          +
          +
          +def slackLists_access_set(self,
          *,
          list_id: str,
          access_level: str,
          channel_ids: List[str] | None = None,
          user_ids: List[str] | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_access_set(
          +    self,
          +    *,
          +    list_id: str,
          +    access_level: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Set the access level to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.set
          +    """
          +    kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.access.set", json=kwargs)
          +
          +

          Set the access level to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.set

          +
          +
          +def slackLists_create(self,
          *,
          name: str,
          description_blocks: str | Sequence[Dict | RichTextBlock] | None = None,
          schema: List[Dict[str, Any]] | None = None,
          copy_from_list_id: str | None = None,
          include_copied_list_records: bool | None = None,
          todo_mode: bool | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_create(
          +    self,
          +    *,
          +    name: str,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    schema: Optional[List[Dict[str, Any]]] = None,
          +    copy_from_list_id: Optional[str] = None,
          +    include_copied_list_records: Optional[bool] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Creates a List.
          +    https://docs.slack.dev/reference/methods/slackLists.create
          +    """
          +    kwargs.update(
          +        {
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "schema": schema,
          +            "copy_from_list_id": copy_from_list_id,
          +            "include_copied_list_records": include_copied_list_records,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.create", json=kwargs)
          +
          + +
          +
          +def slackLists_download_get(self, *, list_id: str, job_id: str, **kwargs) ‑> SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_download_get(
          +    self,
          +    *,
          +    list_id: str,
          +    job_id: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Retrieve List download URL from an export job to download List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.get
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "job_id": job_id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.download.get", json=kwargs)
          +
          +

          Retrieve List download URL from an export job to download List contents. +https://docs.slack.dev/reference/methods/slackLists.download.get

          +
          +
          +def slackLists_download_start(self, *, list_id: str, include_archived: bool | None = None, **kwargs) ‑> SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_download_start(
          +    self,
          +    *,
          +    list_id: str,
          +    include_archived: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Initiate a job to export List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.start
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "include_archived": include_archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.download.start", json=kwargs)
          +
          + +
          +
          +def slackLists_items_create(self,
          *,
          list_id: str,
          duplicated_item_id: str | None = None,
          parent_item_id: str | None = None,
          initial_fields: List[Dict[str, Any]] | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_items_create(
          +    self,
          +    *,
          +    list_id: str,
          +    duplicated_item_id: Optional[str] = None,
          +    parent_item_id: Optional[str] = None,
          +    initial_fields: Optional[List[Dict[str, Any]]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Add a new item to an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.create
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "duplicated_item_id": duplicated_item_id,
          +            "parent_item_id": parent_item_id,
          +            "initial_fields": initial_fields,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.create", json=kwargs)
          +
          + +
          +
          +def slackLists_items_delete(self, *, list_id: str, id: str, **kwargs) ‑> SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Deletes an item from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.delete
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.delete", json=kwargs)
          +
          + +
          +
          +def slackLists_items_deleteMultiple(self, *, list_id: str, ids: List[str], **kwargs) ‑> SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_deleteMultiple(
          +    self,
          +    *,
          +    list_id: str,
          +    ids: List[str],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Deletes multiple items from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "ids": ids,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.deleteMultiple", json=kwargs)
          +
          + +
          +
          +def slackLists_items_info(self, *, list_id: str, id: str, include_is_subscribed: bool | None = None, **kwargs) ‑> SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_info(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    include_is_subscribed: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Get a row from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.info
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +            "include_is_subscribed": include_is_subscribed,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.info", json=kwargs)
          +
          + +
          +
          +def slackLists_items_list(self,
          *,
          list_id: str,
          limit: int | None = None,
          cursor: str | None = None,
          archived: bool | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_items_list(
          +    self,
          +    *,
          +    list_id: str,
          +    limit: Optional[int] = None,
          +    cursor: Optional[str] = None,
          +    archived: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Get records from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.list
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "limit": limit,
          +            "cursor": cursor,
          +            "archived": archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.list", json=kwargs)
          +
          + +
          +
          +def slackLists_items_update(self, *, list_id: str, cells: List[Dict[str, Any]], **kwargs) ‑> SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_update(
          +    self,
          +    *,
          +    list_id: str,
          +    cells: List[Dict[str, Any]],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Updates cells in a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.update
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "cells": cells,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.update", json=kwargs)
          +
          + +
          +
          +def slackLists_update(self,
          *,
          id: str,
          name: str | None = None,
          description_blocks: str | Sequence[Dict | RichTextBlock] | None = None,
          todo_mode: bool | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_update(
          +    self,
          +    *,
          +    id: str,
          +    name: Optional[str] = None,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Update a List.
          +    https://docs.slack.dev/reference/methods/slackLists.update
          +    """
          +    kwargs.update(
          +        {
          +            "id": id,
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.update", json=kwargs)
          +
          + +
          def stars_add(self,
          *,
          channel: str | None = None,
          file: str | None = None,
          file_comment: str | None = None,
          timestamp: str | None = None,
          **kwargs) ‑> SlackResponse
          @@ -14967,6 +15648,7 @@

          dnd_setSnooze
        • dnd_teamInfo
        • emoji_list
        • +
        • entity_presentDetails
        • files_comments_delete
        • files_completeUploadExternal
        • files_delete
        • @@ -15036,6 +15718,18 @@

          search_all
        • search_files
        • search_messages
        • +
        • slackLists_access_delete
        • +
        • slackLists_access_set
        • +
        • slackLists_create
        • +
        • slackLists_download_get
        • +
        • slackLists_download_start
        • +
        • slackLists_items_create
        • +
        • slackLists_items_delete
        • +
        • slackLists_items_deleteMultiple
        • +
        • slackLists_items_info
        • +
        • slackLists_items_list
        • +
        • slackLists_items_update
        • +
        • slackLists_update
        • stars_add
        • stars_list
        • stars_remove
        • diff --git a/docs/reference/web/index.html b/docs/reference/web/index.html index f4f7e2f2b..611a26b3b 100644 --- a/docs/reference/web/index.html +++ b/docs/reference/web/index.html @@ -3159,7 +3159,7 @@

          Raises

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: @@ -3388,6 +3388,7 @@

          Raises

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -3404,6 +3405,7 @@

          Raises

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -4035,6 +4037,30 @@

          Raises

          kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) + def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> SlackResponse: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return self.api_call("entity.presentDetails", json=kwargs) + def files_comments_delete( self, *, @@ -5289,6 +5315,249 @@

          Raises

          ) return self.api_call("search.messages", http_verb="GET", params=kwargs) + def slackLists_access_delete( + self, + *, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> SlackResponse: + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete + """ + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.delete", json=kwargs) + + def slackLists_access_set( + self, + *, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> SlackResponse: + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.set", json=kwargs) + + def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create + """ + kwargs.update( + { + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.create", json=kwargs) + + def slackLists_download_get( + self, + *, + list_id: str, + job_id: str, + **kwargs, + ) -> SlackResponse: + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get + """ + kwargs.update( + { + "list_id": list_id, + "job_id": job_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.get", json=kwargs) + + def slackLists_download_start( + self, + *, + list_id: str, + include_archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start + """ + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.start", json=kwargs) + + def slackLists_items_create( + self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, + **kwargs, + ) -> SlackResponse: + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create + """ + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.create", json=kwargs) + + def slackLists_items_delete( + self, + *, + list_id: str, + id: str, + **kwargs, + ) -> SlackResponse: + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.delete", json=kwargs) + + def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> SlackResponse: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.info", json=kwargs) + + def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.list", json=kwargs) + + def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> SlackResponse: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.update", json=kwargs) + + def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.update", json=kwargs) + def stars_add( self, *, @@ -10435,7 +10704,7 @@

          Methods

          https://docs.slack.dev/reference/methods/chat.postEphemeral

          -def chat_postMessage(self,
          *,
          channel: str,
          text: str | None = None,
          as_user: bool | None = None,
          attachments: str | Sequence[Dict | Attachment] | None = None,
          blocks: str | Sequence[Dict | Block] | None = None,
          thread_ts: str | None = None,
          reply_broadcast: bool | None = None,
          unfurl_links: bool | None = None,
          unfurl_media: bool | None = None,
          container_id: str | None = None,
          icon_emoji: str | None = None,
          icon_url: str | None = None,
          mrkdwn: bool | None = None,
          link_names: bool | None = None,
          username: str | None = None,
          parse: str | None = None,
          metadata: Dict | Metadata | None = None,
          markdown_text: str | None = None,
          **kwargs) ‑> SlackResponse
          +def chat_postMessage(self,
          *,
          channel: str,
          text: str | None = None,
          as_user: bool | None = None,
          attachments: str | Sequence[Dict | Attachment] | None = None,
          blocks: str | Sequence[Dict | Block] | None = None,
          thread_ts: str | None = None,
          reply_broadcast: bool | None = None,
          unfurl_links: bool | None = None,
          unfurl_media: bool | None = None,
          container_id: str | None = None,
          icon_emoji: str | None = None,
          icon_url: str | None = None,
          mrkdwn: bool | None = None,
          link_names: bool | None = None,
          username: str | None = None,
          parse: str | None = None,
          metadata: Dict | Metadata | EventAndEntityMetadata | None = None,
          markdown_text: str | None = None,
          **kwargs) ‑> SlackResponse
          @@ -10461,7 +10730,7 @@

          Methods

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: @@ -10783,7 +11052,7 @@

          Example

          -def chat_unfurl(self,
          *,
          channel: str | None = None,
          ts: str | None = None,
          source: str | None = None,
          unfurl_id: str | None = None,
          unfurls: Dict[str, Dict] | None = None,
          user_auth_blocks: str | Sequence[Dict | Block] | None = None,
          user_auth_message: str | None = None,
          user_auth_required: bool | None = None,
          user_auth_url: str | None = None,
          **kwargs) ‑> SlackResponse
          +def chat_unfurl(self,
          *,
          channel: str | None = None,
          ts: str | None = None,
          source: str | None = None,
          unfurl_id: str | None = None,
          unfurls: Dict[str, Dict] | None = None,
          metadata: Dict | EventAndEntityMetadata | None = None,
          user_auth_blocks: str | Sequence[Dict | Block] | None = None,
          user_auth_message: str | None = None,
          user_auth_required: bool | None = None,
          user_auth_url: str | None = None,
          **kwargs) ‑> SlackResponse
          @@ -10798,6 +11067,7 @@

          Example

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -10814,6 +11084,7 @@

          Example

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -11845,6 +12116,41 @@

          Example

          +
          +def entity_presentDetails(self,
          trigger_id: str,
          metadata: Dict | EntityMetadata | None = None,
          user_auth_required: bool | None = None,
          user_auth_url: str | None = None,
          error: Dict[str, Any] | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def entity_presentDetails(
          +    self,
          +    trigger_id: str,
          +    metadata: Optional[Union[Dict, EntityMetadata]] = None,
          +    user_auth_required: Optional[bool] = None,
          +    user_auth_url: Optional[str] = None,
          +    error: Optional[Dict[str, Any]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Provides entity details for the flexpane.
          +    https://docs.slack.dev/reference/methods/entity.presentDetails/
          +    """
          +    kwargs.update({"trigger_id": trigger_id})
          +    if metadata is not None:
          +        kwargs.update({"metadata": metadata})
          +    if user_auth_required is not None:
          +        kwargs.update({"user_auth_required": user_auth_required})
          +    if user_auth_url is not None:
          +        kwargs.update({"user_auth_url": user_auth_url})
          +    if error is not None:
          +        kwargs.update({"error": error})
          +    _parse_web_class_objects(kwargs)
          +    return self.api_call("entity.presentDetails", json=kwargs)
          +
          +

          Provides entity details for the flexpane. +https://docs.slack.dev/reference/methods/entity.presentDetails/

          +
          def files_comments_delete(self, *, file: str, id: str, **kwargs) ‑> SlackResponse
          @@ -13820,6 +14126,381 @@

          Example

          Searches for messages matching a query. https://docs.slack.dev/reference/methods/search.messages

          +
          +def slackLists_access_delete(self,
          *,
          list_id: str,
          channel_ids: List[str] | None = None,
          user_ids: List[str] | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_access_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Revoke access to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.delete
          +    """
          +    kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.access.delete", json=kwargs)
          +
          +

          Revoke access to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.delete

          +
          +
          +def slackLists_access_set(self,
          *,
          list_id: str,
          access_level: str,
          channel_ids: List[str] | None = None,
          user_ids: List[str] | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_access_set(
          +    self,
          +    *,
          +    list_id: str,
          +    access_level: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Set the access level to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.set
          +    """
          +    kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.access.set", json=kwargs)
          +
          +

          Set the access level to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.set

          +
          +
          +def slackLists_create(self,
          *,
          name: str,
          description_blocks: str | Sequence[Dict | RichTextBlock] | None = None,
          schema: List[Dict[str, Any]] | None = None,
          copy_from_list_id: str | None = None,
          include_copied_list_records: bool | None = None,
          todo_mode: bool | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_create(
          +    self,
          +    *,
          +    name: str,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    schema: Optional[List[Dict[str, Any]]] = None,
          +    copy_from_list_id: Optional[str] = None,
          +    include_copied_list_records: Optional[bool] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Creates a List.
          +    https://docs.slack.dev/reference/methods/slackLists.create
          +    """
          +    kwargs.update(
          +        {
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "schema": schema,
          +            "copy_from_list_id": copy_from_list_id,
          +            "include_copied_list_records": include_copied_list_records,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.create", json=kwargs)
          +
          + +
          +
          +def slackLists_download_get(self, *, list_id: str, job_id: str, **kwargs) ‑> SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_download_get(
          +    self,
          +    *,
          +    list_id: str,
          +    job_id: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Retrieve List download URL from an export job to download List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.get
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "job_id": job_id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.download.get", json=kwargs)
          +
          +

          Retrieve List download URL from an export job to download List contents. +https://docs.slack.dev/reference/methods/slackLists.download.get

          +
          +
          +def slackLists_download_start(self, *, list_id: str, include_archived: bool | None = None, **kwargs) ‑> SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_download_start(
          +    self,
          +    *,
          +    list_id: str,
          +    include_archived: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Initiate a job to export List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.start
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "include_archived": include_archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.download.start", json=kwargs)
          +
          + +
          +
          +def slackLists_items_create(self,
          *,
          list_id: str,
          duplicated_item_id: str | None = None,
          parent_item_id: str | None = None,
          initial_fields: List[Dict[str, Any]] | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_items_create(
          +    self,
          +    *,
          +    list_id: str,
          +    duplicated_item_id: Optional[str] = None,
          +    parent_item_id: Optional[str] = None,
          +    initial_fields: Optional[List[Dict[str, Any]]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Add a new item to an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.create
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "duplicated_item_id": duplicated_item_id,
          +            "parent_item_id": parent_item_id,
          +            "initial_fields": initial_fields,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.create", json=kwargs)
          +
          + +
          +
          +def slackLists_items_delete(self, *, list_id: str, id: str, **kwargs) ‑> SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Deletes an item from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.delete
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.delete", json=kwargs)
          +
          + +
          +
          +def slackLists_items_deleteMultiple(self, *, list_id: str, ids: List[str], **kwargs) ‑> SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_deleteMultiple(
          +    self,
          +    *,
          +    list_id: str,
          +    ids: List[str],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Deletes multiple items from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "ids": ids,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.deleteMultiple", json=kwargs)
          +
          + +
          +
          +def slackLists_items_info(self, *, list_id: str, id: str, include_is_subscribed: bool | None = None, **kwargs) ‑> SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_info(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    include_is_subscribed: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Get a row from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.info
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +            "include_is_subscribed": include_is_subscribed,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.info", json=kwargs)
          +
          + +
          +
          +def slackLists_items_list(self,
          *,
          list_id: str,
          limit: int | None = None,
          cursor: str | None = None,
          archived: bool | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_items_list(
          +    self,
          +    *,
          +    list_id: str,
          +    limit: Optional[int] = None,
          +    cursor: Optional[str] = None,
          +    archived: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Get records from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.list
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "limit": limit,
          +            "cursor": cursor,
          +            "archived": archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.list", json=kwargs)
          +
          + +
          +
          +def slackLists_items_update(self, *, list_id: str, cells: List[Dict[str, Any]], **kwargs) ‑> SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_update(
          +    self,
          +    *,
          +    list_id: str,
          +    cells: List[Dict[str, Any]],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Updates cells in a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.update
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "cells": cells,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.update", json=kwargs)
          +
          + +
          +
          +def slackLists_update(self,
          *,
          id: str,
          name: str | None = None,
          description_blocks: str | Sequence[Dict | RichTextBlock] | None = None,
          todo_mode: bool | None = None,
          **kwargs) ‑> SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_update(
          +    self,
          +    *,
          +    id: str,
          +    name: Optional[str] = None,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Update a List.
          +    https://docs.slack.dev/reference/methods/slackLists.update
          +    """
          +    kwargs.update(
          +        {
          +            "id": id,
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.update", json=kwargs)
          +
          + +
          def stars_add(self,
          *,
          channel: str | None = None,
          file: str | None = None,
          file_comment: str | None = None,
          timestamp: str | None = None,
          **kwargs) ‑> SlackResponse
          @@ -15362,6 +16043,7 @@

          Web
        • dnd_setSnooze
        • dnd_teamInfo
        • emoji_list
        • +
        • entity_presentDetails
        • files_comments_delete
        • files_completeUploadExternal
        • files_delete
        • @@ -15431,6 +16113,18 @@

          Web
        • search_all
        • search_files
        • search_messages
        • +
        • slackLists_access_delete
        • +
        • slackLists_access_set
        • +
        • slackLists_create
        • +
        • slackLists_download_get
        • +
        • slackLists_download_start
        • +
        • slackLists_items_create
        • +
        • slackLists_items_delete
        • +
        • slackLists_items_deleteMultiple
        • +
        • slackLists_items_info
        • +
        • slackLists_items_list
        • +
        • slackLists_items_update
        • +
        • slackLists_update
        • stars_add
        • stars_list
        • stars_remove
        • diff --git a/docs/reference/web/legacy_client.html b/docs/reference/web/legacy_client.html index 70cc6988d..d100178dc 100644 --- a/docs/reference/web/legacy_client.html +++ b/docs/reference/web/legacy_client.html @@ -2789,7 +2789,7 @@

          Classes

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: @@ -2955,6 +2955,7 @@

          Classes

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -2971,6 +2972,7 @@

          Classes

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -3602,6 +3604,30 @@

          Classes

          kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) + def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return self.api_call("entity.presentDetails", json=kwargs) + def files_comments_delete( self, *, @@ -4856,6 +4882,249 @@

          Classes

          ) return self.api_call("search.messages", http_verb="GET", params=kwargs) + def slackLists_access_delete( + self, + *, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete + """ + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.delete", json=kwargs) + + def slackLists_access_set( + self, + *, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.set", json=kwargs) + + def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create + """ + kwargs.update( + { + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.create", json=kwargs) + + def slackLists_download_get( + self, + *, + list_id: str, + job_id: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get + """ + kwargs.update( + { + "list_id": list_id, + "job_id": job_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.get", json=kwargs) + + def slackLists_download_start( + self, + *, + list_id: str, + include_archived: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start + """ + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.start", json=kwargs) + + def slackLists_items_create( + self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create + """ + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.create", json=kwargs) + + def slackLists_items_delete( + self, + *, + list_id: str, + id: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.delete", json=kwargs) + + def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.info", json=kwargs) + + def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.list", json=kwargs) + + def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.update", json=kwargs) + + def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.update", json=kwargs) + def stars_add( self, *, @@ -10002,7 +10271,7 @@

          Methods

          https://docs.slack.dev/reference/methods/chat.postEphemeral

          -def chat_postMessage(self,
          *,
          channel: str,
          text: str | None = None,
          as_user: bool | None = None,
          attachments: str | Sequence[Dict | Attachment] | None = None,
          blocks: str | Sequence[Dict | Block] | None = None,
          thread_ts: str | None = None,
          reply_broadcast: bool | None = None,
          unfurl_links: bool | None = None,
          unfurl_media: bool | None = None,
          container_id: str | None = None,
          icon_emoji: str | None = None,
          icon_url: str | None = None,
          mrkdwn: bool | None = None,
          link_names: bool | None = None,
          username: str | None = None,
          parse: str | None = None,
          metadata: Dict | Metadata | None = None,
          markdown_text: str | None = None,
          **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          +def chat_postMessage(self,
          *,
          channel: str,
          text: str | None = None,
          as_user: bool | None = None,
          attachments: str | Sequence[Dict | Attachment] | None = None,
          blocks: str | Sequence[Dict | Block] | None = None,
          thread_ts: str | None = None,
          reply_broadcast: bool | None = None,
          unfurl_links: bool | None = None,
          unfurl_media: bool | None = None,
          container_id: str | None = None,
          icon_emoji: str | None = None,
          icon_url: str | None = None,
          mrkdwn: bool | None = None,
          link_names: bool | None = None,
          username: str | None = None,
          parse: str | None = None,
          metadata: Dict | Metadata | EventAndEntityMetadata | None = None,
          markdown_text: str | None = None,
          **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          @@ -10028,7 +10297,7 @@

          Methods

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: @@ -10234,7 +10503,7 @@

          Methods

          https://docs.slack.dev/reference/methods/chat.stopStream

          -def chat_unfurl(self,
          *,
          channel: str | None = None,
          ts: str | None = None,
          source: str | None = None,
          unfurl_id: str | None = None,
          unfurls: Dict[str, Dict] | None = None,
          user_auth_blocks: str | Sequence[Dict | Block] | None = None,
          user_auth_message: str | None = None,
          user_auth_required: bool | None = None,
          user_auth_url: str | None = None,
          **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          +def chat_unfurl(self,
          *,
          channel: str | None = None,
          ts: str | None = None,
          source: str | None = None,
          unfurl_id: str | None = None,
          unfurls: Dict[str, Dict] | None = None,
          metadata: Dict | EventAndEntityMetadata | None = None,
          user_auth_blocks: str | Sequence[Dict | Block] | None = None,
          user_auth_message: str | None = None,
          user_auth_required: bool | None = None,
          user_auth_url: str | None = None,
          **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          @@ -10249,6 +10518,7 @@

          Methods

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -10265,6 +10535,7 @@

          Methods

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -11296,6 +11567,41 @@

          Methods

          +
          +def entity_presentDetails(self,
          trigger_id: str,
          metadata: Dict | EntityMetadata | None = None,
          user_auth_required: bool | None = None,
          user_auth_url: str | None = None,
          error: Dict[str, Any] | None = None,
          **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          +
          +
          +
          + +Expand source code + +
          def entity_presentDetails(
          +    self,
          +    trigger_id: str,
          +    metadata: Optional[Union[Dict, EntityMetadata]] = None,
          +    user_auth_required: Optional[bool] = None,
          +    user_auth_url: Optional[str] = None,
          +    error: Optional[Dict[str, Any]] = None,
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Provides entity details for the flexpane.
          +    https://docs.slack.dev/reference/methods/entity.presentDetails/
          +    """
          +    kwargs.update({"trigger_id": trigger_id})
          +    if metadata is not None:
          +        kwargs.update({"metadata": metadata})
          +    if user_auth_required is not None:
          +        kwargs.update({"user_auth_required": user_auth_required})
          +    if user_auth_url is not None:
          +        kwargs.update({"user_auth_url": user_auth_url})
          +    if error is not None:
          +        kwargs.update({"error": error})
          +    _parse_web_class_objects(kwargs)
          +    return self.api_call("entity.presentDetails", json=kwargs)
          +
          +

          Provides entity details for the flexpane. +https://docs.slack.dev/reference/methods/entity.presentDetails/

          +
          def files_comments_delete(self, *, file: str, id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          @@ -13271,6 +13577,381 @@

          Methods

          Searches for messages matching a query. https://docs.slack.dev/reference/methods/search.messages

          +
          +def slackLists_access_delete(self,
          *,
          list_id: str,
          channel_ids: List[str] | None = None,
          user_ids: List[str] | None = None,
          **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_access_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Revoke access to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.delete
          +    """
          +    kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.access.delete", json=kwargs)
          +
          +

          Revoke access to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.delete

          +
          +
          +def slackLists_access_set(self,
          *,
          list_id: str,
          access_level: str,
          channel_ids: List[str] | None = None,
          user_ids: List[str] | None = None,
          **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_access_set(
          +    self,
          +    *,
          +    list_id: str,
          +    access_level: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Set the access level to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.set
          +    """
          +    kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.access.set", json=kwargs)
          +
          +

          Set the access level to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.set

          +
          +
          +def slackLists_create(self,
          *,
          name: str,
          description_blocks: str | Sequence[Dict | RichTextBlock] | None = None,
          schema: List[Dict[str, Any]] | None = None,
          copy_from_list_id: str | None = None,
          include_copied_list_records: bool | None = None,
          todo_mode: bool | None = None,
          **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_create(
          +    self,
          +    *,
          +    name: str,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    schema: Optional[List[Dict[str, Any]]] = None,
          +    copy_from_list_id: Optional[str] = None,
          +    include_copied_list_records: Optional[bool] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Creates a List.
          +    https://docs.slack.dev/reference/methods/slackLists.create
          +    """
          +    kwargs.update(
          +        {
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "schema": schema,
          +            "copy_from_list_id": copy_from_list_id,
          +            "include_copied_list_records": include_copied_list_records,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.create", json=kwargs)
          +
          + +
          +
          +def slackLists_download_get(self, *, list_id: str, job_id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_download_get(
          +    self,
          +    *,
          +    list_id: str,
          +    job_id: str,
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Retrieve List download URL from an export job to download List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.get
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "job_id": job_id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.download.get", json=kwargs)
          +
          +

          Retrieve List download URL from an export job to download List contents. +https://docs.slack.dev/reference/methods/slackLists.download.get

          +
          +
          +def slackLists_download_start(self, *, list_id: str, include_archived: bool | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_download_start(
          +    self,
          +    *,
          +    list_id: str,
          +    include_archived: Optional[bool] = None,
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Initiate a job to export List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.start
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "include_archived": include_archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.download.start", json=kwargs)
          +
          + +
          +
          +def slackLists_items_create(self,
          *,
          list_id: str,
          duplicated_item_id: str | None = None,
          parent_item_id: str | None = None,
          initial_fields: List[Dict[str, Any]] | None = None,
          **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_items_create(
          +    self,
          +    *,
          +    list_id: str,
          +    duplicated_item_id: Optional[str] = None,
          +    parent_item_id: Optional[str] = None,
          +    initial_fields: Optional[List[Dict[str, Any]]] = None,
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Add a new item to an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.create
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "duplicated_item_id": duplicated_item_id,
          +            "parent_item_id": parent_item_id,
          +            "initial_fields": initial_fields,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.create", json=kwargs)
          +
          + +
          +
          +def slackLists_items_delete(self, *, list_id: str, id: str, **kwargs) ‑> _asyncio.Future | LegacySlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Deletes an item from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.delete
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.delete", json=kwargs)
          +
          + +
          +
          +def slackLists_items_deleteMultiple(self, *, list_id: str, ids: List[str], **kwargs) ‑> _asyncio.Future | LegacySlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_deleteMultiple(
          +    self,
          +    *,
          +    list_id: str,
          +    ids: List[str],
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Deletes multiple items from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "ids": ids,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.deleteMultiple", json=kwargs)
          +
          + +
          +
          +def slackLists_items_info(self, *, list_id: str, id: str, include_is_subscribed: bool | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_info(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    include_is_subscribed: Optional[bool] = None,
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Get a row from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.info
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +            "include_is_subscribed": include_is_subscribed,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.info", json=kwargs)
          +
          + +
          +
          +def slackLists_items_list(self,
          *,
          list_id: str,
          limit: int | None = None,
          cursor: str | None = None,
          archived: bool | None = None,
          **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_items_list(
          +    self,
          +    *,
          +    list_id: str,
          +    limit: Optional[int] = None,
          +    cursor: Optional[str] = None,
          +    archived: Optional[bool] = None,
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Get records from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.list
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "limit": limit,
          +            "cursor": cursor,
          +            "archived": archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.list", json=kwargs)
          +
          + +
          +
          +def slackLists_items_update(self, *, list_id: str, cells: List[Dict[str, Any]], **kwargs) ‑> _asyncio.Future | LegacySlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_update(
          +    self,
          +    *,
          +    list_id: str,
          +    cells: List[Dict[str, Any]],
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Updates cells in a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.update
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "cells": cells,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.update", json=kwargs)
          +
          + +
          +
          +def slackLists_update(self,
          *,
          id: str,
          name: str | None = None,
          description_blocks: str | Sequence[Dict | RichTextBlock] | None = None,
          todo_mode: bool | None = None,
          **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_update(
          +    self,
          +    *,
          +    id: str,
          +    name: Optional[str] = None,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> Union[Future, SlackResponse]:
          +    """Update a List.
          +    https://docs.slack.dev/reference/methods/slackLists.update
          +    """
          +    kwargs.update(
          +        {
          +            "id": id,
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.update", json=kwargs)
          +
          + +
          def stars_add(self,
          *,
          channel: str | None = None,
          file: str | None = None,
          file_comment: str | None = None,
          timestamp: str | None = None,
          **kwargs) ‑> _asyncio.Future | LegacySlackResponse
          @@ -14785,6 +15466,7 @@

          dnd_setSnooze
        • dnd_teamInfo
        • emoji_list
        • +
        • entity_presentDetails
        • files_comments_delete
        • files_completeUploadExternal
        • files_delete
        • @@ -14854,6 +15536,18 @@

          search_all
        • search_files
        • search_messages
        • +
        • slackLists_access_delete
        • +
        • slackLists_access_set
        • +
        • slackLists_create
        • +
        • slackLists_download_get
        • +
        • slackLists_download_start
        • +
        • slackLists_items_create
        • +
        • slackLists_items_delete
        • +
        • slackLists_items_deleteMultiple
        • +
        • slackLists_items_info
        • +
        • slackLists_items_list
        • +
        • slackLists_items_update
        • +
        • slackLists_update
        • stars_add
        • stars_list
        • stars_remove
        • diff --git a/slack_sdk/version.py b/slack_sdk/version.py index c787aa278..fb572e0ba 100644 --- a/slack_sdk/version.py +++ b/slack_sdk/version.py @@ -1,3 +1,3 @@ """Check the latest version at https://pypi.org/project/slack-sdk/""" -__version__ = "3.38.0" +__version__ = "3.39.0" From 1244019c77c17da56526cce0381bbc9063bda78c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 15:20:53 -0500 Subject: [PATCH 58/72] chore(deps): bump actions/checkout from 5.0.0 to 6.0.0 (#1799) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/pypi-release.yml | 2 +- .github/workflows/tests.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml index 21b472247..24ae2eb75 100644 --- a/.github/workflows/pypi-release.yml +++ b/.github/workflows/pypi-release.yml @@ -18,7 +18,7 @@ jobs: contents: read steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: ref: ${{ github.event.release.tag_name || github.ref }} persist-credentials: false diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 92ed007c8..18db5d80d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -21,7 +21,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} @@ -54,7 +54,7 @@ jobs: CI_LARGE_SOCKET_MODE_PAYLOAD_TESTING_DISABLED: "1" FORCE_COLOR: "1" steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} From fe1f38eea302a0a7716763fee136b82f0bf86ab9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 15:33:27 -0500 Subject: [PATCH 59/72] chore(deps): bump actions/setup-python from 6.0.0 to 6.1.0 (#1800) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: William Bergamin --- .github/workflows/pypi-release.yml | 2 +- .github/workflows/tests.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml index 24ae2eb75..80fac6d8c 100644 --- a/.github/workflows/pypi-release.yml +++ b/.github/workflows/pypi-release.yml @@ -24,7 +24,7 @@ jobs: persist-credentials: false - name: Set up Python - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: "3.x" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 18db5d80d..ac34e26fd 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -25,7 +25,7 @@ jobs: with: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: ${{ matrix.python-version }} - name: Run mypy verification @@ -58,7 +58,7 @@ jobs: with: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: ${{ matrix.python-version }} cache: pip From 9b276eb4b64624397e52c0d7df12dc6798778531 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 16:03:18 -0500 Subject: [PATCH 60/72] chore(deps): bump docutils from 0.22.2 to 0.22.3 (#1802) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/documentation.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/documentation.txt b/requirements/documentation.txt index af8c47639..26d7aaa41 100644 --- a/requirements/documentation.txt +++ b/requirements/documentation.txt @@ -1,2 +1,2 @@ -docutils==0.22.2 +docutils==0.22.3 pdoc3==0.11.6 From 4601f8a82836cf649ffe0f5d7b08061882d6361f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 11:19:24 -0500 Subject: [PATCH 61/72] chore(deps): update mypy requirement from <=1.18.2 to <=1.19.0 (#1801) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Michael Brooks Co-authored-by: William Bergamin --- requirements/tools.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/requirements/tools.txt b/requirements/tools.txt index 0a646dc12..dd09cd46f 100644 --- a/requirements/tools.txt +++ b/requirements/tools.txt @@ -1,4 +1,6 @@ -mypy<=1.18.2 +# We only need to install mypy with CPython runtimes +# Typechecking using the PyPy runtime is not planned +mypy<=1.19.0; platform_python_implementation == "CPython" # while flake8 5.x have issues with Python 3.12, flake8 6.x requires Python >= 3.8.1, # so 5.x should be kept in order to stay compatible with Python 3.7/3.8 flake8>=5.0.4,<8 From dfa5e5f01020df1782ffd2ed65a8a781218fc664 Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Fri, 5 Dec 2025 15:38:18 -0500 Subject: [PATCH 62/72] fix: improve CI and helper scripts (#1803) Co-authored-by: Eden Zimbelman --- .github/workflows/{tests.yml => ci-build.yml} | 45 +++++++++++++------ requirements/testing.txt | 1 - requirements/tools.txt | 4 +- scripts/format.sh | 7 ++- scripts/lint.sh | 14 ++++++ scripts/run_integration_tests.sh | 5 ++- scripts/run_mypy.sh | 3 +- scripts/run_unit_tests.sh | 6 ++- scripts/run_validation.sh | 9 ++-- 9 files changed, 65 insertions(+), 29 deletions(-) rename .github/workflows/{tests.yml => ci-build.yml} (79%) create mode 100755 scripts/lint.sh diff --git a/.github/workflows/tests.yml b/.github/workflows/ci-build.yml similarity index 79% rename from .github/workflows/tests.yml rename to .github/workflows/ci-build.yml index ac34e26fd..7e9e4e28d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/ci-build.yml @@ -1,5 +1,4 @@ -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions -name: Test +name: Python CI on: push: @@ -10,27 +9,44 @@ on: - cron: "0 0 * * *" workflow_dispatch: +env: + LATEST_SUPPORTED_PY: "3.14" + jobs: + lint: + name: Lint + runs-on: ubuntu-latest + timeout-minutes: 5 + permissions: + contents: read + steps: + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + with: + persist-credentials: false + - name: Set up Python ${{ env.LATEST_SUPPORTED_PY }} + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 + with: + python-version: ${{ env.LATEST_SUPPORTED_PY }} + - name: Run lint verification + run: ./scripts/lint.sh + typecheck: - name: Typechecks + name: Typecheck runs-on: ubuntu-latest timeout-minutes: 5 - strategy: - matrix: - python-version: ["3.14"] permissions: contents: read steps: - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false - - name: Set up Python ${{ matrix.python-version }} + - name: Set up Python ${{ env.LATEST_SUPPORTED_PY }} uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: - python-version: ${{ matrix.python-version }} + python-version: ${{ env.LATEST_SUPPORTED_PY }} - name: Run mypy verification - run: | - ./scripts/run_mypy.sh + run: ./scripts/run_mypy.sh + unittest: name: Unit tests runs-on: ubuntu-22.04 @@ -48,6 +64,7 @@ jobs: - "3.8" - "3.7" - "pypy3.10" + - "pypy3.11" permissions: contents: read env: @@ -67,10 +84,8 @@ jobs: pip install -U pip pip install -r requirements/testing.txt pip install -r requirements/optional.txt - - name: Run validation (black/flake8/pytest) + - name: Run tests run: | - black --check slack/ slack_sdk/ tests/ integration_tests/ - flake8 slack/ slack_sdk/ PYTHONPATH=$PWD:$PYTHONPATH pytest --cov-report=xml --cov=slack_sdk/ --junitxml=reports/test_report.xml tests/ - name: Run tests for SQLAlchemy v1.4 (backward-compatibility) run: | @@ -89,7 +104,7 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} verbose: true - name: Upload test coverage to Codecov (only with latest supported version) - if: startsWith(matrix.python-version, '3.14') + if: startsWith(matrix.python-version, env.LATEST_SUPPORTED_PY) uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: fail_ci_if_error: true @@ -98,10 +113,12 @@ jobs: report_type: coverage token: ${{ secrets.CODECOV_TOKEN }} verbose: true + notifications: name: Regression notifications runs-on: ubuntu-latest needs: + - lint - typecheck - unittest if: ${{ !success() && github.ref == 'refs/heads/main' && github.event_name != 'workflow_dispatch' }} diff --git a/requirements/testing.txt b/requirements/testing.txt index 9b702718c..9e1a3fd67 100644 --- a/requirements/testing.txt +++ b/requirements/testing.txt @@ -12,4 +12,3 @@ moto>=4.0.13,<6 # For AsyncSQLAlchemy tests greenlet<=4 aiosqlite<=1 --r tools.txt diff --git a/requirements/tools.txt b/requirements/tools.txt index dd09cd46f..4c0751dbd 100644 --- a/requirements/tools.txt +++ b/requirements/tools.txt @@ -1,6 +1,4 @@ -# We only need to install mypy with CPython runtimes -# Typechecking using the PyPy runtime is not planned -mypy<=1.19.0; platform_python_implementation == "CPython" +mypy<=1.19.0; # while flake8 5.x have issues with Python 3.12, flake8 6.x requires Python >= 3.8.1, # so 5.x should be kept in order to stay compatible with Python 3.7/3.8 flake8>=5.0.4,<8 diff --git a/scripts/format.sh b/scripts/format.sh index d4236258f..56ca68077 100755 --- a/scripts/format.sh +++ b/scripts/format.sh @@ -4,7 +4,10 @@ script_dir=`dirname $0` cd ${script_dir}/.. -pip install -U pip -pip install -U -r requirements/tools.txt +if [[ "$1" != "--no-install" ]]; then + export PIP_REQUIRE_VIRTUALENV=1 + pip install -U pip + pip install -U -r requirements/tools.txt +fi black slack/ slack_sdk/ tests/ integration_tests/ diff --git a/scripts/lint.sh b/scripts/lint.sh new file mode 100755 index 000000000..8fac67888 --- /dev/null +++ b/scripts/lint.sh @@ -0,0 +1,14 @@ + +#!/bin/bash +# ./scripts/lint.sh + +script_dir=`dirname $0` +cd ${script_dir}/.. + +if [[ "$1" != "--no-install" ]]; then + pip install -U pip + pip install -U -r requirements/tools.txt +fi + +black --check slack/ slack_sdk/ tests/ integration_tests/ +flake8 slack/ slack_sdk/ diff --git a/scripts/run_integration_tests.sh b/scripts/run_integration_tests.sh index a5d86801b..1a6f254cb 100755 --- a/scripts/run_integration_tests.sh +++ b/scripts/run_integration_tests.sh @@ -10,10 +10,11 @@ cd ${script_dir}/.. pip install -U pip pip install -U -r requirements/testing.txt \ - -U -r requirements/optional.txt + -U -r requirements/optional.txt \ + -U -r requirements/tools.txt echo "Generating code ..." && python scripts/codegen.py --path . -echo "Running black (code formatter) ..." && black slack_sdk/ +echo "Running black (code formatter) ..." && ./scripts/format.sh --no-install test_target="${1:-tests/integration_tests/}" PYTHONPATH=$PWD:$PYTHONPATH pytest $test_target diff --git a/scripts/run_mypy.sh b/scripts/run_mypy.sh index 0d27346bc..cc1146f15 100755 --- a/scripts/run_mypy.sh +++ b/scripts/run_mypy.sh @@ -8,6 +8,7 @@ cd ${script_dir}/.. pip install -U pip setuptools wheel pip install -U -r requirements/testing.txt \ - -U -r requirements/optional.txt + -U -r requirements/optional.txt \ + -U -r requirements/tools.txt mypy --config-file pyproject.toml diff --git a/scripts/run_unit_tests.sh b/scripts/run_unit_tests.sh index cec153388..c8ab0af78 100755 --- a/scripts/run_unit_tests.sh +++ b/scripts/run_unit_tests.sh @@ -10,10 +10,12 @@ cd ${script_dir}/.. pip install -U pip pip install -U -r requirements/testing.txt \ - -U -r requirements/optional.txt + -U -r requirements/optional.txt \ + -U -r requirements/tools.txt echo "Generating code ..." && python scripts/codegen.py --path . -echo "Running black (code formatter) ..." && black slack_sdk/ +echo "Running black (code formatter) ..." && ./scripts/format.sh --no-install +echo "Running tests ..." test_target="${1:-tests/}" PYTHONPATH=$PWD:$PYTHONPATH pytest $test_target diff --git a/scripts/run_validation.sh b/scripts/run_validation.sh index 8a61d03a6..366f0d321 100755 --- a/scripts/run_validation.sh +++ b/scripts/run_validation.sh @@ -8,13 +8,14 @@ script_dir=`dirname $0` cd ${script_dir}/.. pip install -U -r requirements/testing.txt \ - -U -r requirements/optional.txt + -U -r requirements/optional.txt \ + -U -r requirements/tools.txt echo "Generating code ..." && python scripts/codegen.py --path . -echo "Running black (code formatter) ..." && black slack_sdk/ +echo "Running black (code formatter) ..." && ./scripts/format.sh --no-install -black --check slack/ slack_sdk/ tests/ integration_tests/ -flake8 slack/ slack_sdk/ +echo "Running linting checks ..." && ./scripts/lint.sh --no-install +echo "Running tests with coverage reporting ..." test_target="${1:-tests/}" PYTHONPATH=$PWD:$PYTHONPATH pytest --cov-report=xml --cov=slack_sdk/ $test_target From b7eb2f973b4497b5d0e44ff5dcc52d40a51d7daa Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Fri, 5 Dec 2025 15:55:29 -0500 Subject: [PATCH 63/72] fix: move away from datetime.utcfromtimestamp for the state and installation stores (#1798) --- integration_tests/samples/oauth/oauth_v2.py | 10 ++++- .../samples/oauth/oauth_v2_async.py | 8 +++- .../oauth/installation_store/models/bot.py | 8 ++-- .../installation_store/models/installation.py | 12 ++++-- .../oauth/state_store/sqlalchemy/__init__.py | 10 ++--- .../oauth/installation_store/test_models.py | 43 +++++++++++++++++++ 6 files changed, 76 insertions(+), 15 deletions(-) diff --git a/integration_tests/samples/oauth/oauth_v2.py b/integration_tests/samples/oauth/oauth_v2.py index 5741b4ef8..c1c32d879 100644 --- a/integration_tests/samples/oauth/oauth_v2.py +++ b/integration_tests/samples/oauth/oauth_v2.py @@ -123,13 +123,19 @@ def oauth_callback(): @app.route("/slack/events", methods=["POST"]) def slack_app(): + data = request.get_data() if not signature_verifier.is_valid( - body=request.get_data(), + body=data, timestamp=request.headers.get("X-Slack-Request-Timestamp"), signature=request.headers.get("X-Slack-Signature"), ): return make_response("invalid request", 403) + if data and b"url_verification" in data: + body = json.loads(data) + if body.get("type") == "url_verification" and "challenge" in body: + return make_response(body["challenge"], 200) + if "command" in request.form and request.form["command"] == "/open-modal": try: enterprise_id = request.form.get("enterprise_id") @@ -193,4 +199,4 @@ def slack_app(): # python3 integration_tests/samples/oauth/oauth_v2.py # ngrok http 3000 - # https://{yours}.ngrok.io/slack/oauth/start + # https://{yours}.ngrok.io/slack/install diff --git a/integration_tests/samples/oauth/oauth_v2_async.py b/integration_tests/samples/oauth/oauth_v2_async.py index c43add6f3..588b0b5f0 100644 --- a/integration_tests/samples/oauth/oauth_v2_async.py +++ b/integration_tests/samples/oauth/oauth_v2_async.py @@ -135,13 +135,19 @@ async def oauth_callback(req: Request): @app.post("/slack/events") async def slack_app(req: Request): + data = req.body.decode("utf-8") if not signature_verifier.is_valid( - body=req.body.decode("utf-8"), + body=data, timestamp=req.headers.get("X-Slack-Request-Timestamp"), signature=req.headers.get("X-Slack-Signature"), ): return HTTPResponse(status=403, body="invalid request") + if data and "url_verification" in data: + body = json.loads(data) + if body.get("type") == "url_verification" and "challenge" in body: + return HTTPResponse(status=200, body=body["challenge"]) + if "command" in req.form and req.form.get("command") == "/open-modal": try: enterprise_id = req.form.get("enterprise_id") diff --git a/slack_sdk/oauth/installation_store/models/bot.py b/slack_sdk/oauth/installation_store/models/bot.py index 52c1dac50..3f2f6de81 100644 --- a/slack_sdk/oauth/installation_store/models/bot.py +++ b/slack_sdk/oauth/installation_store/models/bot.py @@ -1,4 +1,4 @@ -from datetime import datetime +from datetime import datetime, timezone from time import time from typing import Optional, Union, Dict, Any, Sequence @@ -100,10 +100,12 @@ def _to_standard_value_dict(self) -> Dict[str, Any]: "bot_scopes": ",".join(self.bot_scopes) if self.bot_scopes else None, "bot_refresh_token": self.bot_refresh_token, "bot_token_expires_at": ( - datetime.utcfromtimestamp(self.bot_token_expires_at) if self.bot_token_expires_at is not None else None + datetime.fromtimestamp(self.bot_token_expires_at, tz=timezone.utc) + if self.bot_token_expires_at is not None + else None ), "is_enterprise_install": self.is_enterprise_install, - "installed_at": datetime.utcfromtimestamp(self.installed_at), + "installed_at": datetime.fromtimestamp(self.installed_at, tz=timezone.utc), } def to_dict_for_copying(self) -> Dict[str, Any]: diff --git a/slack_sdk/oauth/installation_store/models/installation.py b/slack_sdk/oauth/installation_store/models/installation.py index 91c6510f2..18ca8e0b1 100644 --- a/slack_sdk/oauth/installation_store/models/installation.py +++ b/slack_sdk/oauth/installation_store/models/installation.py @@ -1,4 +1,4 @@ -from datetime import datetime +from datetime import datetime, timezone from time import time from typing import Optional, Union, Dict, Any, Sequence @@ -173,14 +173,18 @@ def _to_standard_value_dict(self) -> Dict[str, Any]: "bot_scopes": ",".join(self.bot_scopes) if self.bot_scopes else None, "bot_refresh_token": self.bot_refresh_token, "bot_token_expires_at": ( - datetime.utcfromtimestamp(self.bot_token_expires_at) if self.bot_token_expires_at is not None else None + datetime.fromtimestamp(self.bot_token_expires_at, tz=timezone.utc) + if self.bot_token_expires_at is not None + else None ), "user_id": self.user_id, "user_token": self.user_token, "user_scopes": ",".join(self.user_scopes) if self.user_scopes else None, "user_refresh_token": self.user_refresh_token, "user_token_expires_at": ( - datetime.utcfromtimestamp(self.user_token_expires_at) if self.user_token_expires_at is not None else None + datetime.fromtimestamp(self.user_token_expires_at, tz=timezone.utc) + if self.user_token_expires_at is not None + else None ), "incoming_webhook_url": self.incoming_webhook_url, "incoming_webhook_channel": self.incoming_webhook_channel, @@ -188,7 +192,7 @@ def _to_standard_value_dict(self) -> Dict[str, Any]: "incoming_webhook_configuration_url": self.incoming_webhook_configuration_url, "is_enterprise_install": self.is_enterprise_install, "token_type": self.token_type, - "installed_at": datetime.utcfromtimestamp(self.installed_at), + "installed_at": datetime.fromtimestamp(self.installed_at, tz=timezone.utc), } def to_dict_for_copying(self) -> Dict[str, Any]: diff --git a/slack_sdk/oauth/state_store/sqlalchemy/__init__.py b/slack_sdk/oauth/state_store/sqlalchemy/__init__.py index b26f642cd..8bb3ec1ff 100644 --- a/slack_sdk/oauth/state_store/sqlalchemy/__init__.py +++ b/slack_sdk/oauth/state_store/sqlalchemy/__init__.py @@ -1,6 +1,6 @@ import logging import time -from datetime import datetime +from datetime import datetime, timezone from logging import Logger from uuid import uuid4 @@ -55,7 +55,7 @@ def logger(self) -> Logger: def issue(self, *args, **kwargs) -> str: state: str = str(uuid4()) - now = datetime.utcfromtimestamp(time.time() + self.expiration_seconds) + now = datetime.fromtimestamp(time.time() + self.expiration_seconds, tz=timezone.utc) with self.engine.begin() as conn: conn.execute( self.oauth_states.insert(), @@ -67,7 +67,7 @@ def consume(self, state: str) -> bool: try: with self.engine.begin() as conn: c = self.oauth_states.c - query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > datetime.utcnow())) + query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > datetime.now(tz=timezone.utc))) result = conn.execute(query) for row in result.mappings(): self.logger.debug(f"consume's query result: {row}") @@ -124,7 +124,7 @@ def logger(self) -> Logger: async def async_issue(self, *args, **kwargs) -> str: state: str = str(uuid4()) - now = datetime.utcfromtimestamp(time.time() + self.expiration_seconds) + now = datetime.fromtimestamp(time.time() + self.expiration_seconds, tz=timezone.utc) async with self.engine.begin() as conn: await conn.execute( self.oauth_states.insert(), @@ -136,7 +136,7 @@ async def async_consume(self, state: str) -> bool: try: async with self.engine.begin() as conn: c = self.oauth_states.c - query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > datetime.utcnow())) + query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > datetime.now(tz=timezone.utc))) result = await conn.execute(query) for row in result.mappings(): self.logger.debug(f"consume's query result: {row}") diff --git a/tests/slack_sdk/oauth/installation_store/test_models.py b/tests/slack_sdk/oauth/installation_store/test_models.py index d63964be6..43b1ec7b2 100644 --- a/tests/slack_sdk/oauth/installation_store/test_models.py +++ b/tests/slack_sdk/oauth/installation_store/test_models.py @@ -1,4 +1,5 @@ import time +from datetime import datetime, timezone import unittest from slack_sdk.oauth.installation_store import Installation, FileInstallationStore, Bot @@ -36,6 +37,22 @@ def test_bot_custom_fields(self): self.assertEqual(bot.to_dict().get("service_user_id"), "XYZ123") self.assertEqual(bot.to_dict_for_copying().get("custom_values").get("service_user_id"), "XYZ123") + def test_bot_datetime_manipulation(self): + expected_timestamp = datetime.now(tz=timezone.utc) + bot = Bot( + bot_token="xoxb-", + bot_id="B111", + bot_user_id="U111", + bot_token_expires_at=expected_timestamp, + installed_at=expected_timestamp, + ) + bot_dict = bot.to_dict() + self.assertIsNotNone(bot_dict) + self.assertEqual( + bot_dict.get("bot_token_expires_at").isoformat(), expected_timestamp.strftime("%Y-%m-%dT%H:%M:%S+00:00") + ) + self.assertEqual(bot_dict.get("installed_at"), expected_timestamp) + def test_installation(self): installation = Installation( app_id="A111", @@ -84,3 +101,29 @@ def test_installation_custom_fields(self): self.assertEqual(bot.to_dict().get("app_id"), "A111") self.assertEqual(bot.to_dict().get("service_user_id"), "XYZ123") self.assertEqual(bot.to_dict_for_copying().get("custom_values").get("app_id"), "A222") + + def test_installation_datetime_manipulation(self): + expected_timestamp = datetime.now(tz=timezone.utc) + installation = Installation( + app_id="A111", + enterprise_id="E111", + team_id="T111", + user_id="U111", + bot_id="B111", + bot_token="xoxb-111", + bot_scopes=["chat:write"], + bot_user_id="U222", + bot_token_expires_at=expected_timestamp, + user_token_expires_at=expected_timestamp, + installed_at=expected_timestamp, + ) + installation_dict = installation.to_dict() + self.assertIsNotNone(installation_dict) + self.assertEqual( + installation_dict.get("bot_token_expires_at").isoformat(), expected_timestamp.strftime("%Y-%m-%dT%H:%M:%S+00:00") + ) + self.assertEqual( + installation_dict.get("user_token_expires_at").isoformat(), + expected_timestamp.strftime("%Y-%m-%dT%H:%M:%S+00:00"), + ) + self.assertEqual(installation_dict.get("installed_at"), expected_timestamp) From 96c0f840029f44c071f6a233b37c5d9e477d0ff7 Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Tue, 9 Dec 2025 15:29:39 -0500 Subject: [PATCH 64/72] fix: broken link to CI from readme (#1805) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 568efbea2..2d0638e7d 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@

          Python Slack SDK

          - - Tests + + Tests Codecov From 6fc2d5c082f70ca3e222a7644e6eb202f2140893 Mon Sep 17 00:00:00 2001 From: Luke Russell <31357343+lukegalbraithrussell@users.noreply.github.com> Date: Thu, 11 Dec 2025 09:09:52 -0800 Subject: [PATCH 65/72] docs: updates outmoded links (#1807) --- docs/english/audit-logs.md | 2 +- docs/english/installation.md | 2 +- docs/english/legacy/auth.md | 2 +- docs/english/web.md | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/english/audit-logs.md b/docs/english/audit-logs.md index 6f10849cb..1d8b930ce 100644 --- a/docs/english/audit-logs.md +++ b/docs/english/audit-logs.md @@ -1,6 +1,6 @@ # Audit Logs API client -The [Audit Logs API](/admins/audit-logs-api) is a set of APIs that you can use to monitor what's happening in your [Enterprise Grid](/enterprise-grid) organization. +The [Audit Logs API](/admins/audit-logs-api) is a set of APIs that you can use to monitor what's happening in your [Enterprise Grid](/enterprise) organization. The Audit Logs API can be used by Security Information and Event Management (SIEM) tools to provide an analysis of how your Slack organization is being accessed. You can also use this API to write your own apps to see how members of your organization are using Slack. diff --git a/docs/english/installation.md b/docs/english/installation.md index bf818fe22..17bae95d2 100644 --- a/docs/english/installation.md +++ b/docs/english/installation.md @@ -69,7 +69,7 @@ import os SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"] ``` -Refer to our [best practices for security](/authentication/best-practices-for-security) page for more information. +Refer to our [best practices for security](/security) page for more information. ## Installing on a single workspace {#single-workspace} diff --git a/docs/english/legacy/auth.md b/docs/english/legacy/auth.md index 82671d042..23fe0aa23 100644 --- a/docs/english/legacy/auth.md +++ b/docs/english/legacy/auth.md @@ -31,7 +31,7 @@ import os SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"] ``` -Refer to our [best practices for security](/authentication/best-practices-for-security) page for more information. +Refer to our [best practices for security](/security) page for more information. ## Installing on a single workspace {#single-workspace} diff --git a/docs/english/web.md b/docs/english/web.md index 49d6c5871..b776ce5fd 100644 --- a/docs/english/web.md +++ b/docs/english/web.md @@ -57,9 +57,9 @@ See the [`chat.postEphemeral`](/reference/methods/chat.postEphemeral) API method You can have your app's messages stream in to replicate conventional AI chatbot behavior. This is done through three Web API methods: -* [`chat_startStream`](/reference/methods/chat.startstream) -* [`chat_appendStream`](/reference/methods/chat.appendstream) -* [`chat_stopStream`](/reference/methods/chat.stopstream) +* [`chat_startStream`](/reference/methods/chat.startStream) +* [`chat_appendStream`](/reference/methods/chat.appendStream) +* [`chat_stopStream`](/reference/methods/chat.stopStream) :::tip[The Python Slack SDK provides a [`chat_stream()`](https://docs.slack.dev/tools/python-slack-sdk/reference/web/client.html#slack_sdk.web.client.WebClient.chat_stream) helper utility to streamline calling these methods.] From 3aaa16d54aeb7bd03c973c6be790f3248d97ab1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Jan 2026 08:49:56 -0800 Subject: [PATCH 66/72] chore(deps): bump actions/checkout from 6.0.0 to 6.0.1 (#1817) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-build.yml | 6 +++--- .github/workflows/pypi-release.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 7e9e4e28d..b37185760 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -20,7 +20,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: persist-credentials: false - name: Set up Python ${{ env.LATEST_SUPPORTED_PY }} @@ -37,7 +37,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: persist-credentials: false - name: Set up Python ${{ env.LATEST_SUPPORTED_PY }} @@ -71,7 +71,7 @@ jobs: CI_LARGE_SOCKET_MODE_PAYLOAD_TESTING_DISABLED: "1" FORCE_COLOR: "1" steps: - - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml index 80fac6d8c..9afa946aa 100644 --- a/.github/workflows/pypi-release.yml +++ b/.github/workflows/pypi-release.yml @@ -18,7 +18,7 @@ jobs: contents: read steps: - - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: ref: ${{ github.event.release.tag_name || github.ref }} persist-credentials: false From 47a8d4bdbcc265072dacf5a076b919e25fa0836d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Jan 2026 16:58:00 +0000 Subject: [PATCH 67/72] chore(deps): bump actions/stale from 10.1.0 to 10.1.1 (#1816) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/triage-issues.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/triage-issues.yml b/.github/workflows/triage-issues.yml index 85ccb72aa..cf13d3afc 100644 --- a/.github/workflows/triage-issues.yml +++ b/.github/workflows/triage-issues.yml @@ -16,7 +16,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0 + - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1 with: days-before-issue-stale: 30 days-before-issue-close: 10 From 763f64262f177ce86cd21c97ec546cc282340e39 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Jan 2026 15:02:24 +0000 Subject: [PATCH 68/72] chore(deps): bump docutils from 0.22.3 to 0.22.4 (#1812) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/documentation.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/documentation.txt b/requirements/documentation.txt index 26d7aaa41..57304cb53 100644 --- a/requirements/documentation.txt +++ b/requirements/documentation.txt @@ -1,2 +1,2 @@ -docutils==0.22.3 +docutils==0.22.4 pdoc3==0.11.6 From 4e575b70d9e75dfe04b810c7cc5aa22f20e26b98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Jan 2026 07:15:39 -0800 Subject: [PATCH 69/72] chore(deps): bump codecov/codecov-action from 5.5.1 to 5.5.2 (#1815) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: William Bergamin --- .github/workflows/ci-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index b37185760..c0fd021f0 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -95,7 +95,7 @@ jobs: PYTHONPATH=$PWD:$PYTHONPATH pytest tests/slack_sdk/oauth/state_store/test_sqlalchemy.py - name: Upload test results to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 + uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 with: directory: ./reports/ fail_ci_if_error: true @@ -105,7 +105,7 @@ jobs: verbose: true - name: Upload test coverage to Codecov (only with latest supported version) if: startsWith(matrix.python-version, env.LATEST_SUPPORTED_PY) - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 + uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 with: fail_ci_if_error: true # Run validation generates the coverage file From 8026611a2d6d3493a434f5f3c8852a5c63a1eb6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Jan 2026 15:23:29 +0000 Subject: [PATCH 70/72] chore(deps): bump actions/download-artifact from 6.0.0 to 7.0.0 (#1813) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/pypi-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml index 9afa946aa..7f97da9ed 100644 --- a/.github/workflows/pypi-release.yml +++ b/.github/workflows/pypi-release.yml @@ -52,7 +52,7 @@ jobs: steps: - name: Retrieve dist folder - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: release-dist path: dist/ @@ -76,7 +76,7 @@ jobs: steps: - name: Retrieve dist folder - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: release-dist path: dist/ From 6a33604c068739c4e6ee40d49402e40cb0f7f746 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Jan 2026 15:31:30 +0000 Subject: [PATCH 71/72] chore(deps): bump actions/upload-artifact from 5.0.0 to 6.0.0 (#1814) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/pypi-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml index 7f97da9ed..89a18c827 100644 --- a/.github/workflows/pypi-release.yml +++ b/.github/workflows/pypi-release.yml @@ -33,7 +33,7 @@ jobs: scripts/build_pypi_package.sh - name: Persist dist folder - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: release-dist path: dist/ From 95e80f8251292cb44be75e9f249a7dea3e054d0f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jan 2026 11:08:24 -0800 Subject: [PATCH 72/72] chore(deps): bump black from 23.3.0 to 24.3.0 in /requirements (#1786) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: William Bergamin --- requirements/tools.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/tools.txt b/requirements/tools.txt index 4c0751dbd..39946a86d 100644 --- a/requirements/tools.txt +++ b/requirements/tools.txt @@ -4,4 +4,4 @@ mypy<=1.19.0; flake8>=5.0.4,<8 # Don't change this version without running CI builds; # The latest version may not be available for older Python runtime -black==23.3.0; +black==24.3.0;