Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
fcf96d3
chore(internal): add request options to SSE classes
stainless-app[bot] Feb 24, 2026
2420dd3
chore(internal): make `test_proxy_environment_variables` more resilient
stainless-app[bot] Feb 24, 2026
a54d51a
chore: configure new SDK language
stainless-app[bot] Feb 24, 2026
770a8e2
feat(api): api update
stainless-app[bot] Feb 24, 2026
8b9d76c
chore: configure new SDK language
stainless-app[bot] Feb 24, 2026
266e1af
codegen metadata
stainless-app[bot] Feb 24, 2026
5df69bf
chore: update SDK settings
stainless-app[bot] Feb 24, 2026
1ad2ddf
chore(internal): make `test_proxy_environment_variables` more resilie…
stainless-app[bot] Feb 25, 2026
a6b8aac
chore(internal): codegen related update
stainless-app[bot] Mar 3, 2026
352dc26
chore(test): do not count install time for mock server timeout
stainless-app[bot] Mar 5, 2026
3f5692e
chore(ci): skip uploading artifacts on stainless-internal branches
stainless-app[bot] Mar 6, 2026
f9883db
chore: update placeholder string
stainless-app[bot] Mar 6, 2026
0d67817
codegen metadata
stainless-app[bot] Mar 12, 2026
c84dca5
feat(api): manual updates
stainless-app[bot] Mar 12, 2026
bbfc0ba
codegen metadata
stainless-app[bot] Mar 13, 2026
8b9fe85
fix(pydantic): do not pass `by_alias` unless set
stainless-app[bot] Mar 17, 2026
922d90a
fix(deps): bump minimum typing-extensions version
stainless-app[bot] Mar 17, 2026
311a998
chore(internal): tweak CI branches
stainless-app[bot] Mar 17, 2026
900c955
fix: sanitize endpoint path params
stainless-app[bot] Mar 20, 2026
ef99778
refactor(tests): switch from prism to steady
stainless-app[bot] Mar 20, 2026
68f14af
chore(tests): bump steady to v0.19.4
stainless-app[bot] Mar 21, 2026
9229d32
chore(tests): bump steady to v0.19.5
stainless-app[bot] Mar 21, 2026
3dfb379
chore(internal): update gitignore
stainless-app[bot] Mar 24, 2026
166b069
chore(tests): bump steady to v0.19.6
stainless-app[bot] Mar 24, 2026
1fe013e
chore(ci): skip lint on metadata-only changes
stainless-app[bot] Mar 25, 2026
31a8e58
chore(tests): bump steady to v0.19.7
stainless-app[bot] Mar 25, 2026
b954521
chore: update SDK settings
stainless-app[bot] Mar 25, 2026
fc973f4
codegen metadata
stainless-app[bot] Mar 25, 2026
daf5390
codegen metadata
stainless-app[bot] Mar 25, 2026
de85c3a
feat(internal): implement indices array format for query and form ser…
stainless-app[bot] Mar 27, 2026
d2cf119
chore(tests): bump steady to v0.20.1
stainless-app[bot] Apr 1, 2026
0def55c
chore(tests): bump steady to v0.20.2
stainless-app[bot] Apr 1, 2026
9e86464
fix(client): preserve hardcoded query params when merging with user p…
stainless-app[bot] Apr 8, 2026
69f6d11
fix: ensure file data are only sent as 1 parameter
stainless-app[bot] Apr 11, 2026
af70fc9
feat(api): add network, bridge fields to accounts
stainless-app[bot] Apr 12, 2026
7addb88
perf(client): optimize file structure copying in multipart requests
stainless-app[bot] Apr 18, 2026
29127f7
chore(tests): bump steady to v0.22.1
stainless-app[bot] Apr 18, 2026
ed8c2c4
chore(internal): more robust bootstrap script
stainless-app[bot] Apr 23, 2026
d086e7f
fix: use correct field name format for multipart file arrays
stainless-app[bot] Apr 28, 2026
6841539
feat: support setting headers via env
stainless-app[bot] Apr 28, 2026
4ff5262
Update Desktop API Stainless config and OpenAPI spec
stainless-app[bot] Apr 29, 2026
8699254
Preserve asset serve SDK compatibility
stainless-app[bot] Apr 29, 2026
ae59b66
Document asset serve stream response
stainless-app[bot] Apr 29, 2026
8cdbacb
codegen metadata
stainless-app[bot] Apr 30, 2026
407623a
codegen metadata
stainless-app[bot] May 1, 2026
f11e2a6
chore(internal): reformat pyproject.toml
stainless-app[bot] May 1, 2026
a1af475
feat(api): api update
stainless-app[bot] May 4, 2026
a5afb8f
feat(api): api update
stainless-app[bot] May 6, 2026
e0b0a39
release: 5.0.0
stainless-app[bot] May 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 16 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
name: CI
on:
push:
branches-ignore:
- 'generated'
- 'codegen/**'
- 'integrated/**'
- 'stl-preview-head/**'
- 'stl-preview-base/**'
branches:
- '**'
- '!integrated/**'
- '!stl-preview-head/**'
- '!stl-preview-base/**'
- '!generated'
- '!codegen/**'
- 'codegen/stl/**'
pull_request:
branches-ignore:
- 'stl-preview-head/**'
Expand All @@ -17,7 +19,7 @@ jobs:
timeout-minutes: 10
name: lint
runs-on: ${{ github.repository == 'stainless-sdks/beeper-desktop-api-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
steps:
- uses: actions/checkout@v6

Expand All @@ -36,7 +38,7 @@ jobs:
run: ./scripts/lint

build:
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
timeout-minutes: 10
name: build
permissions:
Expand All @@ -61,14 +63,18 @@ jobs:
run: rye build

- name: Get GitHub OIDC Token
if: github.repository == 'stainless-sdks/beeper-desktop-api-python'
if: |-
github.repository == 'stainless-sdks/beeper-desktop-api-python' &&
!startsWith(github.ref, 'refs/heads/stl/')
id: github-oidc
uses: actions/github-script@v8
with:
script: core.setOutput('github_token', await core.getIDToken());

- name: Upload tarball
if: github.repository == 'stainless-sdks/beeper-desktop-api-python'
if: |-
github.repository == 'stainless-sdks/beeper-desktop-api-python' &&
!startsWith(github.ref, 'refs/heads/stl/')
env:
URL: https://pkg.stainless.com/s
AUTH: ${{ steps.github-oidc.outputs.github_token }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ jobs:
run: |
bash ./bin/publish-pypi
env:
PYPI_TOKEN: ${{ secrets.BEEPER_DESKTOP_PYPI_TOKEN || secrets.PYPI_TOKEN }}
PYPI_TOKEN: ${{ secrets.BEEPER_PYPI_TOKEN || secrets.PYPI_TOKEN }}
2 changes: 1 addition & 1 deletion .github/workflows/release-doctor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@ jobs:
run: |
bash ./bin/check-release-environment
env:
PYPI_TOKEN: ${{ secrets.BEEPER_DESKTOP_PYPI_TOKEN || secrets.PYPI_TOKEN }}
PYPI_TOKEN: ${{ secrets.BEEPER_PYPI_TOKEN || secrets.PYPI_TOKEN }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
.prism.log
.stdy.log
_dev

__pycache__
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "4.3.0"
".": "5.0.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 23
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/beeper%2Fbeeper-desktop-api-4acef56b00be513f305543096fdd407e6947f0a5ad268ab2e627ff30b37a75db.yml
openapi_spec_hash: e876d796b6c25f18577f6be3944bf7d9
config_hash: 659111d4e28efa599b5f800619ed79c2
configured_endpoints: 30
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/beeper/beeper-desktop-api-c08c14bb754b4cb0e02b21fabb680469368286be339dec0aaa8c69d04a1f021a.yml
openapi_spec_hash: a10246aaf7cdc33b682fc245bd5f893b
config_hash: 72f9d43b9b51a5da912e9f3730e53ae2
61 changes: 61 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,66 @@
# Changelog

## 5.0.0 (2026-05-06)

Full Changelog: [v4.3.0...v5.0.0](https://github.com/beeper/desktop-api-python/compare/v4.3.0...v5.0.0)

### Features

* **api:** add network, bridge fields to accounts ([af70fc9](https://github.com/beeper/desktop-api-python/commit/af70fc9fab45036721b4be634bb4444964c70d1e))
* **api:** api update ([a5afb8f](https://github.com/beeper/desktop-api-python/commit/a5afb8f6a0037bc3727eca0a7ca0c46ca371c6f0))
* **api:** api update ([a1af475](https://github.com/beeper/desktop-api-python/commit/a1af475c4f4c51e2aed27ea8c793364444ed8055))
* **api:** api update ([770a8e2](https://github.com/beeper/desktop-api-python/commit/770a8e2a6fc4d96dae58b3b787d55072faf63e34))
* **api:** manual updates ([c84dca5](https://github.com/beeper/desktop-api-python/commit/c84dca576d56b83e314ab798749607e70aea7223))
* **internal:** implement indices array format for query and form serialization ([de85c3a](https://github.com/beeper/desktop-api-python/commit/de85c3aef481f44350bab667ed81e155573ace81))
* support setting headers via env ([6841539](https://github.com/beeper/desktop-api-python/commit/6841539c8619a507ec5e717d08a81837e83d76c2))


### Bug Fixes

* **client:** preserve hardcoded query params when merging with user params ([9e86464](https://github.com/beeper/desktop-api-python/commit/9e86464960e28472bc3a4f137c5d2c025f2acc16))
* **deps:** bump minimum typing-extensions version ([922d90a](https://github.com/beeper/desktop-api-python/commit/922d90aeb6d75306490a359d26ebbf71a6e340b8))
* ensure file data are only sent as 1 parameter ([69f6d11](https://github.com/beeper/desktop-api-python/commit/69f6d11ecb0959d1a5eb90c41c76542a1ea5826f))
* **pydantic:** do not pass `by_alias` unless set ([8b9fe85](https://github.com/beeper/desktop-api-python/commit/8b9fe85df1911bc10a65b5c965e5465c4041e065))
* sanitize endpoint path params ([900c955](https://github.com/beeper/desktop-api-python/commit/900c955edf1d5f8cf7aa9c7d8a7859e5b61ae379))
* use correct field name format for multipart file arrays ([d086e7f](https://github.com/beeper/desktop-api-python/commit/d086e7f0ff86653ace4d1f21c5daf1d6605b3369))


### Performance Improvements

* **client:** optimize file structure copying in multipart requests ([7addb88](https://github.com/beeper/desktop-api-python/commit/7addb88adf0574857ce646e8a9f15e8eb035a48a))


### Chores

* **ci:** skip lint on metadata-only changes ([1fe013e](https://github.com/beeper/desktop-api-python/commit/1fe013eacfb814508b88eefa3b2ee3bf51618edc))
* **ci:** skip uploading artifacts on stainless-internal branches ([3f5692e](https://github.com/beeper/desktop-api-python/commit/3f5692eb199bd02db1359e8131c8774eee7fabcf))
* configure new SDK language ([8b9d76c](https://github.com/beeper/desktop-api-python/commit/8b9d76c76fe4e3ae99d85429f20d9b782bea2520))
* configure new SDK language ([a54d51a](https://github.com/beeper/desktop-api-python/commit/a54d51a23c31d38e124dc263f748f6ada2f2409c))
* **internal:** add request options to SSE classes ([fcf96d3](https://github.com/beeper/desktop-api-python/commit/fcf96d3c4f3bdbec2cd1b88745cdbbc48e864be2))
* **internal:** codegen related update ([a6b8aac](https://github.com/beeper/desktop-api-python/commit/a6b8aac8430c698cd1a73bab2cd257c9cf553df6))
* **internal:** make `test_proxy_environment_variables` more resilient ([2420dd3](https://github.com/beeper/desktop-api-python/commit/2420dd3d3de95350f142acaf7fb923fd292af59e))
* **internal:** make `test_proxy_environment_variables` more resilient to env ([1ad2ddf](https://github.com/beeper/desktop-api-python/commit/1ad2ddfe678d2a495d69e45d7a1a8f0856af4211))
* **internal:** more robust bootstrap script ([ed8c2c4](https://github.com/beeper/desktop-api-python/commit/ed8c2c499c99ac2f1a4e83054ae0000cb9e12c47))
* **internal:** reformat pyproject.toml ([f11e2a6](https://github.com/beeper/desktop-api-python/commit/f11e2a6c2e25d78bd95e0a81ce52e814dc2a9e79))
* **internal:** tweak CI branches ([311a998](https://github.com/beeper/desktop-api-python/commit/311a998617de99c1defaa4c54f1b8a308d1bfaf3))
* **internal:** update gitignore ([3dfb379](https://github.com/beeper/desktop-api-python/commit/3dfb3799f6ebbde6400db092864361e3b6a6e07f))
* **test:** do not count install time for mock server timeout ([352dc26](https://github.com/beeper/desktop-api-python/commit/352dc26df496dac34b88c8d410a3d5761fad7cde))
* **tests:** bump steady to v0.19.4 ([68f14af](https://github.com/beeper/desktop-api-python/commit/68f14afb85f168eb61a91398165b1d8222fbeea4))
* **tests:** bump steady to v0.19.5 ([9229d32](https://github.com/beeper/desktop-api-python/commit/9229d32b59f8494f49677dbf508d2fedd21cd8b4))
* **tests:** bump steady to v0.19.6 ([166b069](https://github.com/beeper/desktop-api-python/commit/166b069fbd3034b27d16baf50ef96c61a46996d9))
* **tests:** bump steady to v0.19.7 ([31a8e58](https://github.com/beeper/desktop-api-python/commit/31a8e58a09bd798b9930c195da2be239d50a2e77))
* **tests:** bump steady to v0.20.1 ([d2cf119](https://github.com/beeper/desktop-api-python/commit/d2cf119042313a4b82f4a395a43c175874ceca1e))
* **tests:** bump steady to v0.20.2 ([0def55c](https://github.com/beeper/desktop-api-python/commit/0def55c17787849b27d1e8c21cb6cd129069e220))
* **tests:** bump steady to v0.22.1 ([29127f7](https://github.com/beeper/desktop-api-python/commit/29127f7697a10191b913f86e8664321963b55003))
* update placeholder string ([f9883db](https://github.com/beeper/desktop-api-python/commit/f9883db325ccb453c60affa4218f2b257c4d41d8))
* update SDK settings ([b954521](https://github.com/beeper/desktop-api-python/commit/b954521c09743ea77dc1fe3f49e62cadb9cb6b1f))
* update SDK settings ([5df69bf](https://github.com/beeper/desktop-api-python/commit/5df69bf22554340ee0fd0c694fb755c80907ee22))


### Refactors

* **tests:** switch from prism to steady ([ef99778](https://github.com/beeper/desktop-api-python/commit/ef99778f642f49a26aad1d65c59df9f9cfa766e9))

## 4.3.0 (2026-02-20)

Full Changelog: [v4.2.0...v4.3.0](https://github.com/beeper/desktop-api-python/compare/v4.2.0...v4.3.0)
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ $ pip install ./path-to-wheel-file.whl

## Running tests

Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.
Most tests require you to [set up a mock server](https://github.com/dgellow/steady) against the OpenAPI spec to run the tests.

```sh
$ ./scripts/mock
Expand Down
33 changes: 18 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ client = BeeperDesktop(
)

page = client.chats.search(
account_ids=["matrix", "discordgo", "local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc"],
include_muted=True,
limit=3,
type="single",
Expand Down Expand Up @@ -71,6 +72,7 @@ client = AsyncBeeperDesktop(

async def main() -> None:
page = await client.chats.search(
account_ids=["matrix", "discordgo", "local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc"],
include_muted=True,
limit=3,
type="single",
Expand Down Expand Up @@ -111,6 +113,7 @@ async def main() -> None:
http_client=DefaultAioHttpClient(),
) as client:
page = await client.chats.search(
account_ids=["matrix", "discordgo", "local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc"],
include_muted=True,
limit=3,
type="single",
Expand Down Expand Up @@ -144,9 +147,9 @@ client = BeeperDesktop()
all_messages = []
# Automatically fetches more pages as needed.
for message in client.messages.search(
account_ids=["local-telegram_ba_QFrb5lrLPhO3OT5MFBeTWv0x4BI"],
account_ids=["discordgo", "local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc"],
limit=10,
query="deployment",
query="oauth",
):
# Do something with message here
all_messages.append(message)
Expand All @@ -166,9 +169,9 @@ async def main() -> None:
all_messages = []
# Iterate through items across all pages, issuing requests as needed.
async for message in client.messages.search(
account_ids=["local-telegram_ba_QFrb5lrLPhO3OT5MFBeTWv0x4BI"],
account_ids=["discordgo", "local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc"],
limit=10,
query="deployment",
query="oauth",
):
all_messages.append(message)
print(all_messages)
Expand All @@ -181,9 +184,9 @@ Alternatively, you can use the `.has_next_page()`, `.next_page_info()`, or `.get

```python
first_page = await client.messages.search(
account_ids=["local-telegram_ba_QFrb5lrLPhO3OT5MFBeTWv0x4BI"],
account_ids=["discordgo", "local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc"],
limit=10,
query="deployment",
query="oauth",
)
if first_page.has_next_page():
print(f"will fetch next page using these details: {first_page.next_page_info()}")
Expand All @@ -197,9 +200,9 @@ Or just work directly with the returned data:

```python
first_page = await client.messages.search(
account_ids=["local-telegram_ba_QFrb5lrLPhO3OT5MFBeTWv0x4BI"],
account_ids=["discordgo", "local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc"],
limit=10,
query="deployment",
query="oauth",
)

print(f"next page cursor: {first_page.oldest_cursor}") # => "next page cursor: ..."
Expand All @@ -218,11 +221,11 @@ from beeper_desktop_api import BeeperDesktop

client = BeeperDesktop()

chat = client.chats.create(
account_id="accountID",
user={},
chat = client.chats.update(
chat_id="!NCdzlIaMjZUmvmvyHU:beeper.com",
draft={"text": "text"},
)
print(chat.user)
print(chat.draft)
```

## File uploads
Expand Down Expand Up @@ -337,10 +340,10 @@ Note that requests that time out are [retried twice by default](#retries).

We use the standard library [`logging`](https://docs.python.org/3/library/logging.html) module.

You can enable logging by setting the environment variable `BEEPER_DESKTOP_LOG` to `info`.
You can enable logging by setting the environment variable `BEEPER_LOG` to `info`.

```shell
$ export BEEPER_DESKTOP_LOG=info
$ export BEEPER_LOG=info
```

Or to `debug` for more verbose logging.
Expand Down Expand Up @@ -439,7 +442,7 @@ import httpx
from beeper_desktop_api import BeeperDesktop, DefaultHttpxClient

client = BeeperDesktop(
# Or use the `BEEPER_DESKTOP_BASE_URL` env var
# Or use the `BEEPER_BASE_URL` env var
base_url="http://my.test.server.example.com:8083",
http_client=DefaultHttpxClient(
proxy="http://my.test.proxy.example.com",
Expand Down
Loading