Metadata-Version: 2.5
Name: qqflow-sdk
Version: 0.9.0
Summary: Typed Python client for qqflow-server's HTTP API (generated models + handwritten behavior layer)
Project-URL: Homepage, https://github.com/ren-yc/qqflow-server
Project-URL: Repository, https://github.com/ren-yc/qqflow-server
Project-URL: Issues, https://github.com/ren-yc/qqflow-server/issues
Author: ren-yc
License-Expression: MIT
License-File: LICENSE
Requires-Python: >=3.10
Requires-Dist: httpx>=0.27
Requires-Dist: pydantic>=2.7
Requires-Dist: python-dateutil>=2.8
Requires-Dist: typing-extensions>=4.7
Provides-Extra: dev
Requires-Dist: openapi-generator-cli>=7; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest>=8; extra == 'dev'
Requires-Dist: ruff==0.16.1; extra == 'dev'
Description-Content-Type: text/markdown

# qqflow-sdk

Typed Python client for [qqflow-server](https://github.com/ren-yc/qqflow-server) — a headless, read-only HTTP/SSE service over local QQ NT chat databases.

Generated from the server's OpenAPI description (types + request plumbing), with a handwritten behavior layer on top: transport failures folded into a proper error tree, readiness polling, pagination helpers, SSE streaming, and media download helpers.

## Install

```
pip install qqflow-sdk
```

## Minimal example

```python
import asyncio

from qqflow_sdk import Client


async def main() -> None:
    client = Client(base_url="http://127.0.0.1:5032", token="your-token")
    await client.health()
    sessions = await client.list_all_sessions()
    await client.aclose()


asyncio.run(main())
```

## Scope

The server exposes a strictly read-only surface: accounts, sessions, messages, contacts, group members, media export, and an SSE push stream. This client mirrors that surface one-to-one; see the server repository for the API reference and the interface contract the client is tested against.

## License

MIT
