https://github.com/wavekat/wavekat-platform-client
Rust client for the WaveKat platform — auth, sessions, artifact upload. Shared by wavekat-cli and wavekat-voice.
https://github.com/wavekat/wavekat-platform-client
Last synced: about 1 month ago
JSON representation
Rust client for the WaveKat platform — auth, sessions, artifact upload. Shared by wavekat-cli and wavekat-voice.
- Host: GitHub
- URL: https://github.com/wavekat/wavekat-platform-client
- Owner: wavekat
- License: apache-2.0
- Created: 2026-05-14T04:02:43.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-23T02:41:39.000Z (about 1 month ago)
- Last Synced: 2026-05-23T04:24:18.380Z (about 1 month ago)
- Language: Rust
- Size: 43.9 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://crates.io/crates/wavekat-platform-client)
[](https://docs.rs/wavekat-platform-client)
Rust client for the [WaveKat platform](https://platform.wavekat.com) — auth, sessions, artifact upload.
> [!WARNING]
> Early scaffolding. No public API yet. See [Status](#status) below.
## Why this crate exists
The WaveKat product surface includes several Rust consumers that need to talk to the same platform:
- [`wavekat-cli`](https://github.com/wavekat/wavekat-cli) — `wk`, the developer CLI (login, projects, exports).
- [`wavekat-voice`](https://github.com/wavekat/wavekat-voice) — the desktop daemon, which will upload call recordings and transcripts to the platform on the user's behalf.
- Future WaveKat tools.
Today the auth + HTTP plumbing lives inside `wavekat-cli`'s binary. Pulling a CLI tool into a Rust app to reuse its auth code is the wrong shape: it drags in CLI-only dependencies (`clap`, `arrow`, `parquet`, …), the name reads wrong in another app's `Cargo.toml`, and the CLI's release cadence couples to consumers that have nothing to do with `wk` features.
This crate is the one place that knows how to talk to `platform.wavekat.com`. Each consumer wires its own storage policy (the CLI uses a JSON file at `~/.config/wavekat/auth.json`; `wavekat-voice` uses the OS keychain) — the crate itself stores nothing.
## Status
| Surface | State |
|---|---|
| `Client` (reqwest-backed bearer HTTP) | Coming in v0.0.1 — port from `wavekat-cli/src/client.rs`. |
| Loopback OAuth handshake | Coming in v0.0.1 — port from `wavekat-cli/src/commands/login.rs`. |
| `/api/me` typed wrapper | v0.0.1. |
| Token revoke (`/api/auth/cli/tokens/revoke-current`) | v0.0.1. |
| Artifact upload (3-step: create → presigned PUT → finalize) | v0.0.2+ — once recording lands in `wavekat-voice`. |
| CLI migration to depend on this crate | Follow-up. The CLI keeps working as-is until then. |
## Design
- **Zero opinion on storage.** The crate exposes a `Client::new(base_url, token)` constructor. Consumers load the token from wherever fits — keychain, file, env var, in-memory test fixture — and hand it in.
- **Single bearer token shape**: `wk_…` issued by `POST /api/auth/cli/tokens`. The route path is historical (the CLI was the only consumer originally); the platform mints the same kind of token for any caller that completes the loopback OAuth flow.
- **No async runtime opinion in the surface** — uses `reqwest` async with whatever runtime the consumer brings (tokio in practice).
## License
Apache-2.0. See [`LICENSE`](LICENSE).