Metadata-Version: 2.4
Name: quorum-sdk
Version: 1.0.0
Summary: Quorum Protocol Python SDK — server-side request creation, webhook verification, group management
Project-URL: Homepage, https://quorum-opal.vercel.app/
Project-URL: Repository, https://github.com/Quorum-Protocol/quorum-sdks
Project-URL: Documentation, https://docs.quorum.dev/sdks/python
Project-URL: Bug Tracker, https://github.com/quorum-protocol/quorum-sdks/issues
License: Apache-2.0
Keywords: argon2,authentication,multi-party,quorum
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.9
Requires-Dist: argon2-cffi>=23.1.0
Requires-Dist: httpx>=0.28.1
Provides-Extra: dev
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest>=8.1; extra == 'dev'
Requires-Dist: respx>=0.21; extra == 'dev'
Description-Content-Type: text/markdown

# quorum-sdk (Python)

Python SDK for the Quorum Protocol API — server-side request creation,
webhook verification, group management.

## Install

```bash
pip install quorum-sdk
```

## Quick start

```python
from quorum import QuorumClient, verify_webhook_signature

client = QuorumClient(
    base_url="https://api.quorum.dev",
    api_key="qrm_..."
)

# Create an auth request
req = client.create_request(
    group_id="your-group-uuid",
    action_descriptor="Approve payment instruction",
    payload_hash="sha256_hex_of_payload",
    expires_in=300,
)
print(req.id, req.status)  # pending

# Verify webhook (e.g. in a Flask handler)
from flask import request

@app.post("/webhooks/quorum")
def handle():
    sig = request.headers.get("X-Quorum-Signature-256", "")
    if not verify_webhook_signature(request.data, WEBHOOK_SECRET, sig):
        return "Unauthorized", 401
    event = request.json
    if event["event"] == "request.approved":
        # handle approval
        pass
    return "ok"
```

## Server-side share derivation (USSD / server path)

```python
from quorum.crypto import derive_share

share_hex = derive_share(pin="284751", salt_hex="a3f2e1d4..." * 2)
client.authorize(request_id=req.id, member_id=member_id, share_hex=share_hex, token=token)
```
