Release 2.0.12: merge main into release#442
Merged
Merged
Conversation
… message (#419) Fixes #418 ## Summary `HttpStream.close()` could send the final stream message while `_flush()` was still mid-await, causing the final message to arrive before in-flight chunks finished sending. This is the Python parity of [microsoft/teams.ts#553](microsoft/teams.ts#553) (Bug 2 only — Bug 1 from the TS PR does not affect Python; `close()` already calls `with_channel_data()` before `add_stream_final()`). ## Root cause `_wait_for_id_and_queue()` polled: ```python while (self._queue or not self._id) and not self._canceled: ``` This checks the queue and `_id` but not whether `_flush()` is currently holding `self._lock`. After the inner `while self._queue` loop drains the queue, `_flush()` awaits `_send_activity(...)` calls under the lock. During those awaits: - `self._queue` is empty (drained) - `self._id` is set (after the first chunk) - `self._lock` is still held The predicate becomes false, the wait exits, and `close()` proceeds to send the final activity — racing the in-flight chunk. ## Fix Add `self._lock.locked()` to the wait predicate. The lock primitive is already used in `close()`'s early-return guard at line 157, so this is consistent with existing patterns. ## Test plan - [x] Added `test_close_waits_for_flush_to_complete` — holds `stream._lock` manually, asserts `close()` does not send the final message until the lock is released. - [x] All existing http-stream tests still pass (14/14). - [x] Full apps test suite passes (271 passed). - [x] `poe check` passes (ruff format + lint).
## Summary Mirrors [microsoft/teams.ts#556](microsoft/teams.ts#556) in this codebase. Some valid Microsoft Entra access tokens are issued with the Azure AD v1 issuer format (`https://sts.windows.net/{tenantId}/`) instead of the v2 issuer (`https://login.microsoftonline.com/{tenantId}/v2.0`). Today `TokenValidator.for_entra` only accepts the v2 form, causing valid v1 tokens to be rejected. ## Changes - `packages/apps/src/microsoft_teams/apps/auth/token_validator.py`: when a `tenant_id` is provided, `TokenValidator.for_entra` now adds both the v2 (`{login_endpoint}/{tenant_id}/v2.0`) and v1 (`https://sts.windows.net/{tenant_id}/`) issuers to `valid_issuers`. - `packages/apps/tests/test_token_validator.py`: - Updated `test_for_entra_initialization` to assert both issuers are present. - Added `test_validate_entra_token_v1_sts_issuer` covering acceptance of a v1 `sts.windows.net` issuer through the full validation pipeline. Note: Unlike the TS PR, this change does not introduce multi-tenant `allowedTenantIds` semantics, since the Python `TokenValidator` doesn't currently expose multi-tenant configuration. The fix is kept narrowly scoped to issuer format acceptance. Reference: https://learn.microsoft.com/en-us/entra/identity-platform/access-tokens ## Test plan - `uv run pytest packages/apps/tests/test_token_validator.py -q` — all 27 tests pass, including the new v1 issuer test.
…eb (#420) Removes [uuid](https://github.com/uuidjs/uuid). It's no longer used after updating ancestor dependency [@microsoft/teams.client](https://github.com/microsoft/teams.ts/tree/HEAD/packages/client). These dependencies need to be updated together. Removes `uuid` Updates `@microsoft/teams.client` from 2.0.1 to 2.0.9 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/microsoft/teams.ts/releases">@microsoft/teams.client's releases</a>.</em></p> <blockquote> <h2>v2.0.8</h2> <h2>What's Changed</h2> <ul> <li>Bump version to 2.0.8-preview by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/502">microsoft/teams.ts#502</a></li> <li>Bump hono from 4.12.9 to 4.12.12 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/microsoft/teams.ts/pull/510">microsoft/teams.ts#510</a></li> <li>Bump <code>@hono/node-server</code> from 1.19.11 to 1.19.13 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/microsoft/teams.ts/pull/509">microsoft/teams.ts#509</a></li> <li>Bump vite from 6.4.1 to 6.4.2 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/microsoft/teams.ts/pull/514">microsoft/teams.ts#514</a></li> <li>Bump axios from 1.13.5 to 1.15.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/microsoft/teams.ts/pull/518">microsoft/teams.ts#518</a></li> <li>feat: GitHub issue analysis → Teams notification workflow by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/517">microsoft/teams.ts#517</a></li> <li>Merge User-Agent headers when cloning HTTP client by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/508">microsoft/teams.ts#508</a></li> <li>feat: graceful stream cancellation on 403 by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/513">microsoft/teams.ts#513</a></li> <li>Add sovereign cloud support (GCCH, DoD, China) by <a href="https://github.com/corinagum"><code>@corinagum</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/500">microsoft/teams.ts#500</a></li> <li>fix: drain entire queue per flush cycle by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/520">microsoft/teams.ts#520</a></li> <li>fix: resolve missing deps, broken JSON, type errors, and typos in CLI templates by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/521">microsoft/teams.ts#521</a></li> <li>feat: add missing endpoints (Paged Members, Meeting Notifs) & address client gaps by <a href="https://github.com/lilyydu"><code>@lilyydu</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/516">microsoft/teams.ts#516</a></li> <li>fix: surface Graph API error body in GraphError by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/524">microsoft/teams.ts#524</a></li> <li>fix: improve error message when app credentials are missing by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/527">microsoft/teams.ts#527</a></li> <li>Bump hono from 4.12.12 to 4.12.14 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/microsoft/teams.ts/pull/528">microsoft/teams.ts#528</a></li> <li>Bump version to 2.0.9-preview by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/531">microsoft/teams.ts#531</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/microsoft/teams.ts/compare/v2.0.7...v2.0.8">https://github.com/microsoft/teams.ts/compare/v2.0.7...v2.0.8</a></p> <h2>v2.0.7</h2> <h2>What's Changed</h2> <ul> <li>Bump version to 2.0.7-preview by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/486">microsoft/teams.ts#486</a></li> <li>Add support for Shared Channels in app templates by <a href="https://github.com/singhk97"><code>@singhk97</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/453">microsoft/teams.ts#453</a></li> <li>Expose Graph Client http client via public getter by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/489">microsoft/teams.ts#489</a></li> <li>Bump handlebars from 4.7.8 to 4.7.9 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/microsoft/teams.ts/pull/490">microsoft/teams.ts#490</a></li> <li>Bump yaml from 2.8.2 to 2.8.3 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/microsoft/teams.ts/pull/491">microsoft/teams.ts#491</a></li> <li>Fix HttpServer breaking Azure App Service named pipe ports by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/488">microsoft/teams.ts#488</a></li> <li>Update Adaptive Cards package by <a href="https://github.com/corinagum"><code>@corinagum</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/476">microsoft/teams.ts#476</a></li> <li>Add cancellation token to OnMessage handler in Program.cs template by <a href="https://github.com/rido-min"><code>@rido-min</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/499">microsoft/teams.ts#499</a></li> <li>Fix ExpressAdapter to accept Express app directly by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/504">microsoft/teams.ts#504</a></li> <li>Add OpenDialogData and SubmitData convenience wrappers by <a href="https://github.com/corinagum"><code>@corinagum</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/498">microsoft/teams.ts#498</a></li> <li>Release 2.0.7 by <a href="https://github.com/heyitsaamir"><code>@heyitsaamir</code></a> in <a href="https://redirect.github.com/microsoft/teams.ts/pull/501">microsoft/teams.ts#501</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/microsoft/teams.ts/compare/v2.0.6...v2.0.7">https://github.com/microsoft/teams.ts/compare/v2.0.6...v2.0.7</a></p> <h2>v2.0.6</h2> <p>This release has been building up for a while! We are hoping to get back into a regular groove of release features and fixes once more.</p> <p>New Features</p> <ul> <li>HttpServer — New built-in HTTP server, begins deprecating HttpPlugin (<a href="https://github.com/microsoft/teams.ts/tree/HEAD/packages/client/issues/433">#433</a>)</li> <li>Targeted Messages — Experimental (<a href="https://github.com/microsoft/teams.ts/tree/HEAD/packages/client/issues/443">#443</a>, <a href="https://github.com/microsoft/teams.ts/tree/HEAD/packages/client/issues/449">#449</a>, <a href="https://github.com/microsoft/teams.ts/tree/HEAD/packages/client/issues/468">#468</a>, <a href="https://github.com/microsoft/teams.ts/tree/HEAD/packages/client/issues/477">#477</a>)</li> <li>Reactions — Message reaction support (<a href="https://github.com/microsoft/teams.ts/tree/HEAD/packages/client/issues/452">#452</a>)</li> <li>signin/failure handling — New invoke activity for sign-in failures (<a href="https://github.com/microsoft/teams.ts/tree/HEAD/packages/client/issues/459">#459</a>)</li> <li>Configurable messaging endpoint path (<a href="https://github.com/microsoft/teams.ts/tree/HEAD/packages/client/issues/483">#483</a>)</li> <li>Overridable base service URL for API Client (<a href="https://github.com/microsoft/teams.ts/tree/HEAD/packages/client/issues/435">#435</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/microsoft/teams.ts/blob/main/packages/client/CHANGELOG.md">@microsoft/teams.client's changelog</a>.</em></p> <blockquote> <h1><code>@microsoft/teams</code>.client</h1> <h2>2.0.5</h2> <h3>Patch Changes</h3> <ul> <li>Bug fixes and minor improvements</li> <li>Updated dependencies <ul> <li><code>@microsoft/teams</code>[email protected]</li> <li><code>@microsoft/teams</code>[email protected]</li> <li><code>@microsoft/teams</code>[email protected]</li> </ul> </li> </ul> <h2>2.0.4</h2> <h3>Patch Changes</h3> <ul> <li>Fix backward compat issue with TokenCredentials</li> <li>Updated dependencies <ul> <li><code>@microsoft/teams</code>[email protected]</li> <li><code>@microsoft/teams</code>[email protected]</li> <li><code>@microsoft/teams</code>[email protected]</li> </ul> </li> </ul> <h2>2.0.3</h2> <h3>Patch Changes</h3> <ul> <li>Regional oauth support, additional auth mechanisms support, resync graph endpoints</li> <li>Updated dependencies <ul> <li><code>@microsoft/teams</code>[email protected]</li> <li><code>@microsoft/teams</code>[email protected]</li> <li><code>@microsoft/teams</code>[email protected]</li> </ul> </li> </ul> <h2>2.0.2</h2> <h3>Patch Changes</h3> <ul> <li>Number of bug fixes and CLI improvements</li> <li>Updated dependencies <ul> <li><code>@microsoft/teams</code>[email protected]</li> <li><code>@microsoft/teams</code>[email protected]</li> <li><code>@microsoft/teams</code>[email protected]</li> </ul> </li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/microsoft/teams.ts/commits/HEAD/packages/client">compare view</a></li> </ul> </details> <details> <summary>Maintainer changes</summary> <p>This version was pushed to npm by <a href="https://www.npmjs.com/~microsoft1es">microsoft1es</a>, a new releaser for <code>@microsoft/teams</code>.client since your current version.</p> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/microsoft/teams.py/network/alerts). </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
<img width="800" height="234" alt="image" src="https://github.com/user-attachments/assets/3b28b69a-346d-4610-8c24-a313fd26f488" /> - Add `QuotedReplyEntity` Pydantic model with nested `QuotedReplyData` (`message_id` required, `sender_id`/`sender_name`/`preview`/`time`/`is_reply_deleted`/`validated_message_reference` optional); register in Entity union - Add `get_quoted_messages()` on `MessageActivity` to read inbound quoted reply entities - Add `add_quoted_reply(message_id, response?)` builder on `MessageActivityInput` - Update `reply()` to stamp` QuotedReplyEntity + <quoted messageId="..."/>` placeholder instead of blockquote HTML; remove `reply_to_id` assignment - Add `quote_reply()` on `ActivityContext` - Mark all quoted reply types and methods as `@experimental` - Add quoted-replies example exercising all APIs --------- Co-authored-by: Corina Gum <> Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Bumps [microsoft-kiota-http](https://github.com/microsoft/kiota-python) from 1.9.7 to 1.9.9. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/microsoft/kiota-python/releases">microsoft-kiota-http's releases</a>.</em></p> <blockquote> <h2>microsoft-kiota-http: v1.9.9</h2> <h2><a href="https://github.com/microsoft/kiota-python/compare/microsoft-kiota-http-v1.9.8...microsoft-kiota-http-v1.9.9">1.9.9</a> (2026-03-02)</h2> <h3>Bug Fixes</h3> <ul> <li>add header removal handler (<a href="https://github.com/microsoft/kiota-python/commit/d066e9c8accf75cc15866f415d6ac1891653441c">d066e9c</a>)</li> <li>add header removal handler (<a href="https://github.com/microsoft/kiota-python/commit/67bb784b0794072b7a97d40bc1454c5a8ee3e414">67bb784</a>)</li> <li>add header removal handler (<a href="https://github.com/microsoft/kiota-python/commit/44e8d940bb6d6284b2eee67a01b5bdd31f7e9e5c">44e8d94</a>)</li> <li>add header removal handler (<a href="https://github.com/microsoft/kiota-python/commit/b64ec6e584baee40fa2f99a1dc4984fc9b98a56b">b64ec6e</a>)</li> <li>add header removal handler (<a href="https://github.com/microsoft/kiota-python/commit/648d31b4fb1848330da58641eb8de9c14c8f7206">648d31b</a>)</li> <li>add header removal handler (<a href="https://github.com/microsoft/kiota-python/commit/9700ed9d6b8715e9a87f7842e4db84af0cf682fe">9700ed9</a>)</li> </ul> <h2>microsoft-kiota-http: v1.9.8</h2> <h2><a href="https://github.com/microsoft/kiota-python/compare/microsoft-kiota-http-v1.9.7...microsoft-kiota-http-v1.9.8">1.9.8</a> (2025-12-29)</h2> <h3>Miscellaneous Chores</h3> <ul> <li><strong>microsoft-kiota-http:</strong> Synchronize microsoft-kiota versions</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/microsoft/kiota-python/commit/6a723f70304ee84cfc668c5d4e886585be79f03f"><code>6a723f7</code></a> Merge pull request <a href="https://redirect.github.com/microsoft/kiota-python/issues/513">#513</a> from microsoft/release-please--branches--main</li> <li><a href="https://github.com/microsoft/kiota-python/commit/00449ceb2ae57cae8f94531268c565c08cc6422c"><code>00449ce</code></a> chore: release main</li> <li><a href="https://github.com/microsoft/kiota-python/commit/d066e9c8accf75cc15866f415d6ac1891653441c"><code>d066e9c</code></a> Merge pull request <a href="https://redirect.github.com/microsoft/kiota-python/issues/511">#511</a> from microsoft/cobando/fix-redirect-vulnerability</li> <li><a href="https://github.com/microsoft/kiota-python/commit/67bb784b0794072b7a97d40bc1454c5a8ee3e414"><code>67bb784</code></a> no sonar warnings added</li> <li><a href="https://github.com/microsoft/kiota-python/commit/44e8d940bb6d6284b2eee67a01b5bdd31f7e9e5c"><code>44e8d94</code></a> fix linter issues</li> <li><a href="https://github.com/microsoft/kiota-python/commit/b64ec6e584baee40fa2f99a1dc4984fc9b98a56b"><code>b64ec6e</code></a> updating func to only use 2 instead of 3 params</li> <li><a href="https://github.com/microsoft/kiota-python/commit/648d31b4fb1848330da58641eb8de9c14c8f7206"><code>648d31b</code></a> adding port condition</li> <li><a href="https://github.com/microsoft/kiota-python/commit/9700ed9d6b8715e9a87f7842e4db84af0cf682fe"><code>9700ed9</code></a> Adding header removal handler</li> <li><a href="https://github.com/microsoft/kiota-python/commit/f0a220dee8d0b6e00b93cfe6cfd0852a03924326"><code>f0a220d</code></a> Merge pull request <a href="https://redirect.github.com/microsoft/kiota-python/issues/510">#510</a> from microsoft/ci/release-please-dispatch</li> <li><a href="https://github.com/microsoft/kiota-python/commit/8362bf5a0ede7ceec584d111cca8ca425df1564c"><code>8362bf5</code></a> ci: adds workflow dispatch to release please</li> <li>Additional commits viewable in <a href="https://github.com/microsoft/kiota-python/compare/microsoft-kiota-http-v1.9.7...microsoft-kiota-http-v1.9.9">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/microsoft/teams.py/network/alerts). </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [python-multipart](https://github.com/Kludex/python-multipart) from 0.0.26 to 0.0.27. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/Kludex/python-multipart/releases">python-multipart's releases</a>.</em></p> <blockquote> <h2>0.0.27</h2> <h2>What's Changed</h2> <ul> <li>Pass parse offsets via constructors by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/python-multipart/pull/268">Kludex/python-multipart#268</a></li> <li>Add multipart header limits by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/python-multipart/pull/267">Kludex/python-multipart#267</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27">https://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md">python-multipart's changelog</a>.</em></p> <blockquote> <h2>0.0.27 (2026-04-27)</h2> <ul> <li>Add multipart header limits <a href="https://redirect.github.com/Kludex/python-multipart/pull/267">#267</a>.</li> <li>Pass parse offsets via constructors <a href="https://redirect.github.com/Kludex/python-multipart/pull/268">#268</a>.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/Kludex/python-multipart/commit/6d1d6892a6b01b25da6f3e7b097e8e06c57fb250"><code>6d1d689</code></a> Version 0.0.27 (<a href="https://redirect.github.com/Kludex/python-multipart/issues/272">#272</a>)</li> <li><a href="https://github.com/Kludex/python-multipart/commit/0b10220b1555af068a2bc8b198022b1ae238200f"><code>0b10220</code></a> Run CI on main branch pull requests (<a href="https://redirect.github.com/Kludex/python-multipart/issues/271">#271</a>)</li> <li><a href="https://github.com/Kludex/python-multipart/commit/3e64f5f8caba0e5d391b0c1ad0f1c2edf9e8f911"><code>3e64f5f</code></a> Add multipart header limits (<a href="https://redirect.github.com/Kludex/python-multipart/issues/267">#267</a>)</li> <li><a href="https://github.com/Kludex/python-multipart/commit/eb109cc4eb8174f2a7efc1ba894b1bf6425c0b14"><code>eb109cc</code></a> Pass parse offsets via constructors (<a href="https://redirect.github.com/Kludex/python-multipart/issues/268">#268</a>)</li> <li><a href="https://github.com/Kludex/python-multipart/commit/78e29abb9a339598975beee093a770ec3033f76d"><code>78e29ab</code></a> Bump pytest from 9.0.2 to 9.0.3 (<a href="https://redirect.github.com/Kludex/python-multipart/issues/266">#266</a>)</li> <li><a href="https://github.com/Kludex/python-multipart/commit/b2ddd0982bdf0fe852e4f3baa12122d2827af46c"><code>b2ddd09</code></a> fuzz: Enhance fuzzing capabilities with new chunked and boundary tests (<a href="https://redirect.github.com/Kludex/python-multipart/issues/264">#264</a>)</li> <li>See full diff in <a href="https://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/microsoft/teams.py/network/alerts). </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Prompt preview allows a bot to reference the original targeted message in its reply, so Teams can render a collapsible preview of the user's prompt. When a bot replies to a targeted message (reactive scenarios), the SDK now passes the original message's messageId via a targetedMessageInfo entity in the activity's entities array. For proactive replies, developers can attach the entity themselves with the messageId of the targeted message.
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.6.3 to 2.7.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/urllib3/urllib3/releases">urllib3's releases</a>.</em></p> <blockquote> <h2>2.7.0</h2> <h2>🚀 urllib3 is fundraising for HTTP/2 support</h2> <p><a href="https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support">urllib3 is raising ~$40,000 USD</a> to release HTTP/2 support and ensure long-term sustainable maintenance of the project after a sharp decline in financial support. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects <a href="https://opencollective.com/urllib3">please consider contributing financially</a> to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.</p> <p>Thank you for your support.</p> <h2>Security</h2> <p>Addressed high-severity security issues. Impact was limited to specific use cases detailed in the accompanying advisories; overall user exposure was estimated to be marginal.</p> <ul> <li> <p>Decompression-bomb safeguards of the streaming API were bypassed:</p> <ol> <li>When <code>HTTPResponse.drain_conn()</code> was called after the response had been read and decompressed partially. (Reported by <a href="https://github.com/Cycloctane"><code>@Cycloctane</code></a>)</li> <li>During the second <code>HTTPResponse.read(amt=N)</code> or <code>HTTPResponse.stream(amt=N)</code> call when the response was decompressed using the official <a href="https://pypi.org/project/brotli/">Brotli</a> library. (Reported by <a href="https://github.com/kimkou2024"><code>@kimkou2024</code></a>)</li> </ol> <p>See GHSA-mf9v-mfxr-j63j for details.</p> </li> <li> <p>HTTP pools created using <code>ProxyManager.connection_from_url</code> did not strip sensitive headers specified in <code>Retry.remove_headers_on_redirect</code> when redirecting to a different host. (GHSA-qccp-gfcp-xxvc reported by <a href="https://github.com/christos-spearbit"><code>@christos-spearbit</code></a>)</p> </li> </ul> <h2>Deprecations and Removals</h2> <ul> <li>Used <code>FutureWarning</code> instead of <code>DeprecationWarning</code> for better visibility of existing deprecation notices. Rescheduled the removal of deprecated features to version 3.0. (<a href="https://redirect.github.com/urllib3/urllib3/issues/3763">urllib3/urllib3#3763</a>)</li> <li>Removed support for end-of-life Python 3.9. (<a href="https://redirect.github.com/urllib3/urllib3/issues/3720">urllib3/urllib3#3720</a>)</li> <li>Removed support for end-of-life PyPy3.10. (<a href="https://redirect.github.com/urllib3/urllib3/issues/4979">urllib3/urllib3#4979</a>)</li> <li>Bumped the minimum supported pyOpenSSL version to 19.0.0. (<a href="https://redirect.github.com/urllib3/urllib3/issues/3777">urllib3/urllib3#3777</a>)</li> </ul> <h2>Bugfixes</h2> <ul> <li>Fixed a bug where <code>HTTPResponse.read(amt=None)</code> was ignoring decompressed data buffered from previous partial reads. (<a href="https://redirect.github.com/urllib3/urllib3/issues/3636">urllib3/urllib3#3636</a>)</li> <li>Fixed a bug where <code>HTTPResponse.read()</code> could cache only part of the response after a partial read when <code>cache_content=True</code>. (<a href="https://redirect.github.com/urllib3/urllib3/issues/4967">urllib3/urllib3#4967</a>)</li> <li>Fixed <code>HTTPResponse.stream()</code> and <code>HTTPResponse.read_chunked()</code> to handle <code>amt=0</code>. (<a href="https://redirect.github.com/urllib3/urllib3/issues/3793">urllib3/urllib3#3793</a>)</li> <li>Updated <code>_TYPE_BODY</code> type alias to include missing <code>Iterable[str]</code>, matching the documented and runtime behavior of chunked request bodies. (<a href="https://redirect.github.com/urllib3/urllib3/issues/3798">urllib3/urllib3#3798</a>)</li> <li>Fixed <code>LocationParseError</code> when paths resembling schemeless URIs were passed to <code>HTTPConnectionPool.urlopen()</code>. (<a href="https://redirect.github.com/urllib3/urllib3/issues/3352">urllib3/urllib3#3352</a>)</li> <li>Fixed <code>BaseHTTPResponse.readinto()</code> type annotation to accept <code>memoryview</code> in addition to <code>bytearray</code>, matching the <code>io.RawIOBase.readinto</code> contract and enabling use with <code>io.BufferedReader</code> without type errors. (<a href="https://redirect.github.com/urllib3/urllib3/issues/3764">urllib3/urllib3#3764</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/urllib3/urllib3/blob/main/CHANGES.rst">urllib3's changelog</a>.</em></p> <blockquote> <h1>2.7.0 (2026-05-07)</h1> <h2>Security</h2> <p>Addressed high-severity security issues. Impact was limited to specific use cases detailed in the accompanying advisories; overall user exposure was estimated to be marginal.</p> <ul> <li> <p>Decompression-bomb safeguards of the streaming API were bypassed:</p> <ol> <li>When <code>HTTPResponse.drain_conn()</code> was called after the response had been read and decompressed partially.</li> <li>During the second <code>HTTPResponse.read(amt=N)</code> or <code>HTTPResponse.stream(amt=N)</code> call when the response was decompressed using the official <code>Brotli <https://pypi.org/project/brotli/></code>__ library.</li> </ol> <p>See <code>GHSA-mf9v-mfxr-j63j <https://github.com/urllib3/urllib3/security/advisories/GHSA-mf9v-mfxr-j63j></code>__ for details.</p> </li> <li> <p>HTTP pools created using <code>ProxyManager.connection_from_url</code> did not strip sensitive headers specified in <code>Retry.remove_headers_on_redirect</code> when redirecting to a different host. (<code>GHSA-qccp-gfcp-xxvc <https://github.com/urllib3/urllib3/security/advisories/GHSA-qccp-gfcp-xxvc></code>__)</p> </li> </ul> <h2>Deprecations and Removals</h2> <ul> <li>Used <code>FutureWarning</code> instead of <code>DeprecationWarning</code> for better visibility of existing deprecation notices. Rescheduled the removal of deprecated features to version 3.0. (<code>[#3763](urllib3/urllib3#3763) <https://github.com/urllib3/urllib3/issues/3763></code>__)</li> <li>Removed support for end-of-life Python 3.9. (<code>[#3720](urllib3/urllib3#3720) <https://github.com/urllib3/urllib3/issues/3720></code>__)</li> <li>Removed support for end-of-life PyPy3.10. (<code>[#4979](urllib3/urllib3#4979) <https://github.com/urllib3/urllib3/issues/4979></code>__)</li> <li>Bumped the minimum supported pyOpenSSL version to 19.0.0. (<code>[#3777](urllib3/urllib3#3777) <https://github.com/urllib3/urllib3/issues/3777></code>__)</li> </ul> <h2>Bugfixes</h2> <ul> <li>Fixed a bug where <code>HTTPResponse.read(amt=None)</code> was ignoring decompressed data buffered from previous partial reads. (<code>[#3636](urllib3/urllib3#3636) <https://github.com/urllib3/urllib3/issues/3636></code>__)</li> <li>Fixed a bug where <code>HTTPResponse.read()</code> could cache only part of the response after a partial read when <code>cache_content=True</code>.</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/urllib3/urllib3/commit/9a950b92d999f906b6020bb2d1076ee56cddd5d2"><code>9a950b9</code></a> Release 2.7.0</li> <li><a href="https://github.com/urllib3/urllib3/commit/5ec0de499b9166ca71c65ab04f2a7e4eb0d66fcc"><code>5ec0de4</code></a> Merge commit from fork</li> <li><a href="https://github.com/urllib3/urllib3/commit/2bdcc44d1e163fb5cc48a8662425e35e15adfe6a"><code>2bdcc44</code></a> Merge commit from fork</li> <li><a href="https://github.com/urllib3/urllib3/commit/f45b0df09d8620ac6ed0491eb9362c8c87b7bc2c"><code>f45b0df</code></a> Fix a misleading example for <code>ProxyManager</code> (<a href="https://redirect.github.com/urllib3/urllib3/issues/4970">#4970</a>)</li> <li><a href="https://github.com/urllib3/urllib3/commit/577193ca029872384f82c133449e0935f6d8a64b"><code>577193c</code></a> Switch to nightly PyPy3.11 in CI for now (<a href="https://redirect.github.com/urllib3/urllib3/issues/4984">#4984</a>)</li> <li><a href="https://github.com/urllib3/urllib3/commit/e90af45bb006c3a452a3a21644a2681523f5c7fc"><code>e90af45</code></a> Avoid infinite loop in <code>HTTPResponse.read_chunked</code> when <code>amt=0</code> (<a href="https://redirect.github.com/urllib3/urllib3/issues/4974">#4974</a>)</li> <li><a href="https://github.com/urllib3/urllib3/commit/67ed74fdaec6659a6534621ec8e3aaaa6f976210"><code>67ed74f</code></a> Bump dev dependencies (<a href="https://redirect.github.com/urllib3/urllib3/issues/4972">#4972</a>)</li> <li><a href="https://github.com/urllib3/urllib3/commit/3abd481097b54d87b574ac7ea593c3f40938a84d"><code>3abd481</code></a> Upgrade mypy to version 1.20.2 (<a href="https://redirect.github.com/urllib3/urllib3/issues/4978">#4978</a>)</li> <li><a href="https://github.com/urllib3/urllib3/commit/2b8725dfcac4f21d4d93cc0cc3a64a33af08f890"><code>2b8725d</code></a> Drop support for EOL PyPy3.10 (<a href="https://redirect.github.com/urllib3/urllib3/issues/4979">#4979</a>)</li> <li><a href="https://github.com/urllib3/urllib3/commit/2944b2a0a6c573f5548a39cfd17196f98ee21b33"><code>2944b2a</code></a> Upgrade <code>setup-chrome</code> and <code>setup-firefox</code> to fix warnings (<a href="https://redirect.github.com/urllib3/urllib3/issues/4973">#4973</a>)</li> <li>Additional commits viewable in <a href="https://github.com/urllib3/urllib3/compare/2.6.3...2.7.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/microsoft/teams.py/network/alerts). </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Summary
Removes the `@experimental("ExperimentalTeamsReactions")` decorator and
the `.. warning:: Preview` docstring from `ReactionClient`. The
reactions feature is in sync across all three SDKs and the Teams service
— no longer preview.
Also fixes the sample's `unreact` command, which previously called
`ctx.api.reactions.delete()` on an incoming message that had no
reaction. It now adds the reaction first, waits 2 seconds, then deletes
— so the demo visibly shows the full add/delete cycle.
## Cross-SDK coordination
Part of the cross-SDK Reactions-GA pass. Sibling PRs:
- microsoft/teams.ts — Mark reactions API as GA
- microsoft/teams.net — Mark reactions API as GA (Libraries + core)
- microsoft/teams-sdk — drop .NET opt-in tip from the reactions guide
## Test plan
- [x] `uv run ruff check` — all checks passed
- [x] `uv run ruff format --check` — 403 files already formatted
- [x] `uv run pyright` — 0 errors, 0 warnings
- [x] `uv run pytest` — 596 passed
- [ ] Smoke run of `examples/reactions` showing the cycle in Teams
## Versioning
No `version.json` change in this PR. Bump happens as part of the release
flow per RELEASE.md.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Updates the `targeted-messages` example to demonstrate the slash-commands opt-in per the docs spec (microsoft/teams-sdk#2843, MicrosoftDocs/msteams-docs#14182). ## Changes - **`examples/targeted-messages/appPackage/manifest.json` (new)** — shipped at `manifestVersion: "devPreview"` because the slash-commands opt-in fields are only defined in the devPreview schema today: - `bots[].supportsTargetedMessages: true` opts the bot into receiving slash-command-style targeted messages. - `bots[].commandLists[].triggers: ["slash"]` declares `test send` / `test update` / `test delete` / `test public` / `test inbound` as slash commands surfaced in the Teams `/` picker (scoped to `team` and `groupChat`). - **`.gitignore`** — narrowly-scoped exception so this one example's manifest can be tracked. The general `examples/**/appPackage/` exclusion remains in place for other examples. - **`examples/targeted-messages/src/main.py`** — new `test inbound` handler that reads `activity.recipient.is_targeted` and reports whether the inbound message was delivered as a targeted message (the signal slash commands arrive with). - **`examples/targeted-messages/README.md`** — refreshed commands table, new "Manifest configuration" section documenting the new fields. ## Test plan - [x] `python3 -m py_compile examples/targeted-messages/src/main.py` clean - [x] `pyright examples/targeted-messages/src/main.py` clean - [x] `examples/targeted-messages/appPackage/manifest.json` validates against the Teams devPreview schema (placeholder `${{...}}` tokens excepted) - [x] Sample bot's `test inbound` handler verified live in Teams: broadcast branch fires when the inbound is not targeted (the targeted branch will fire once slash commands start delivering with `recipient.is_targeted = True`) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
…ion (#425) ## Summary - Add a warn-level log on the missing-or-malformed Bearer token branch, replacing a previously silent 401. - Cross-SDK consistency fix: same diagnostic gap exists in teams.ts (companion PR: microsoft/teams.ts#568). ## Test plan - [x] `uv run poe check` (ruff format + ruff check, all pass) - [x] `uv run pyright src/microsoft_teams/apps/http/http_server.py` (0 errors) - [x] `uv run poe test` (580/580 pass) - [ ] Reviewer eyeball: confirm log message wording --------- Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
Bumps [idna](https://github.com/kjd/idna) from 3.11 to 3.15. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/kjd/idna/blob/master/HISTORY.md">idna's changelog</a>.</em></p> <blockquote> <h2>3.15 (2026-05-12)</h2> <ul> <li>Enforce DNS-length cap on individual labels early in <code>check_label</code>, short-circuiting contextual-rule processing for oversized input while staying compatible with UTS 46 usage.</li> <li>Tidy core helpers: hoist bidi category sets to module-level frozensets (avoiding per-codepoint list construction), simplify length checks, and reuse the shared <code>_unicode_dots_re</code> from <code>idna.core</code> in the codec module.</li> <li>Use <code>raise ... from err</code> for proper exception chaining and switch internal string formatting to f-strings.</li> <li>Allow <code>flit_core</code> 4.x in the build backend.</li> <li>Expand the ruff lint set (flake8-bugbear, flake8-simplify, pyupgrade, perflint) and apply the surfaced fixes; pin lint CI to Python 3.14.</li> <li>Add Dependabot configuration for GitHub Actions.</li> <li>Convert README and HISTORY from reStructuredText to Markdown.</li> <li>Reference CVE-2026-45409 for the 3.14 advisory in place of the initial GHSA identifier.</li> </ul> <p>Thanks to Felix Yan, Stan Ulbrych, and metsw24-max for contributions to this release.</p> <h2>3.14 (2026-05-10)</h2> <ul> <li>Removed opportunity to process long inputs into quadratic time by rejecting oversize inputs up-front. Closes a bypass of the CVE-2024-3651 mitigation. [CVE-2026-45409]</li> </ul> <p>Thanks to Stan Ulbrych for reporting the issue.</p> <h2>3.13 (2026-04-22)</h2> <ul> <li>Correct classification error for codepoint U+A7F1</li> </ul> <h2>3.12 (2026-04-21)</h2> <ul> <li>Update to Unicode 17.0.0.</li> <li>Issue a deprecation warning for the transitional argument.</li> <li>Added lazy-loading to provide some performance improvements.</li> <li>Removed vestiges of code related to Python 2 support, including segmentation of data structures specific to Jython.</li> </ul> <p>Thanks to Rodrigo Nogueira for contributions to this release.</p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/kjd/idna/commit/af30a092e158181d0b35ac66dfa813788126bdd8"><code>af30a09</code></a> Release 3.15</li> <li><a href="https://github.com/kjd/idna/commit/30314d4628744ca14cf2b5820564e5127a9f86f2"><code>30314d4</code></a> Pre-release 3.15rc0</li> <li><a href="https://github.com/kjd/idna/commit/05d4b219aa9eddc47371fcbd2000f0301016f3e9"><code>05d4b21</code></a> Merge pull request <a href="https://redirect.github.com/kjd/idna/issues/237">#237</a> from kjd/convert-docs-to-markdown</li> <li><a href="https://github.com/kjd/idna/commit/2987fdba1962bbb2358399e0084ba062b98a0bee"><code>2987fdb</code></a> Convert README and HISTORY from reStructuredText to Markdown</li> <li><a href="https://github.com/kjd/idna/commit/59fa8002d514bf4a5ce7b58f67b9ec587d53fa9c"><code>59fa800</code></a> Merge pull request <a href="https://redirect.github.com/kjd/idna/issues/236">#236</a> from kjd/dependabot/github_actions/actions-f3e34333ea</li> <li><a href="https://github.com/kjd/idna/commit/def69834ced5d4b3c50439d8b99c4c856ec19ca2"><code>def6983</code></a> Merge branch 'master' into dependabot/github_actions/actions-f3e34333ea</li> <li><a href="https://github.com/kjd/idna/commit/bbd8004a797185d8c56bb555cd5c88fde05e0631"><code>bbd8004</code></a> Merge pull request <a href="https://redirect.github.com/kjd/idna/issues/234">#234</a> from StanFromIreland/patch-1</li> <li><a href="https://github.com/kjd/idna/commit/edd07c05024344a6ccb517414ccb36683aee99fc"><code>edd07c0</code></a> Bump github/codeql-action from 3.35.2 to 4.35.2 in the actions group</li> <li><a href="https://github.com/kjd/idna/commit/5557db030c11bdec50d62aa5f631d705d33ba123"><code>5557db0</code></a> Merge branch 'master' into patch-1</li> <li><a href="https://github.com/kjd/idna/commit/f11746cf4981d25123ef7830d3ee60f07de8ae3d"><code>f11746c</code></a> Merge pull request <a href="https://redirect.github.com/kjd/idna/issues/235">#235</a> from StanFromIreland/patch-2</li> <li>Additional commits viewable in <a href="https://github.com/kjd/idna/compare/v3.11...v3.15">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/microsoft/teams.py/network/alerts). </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Summary Documents the layered authentication model the SDK uses for inbound JSON Web Tokens. Python half of a 3-SDK PR set. ## Why Security scan finding "JsonWebToken No Signature Verification" flagged the `JsonWebToken` accessor class for decoding tokens without verifying signatures (uses `verify_signature=False`). A cross-SDK audit confirmed this is intentional architecture: signature verification runs at the HTTP boundary in `TokenValidator.validate_token` (`packages/apps/src/microsoft_teams/apps/auth/token_validator.py`), and the accessor exists as a typed view over already-validated payloads. Every consumer of decoded claims is downstream of a validator pass. This PR makes the architectural invariant explicit at the constructor site so future readers (and the scanner on its next pass) see the design intent locally. ## What Contract docstring at `JsonWebToken.__init__` explaining that it performs no signature verification, where verification actually happens, and the rule that callers must not construct from raw network input. ## What this does not change - No runtime behavior change. No signature verification added or removed. - No API surface change. `JsonWebToken` keeps its current name (verified public on `microsoft_teams.api`, so a rename would have been breaking). - No effect on the activity pipeline. JWT validation continues to happen via `TokenValidator.validate_token` exactly as before. ## Related PRs - TypeScript: microsoft/teams.ts#586 - .NET: microsoft/teams.net#517 - Documentation: microsoft/teams-sdk#2850
Bumps [qs](https://github.com/ljharb/qs) from 6.15.0 to 6.15.2. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/ljharb/qs/blob/main/CHANGELOG.md">qs's changelog</a>.</em></p> <blockquote> <h2><strong>6.15.2</strong></h2> <ul> <li>[Fix] <code>stringify</code>: skip null/undefined entries in <code>arrayFormat: 'comma'</code> + <code>encodeValuesOnly</code> instead of crashing in <code>encoder</code></li> <li>[Fix] <code>stringify</code>: use configured <code>delimiter</code> after <code>charsetSentinel</code> (<a href="https://redirect.github.com/ljharb/qs/issues/555">#555</a>)</li> <li>[Fix] <code>stringify</code>: apply <code>formatter</code> to encoded key under <code>strictNullHandling</code> (<a href="https://redirect.github.com/ljharb/qs/issues/554">#554</a>)</li> <li>[Fix] <code>stringify</code>: skip null/undefined filter-array entries instead of crashing in <code>encoder</code> (<a href="https://redirect.github.com/ljharb/qs/issues/551">#551</a>)</li> <li>[Fix] <code>parse</code>: handle nested bracket groups and add regression tests (<a href="https://redirect.github.com/ljharb/qs/issues/530">#530</a>)</li> <li>[readme] fix grammar (<a href="https://redirect.github.com/ljharb/qs/issues/550">#550</a>)</li> <li>[Dev Deps] update <code>@ljharb/eslint-config</code></li> <li>[Tests] add regression tests for keys containing percent-encoded bracket text</li> </ul> <h2><strong>6.15.1</strong></h2> <ul> <li>[Fix] <code>parse</code>: <code>parameterLimit: Infinity</code> with <code>throwOnLimitExceeded: true</code> silently drops all parameters</li> <li>[Deps] update <code>@ljharb/eslint-config</code></li> <li>[Dev Deps] update <code>@ljharb/eslint-config</code>, <code>iconv-lite</code></li> <li>[Tests] increase coverage</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/ljharb/qs/commit/9aca4076fe788338c67cf7e115f0be6bc58d85a8"><code>9aca407</code></a> v6.15.2</li> <li><a href="https://github.com/ljharb/qs/commit/5e33d33447ed0bf1ddab9abc41d27dea4687d992"><code>5e33d33</code></a> [Dev Deps] update <code>@ljharb/eslint-config</code></li> <li><a href="https://github.com/ljharb/qs/commit/21f80b33e5c8b3f7eba1034fff0da4a4a37a1d41"><code>21f80b3</code></a> [Fix] <code>stringify</code>: skip null/undefined entries in <code>arrayFormat: 'comma'</code> + `e...</li> <li><a href="https://github.com/ljharb/qs/commit/a0a81ea2071acce3eff41a040f719ac8f5c4f64c"><code>a0a81ea</code></a> [Fix] <code>stringify</code>: use configured <code>delimiter</code> after <code>charsetSentinel</code></li> <li><a href="https://github.com/ljharb/qs/commit/e3062f78f5233b338ceeb8e8dfa5a07dea4b32a8"><code>e3062f7</code></a> [Fix] <code>stringify</code>: apply <code>formatter</code> to encoded key under <code>strictNullHandling</code></li> <li><a href="https://github.com/ljharb/qs/commit/0c180a40adb8c6703fffc85b2ff06ca209f5c1e0"><code>0c180a4</code></a> [Fix] <code>stringify</code>: skip null/undefined filter-array entries instead of crashi...</li> <li><a href="https://github.com/ljharb/qs/commit/3a8b94aec19bd664720f6f6b1e66c4a0dfe4b656"><code>3a8b94a</code></a> [Tests] add regression tests for keys containing percent-encoded bracket text</li> <li><a href="https://github.com/ljharb/qs/commit/96755abd357c0e534dd3442a84a04d08864bfe0d"><code>96755ab</code></a> [readme] fix grammar</li> <li><a href="https://github.com/ljharb/qs/commit/a419ce5bbfcdb98a299f1a0bb47ea055baef20e6"><code>a419ce5</code></a> [Fix] <code>parse</code>: handle nested bracket groups and add regression tests</li> <li><a href="https://github.com/ljharb/qs/commit/3f5e1c528c967d915096787efbffa73cf6044170"><code>3f5e1c5</code></a> v6.15.1</li> <li>Additional commits viewable in <a href="https://github.com/ljharb/qs/compare/v6.15.0...v6.15.2">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/microsoft/teams.py/network/alerts). </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Summary - Add a startup warning in `HttpServer.initialize()` when no `CLIENT_ID` / `CLIENT_SECRET` / `TENANT_ID` is configured, so customers running anonymously know their bot accepts unauthenticated requests on `/api/messages`. - 2 new unit tests in `test_http_server.py` covering: warning fires when no creds, warning does not fire when creds present. ## Why Part of the DevTools deprecation rollout. The recommended local-testing path with Microsoft 365 Agents Playground is anonymous mode (no creds configured). The new warning makes that mode explicit at startup, so customers don't ship anonymous-mode bots to production by accident, and so the migration from DevTools to Playground produces a clear signal. Behavior is unchanged. This is pure observability. ## Test plan - [x] `pytest tests/test_http_server.py` (22/22 passing) - [x] Confirmed warning text matches the wording used in teams.ts and teams.net for cross-SDK consistency - [x] Verified at runtime by initializing `App()` without credentials. Output: ``` [WARNING] microsoft_teams.apps.http.http_server: No credentials configured (CLIENT_ID / CLIENT_SECRET / TENANT_ID). Bot will accept unauthenticated requests on /api/messages. ``` Note: Uvicorn's `dictConfig` replaces the default root-logger handler at server-startup, so consumers running through Uvicorn need their own logging config (or `logging.basicConfig(level=WARNING)`) to see this warning. Customers using the standard Agents templates already have logging configured. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Adds support for `suggestedActions/submit` invoke activity - dispatched
by the platform when a user clicks an `Action.Submit` suggested-action
click.
- New `SuggestedActionSubmitInvokeActivity` model and
`on_suggested_action_submit` handler.
- New `CardActionType.SUBMIT` enum value for constructing outbound
suggested-action chips.
- Marked `@experimental("ExperimentalTeamsSuggestedAction")` until the
platform feature stabilizes.
- New `examples/suggested-actions` sample app.
<img width="1017" height="243" alt="image"
src="https://github.com/user-attachments/assets/6a55d339-9cef-4d88-ae9d-0654388b1335"
/>
## Summary Make `ctx.send()` and `ctx.reply()` stay private by default when the inbound Teams message was targeted. ## Why This matches the TS SDK behavior and saves app authors from manually wiring `with_recipient(..., is_targeted=True)` for the common private slash-command response path. ## Interesting bits - Explicit public replies still work by passing a non-targeted recipient. - Sends to a different conversation do not inherit targeted routing. - Added typed `quotedReply` and `targetedMessageInfo` entities so the targeted reply metadata is modeled instead of shoved in as dict soup. - Updated the targeted messages example with `send private` / `send public` commands. ## Tips for reviewers Start with `packages/apps/src/microsoft_teams/apps/routing/activity_context.py`, then the new tests in `packages/apps/tests/test_activity_context.py`. ## Test plan <img width="680" height="332" alt="image" src="https://github.com/user-attachments/assets/f9ea6559-96d5-490f-959d-f734e2e20b82" />
…#441) ## Summary `uvx pip-audit` flagged a critical CVE in `starlette` 1.0.0 (transitive via `fastapi`). This PR bumps it to **1.1.0** via `uv lock --upgrade-package starlette` (uv picked 1.1.0, well above the 1.0.1 fix). - **PYSEC-2026-161** / **CVE-2026-48710** / **GHSA-86qp-5c8j-p5mr** — *BadHost* - Disclosed 2026-05-22 by X41 D-Sec - Severity: 9.8 critical - Starlette reconstructs the request URL from the `Host` header without validation. Attackers can inject path segments via the host part, causing `request.url.path` to diverge from the actual routed path. Auth checks that rely on `request.url.path` can be bypassed while routing still hits the protected route. - Fix: starlette 1.0.1+; we landed on 1.1.0 Lock-only change. `fastapi 0.135.2`'s starlette constraint already allowed the bump, so no `pyproject.toml` edits. ## Vulnerabilities not addressed in this PR `pip-audit` and Dependabot alert #5 also flag **jsonpickle 1.4.2** (CVE-2020-22083, GHSA-j66q-qmrc-89rx). - Transitive via `botbuilder-core 4.17.0`, which pins `jsonpickle<1.5,>=1.2`. We cannot bump jsonpickle without overriding an upstream constraint on an archived library. - The advisory itself is disputed: *"This CVE is disputed by the project author as intended functionality."* It describes the documented pickle-deserialization-is-dangerous property, not a code defect. First patched version: none. - Recommendation: treat as accepted risk for now; track separately whether to override the constraint or remove the botbuilder integration. ## Test plan - [x] `uvx pip-audit -r <exported requirements> --disable-pip --no-deps` — starlette no longer in findings; only jsonpickle remains - [x] `poe check` (ruff format + lint) — clean - [x] `poe test` — 609 passed - [x] `pyright` — 0 errors, 0 warnings Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
lilyydu
approved these changes
May 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Brings
origin/mainintoreleasefor the 2.0.12 release. No carve-outs this time — Quoted Replies (PR #321) is included.version.json:2.0.11→2.0.12.Aligns with teams.ts/teams.net cadence.
What's in this release (delta from 2.0.11)
Features
suggestedAction/submitinvoke (SuggestedActionSubmitActivity for suggestedAction/submit invoke #434)AppOptions(Allow passing a custom HTTP client via AppOptions #416)Security & fixes
app.get_app_graph+ctx.*_graphto sovereign endpoints viacloud.graph_scope(fix: routeapp.get_app_graph+ctx.*_graphto sovereign endpoints viacloud.graph_scope#402)Deprecations / package changes
Dependency bumps
Quoted Replies inclusion notes
prepend_quote(),add_quote()),ctx.quote(), and the quote-awarectx.reply()behavior are all present in this release.examples/quotingis included.Conflict resolution
The 2.0.11 release branch had the QR-removed shape for four files; took
main's (QR-included) version for all of them:examples/targeted-messages/src/main.pypackages/api/src/microsoft_teams/api/activities/message/message.pypackages/apps/src/microsoft_teams/apps/routing/activity_context.pypackages/apps/tests/test_activity_context.pyversion.jsonconflict resolved to2.0.12.Test plan
uv synccleanpoe check(ruff format + lint) — cleanpoe test— 609 passedpyright— 0 errors, 0 warningsreleaseafter mergepip install microsoft-teams-apps==2.0.12smoke install