# posemesh-domain-http
Cross-platform HTTP client for Auki posemesh domains (native + WASM) with Rust, JavaScript, and Python bindings.
## Authentication Modes
- **App credentials (key/secret)**: read-all, no writes.
- **User credentials (email/password)**: read-all + write own org domains.
- **OIDC access token**: read/write per assigned roles.
## Key Features
- Streaming downloads and uploads (WASM streaming download; uploads not in Python).
- Domain listing/creation/deletion helpers.
- Reconstruction job submission.
- JavaScript package [`@auki/domain-client`](https://www.npmjs.com/package/@auki/domain-client) for browsers, Deno, and Node 18+ (ReadableStream).
## Usage
`client_id` must be non-empty (use device/user ID on frontend; unique service ID on backend).
### Rust
```rust
use posemesh_domain_http::{DomainClient, DownloadQuery, ListDomainsQuery};
let client = DomainClient::new_with_user_credential(
&api_url, &dds_url, &client_id, &email, &password, true)?;
let domains = client.list_domains(&ListDomainsQuery{ org: "own".into(), portal_id: None, portal_short_id: None }).await?;
let data = client.download_domain_data(&domain_id, &DownloadQuery{ ids: vec![], name: None, data_type: None }).await?;
```
### JavaScript / TypeScript
```ts
import { DomainClient } from "@auki/domain-client";
const client = await DomainClient.new_with_user_credential(apiUrl, ddsUrl, clientId, email, password, true);
const domains = await client.listDomains({ org: "own" });
const data = await client.downloadDomainData(domainId, { ids: [] });
client.free();
```
### Python
```python
from auki_domain_client import DomainClient, ListDomainsQuery, DownloadQuery
client = DomainClient.new_with_user_credential(api_url, dds_url, client_id, email, password, True)
domains = client.list_domains(ListDomainsQuery(org="own", portal_id=None, portal_short_id=None))
data = client.download_domain_data(domain_id, DownloadQuery(ids=[], name=None, data_type=None))
```
## Build
- Native: `cargo build -p posemesh-domain-http --release`
- WASM JS pkg: `make build-domain-http TARGET=wasm` → `domain-http/bindings/javascript/pkg`
- Python pkg: `make build-domain-http TARGET=python` → `domain-http/bindings/python/.venv/lib/auki_domain_client`
## Test
`make unit-tests` (runs Rust + JS/WASM)
## Changelog
See [CHANGELOG.md](https://github.com/aukilabs/posemesh/blob/main/core/domain-http/CHANGELOG.md).