@bazilion/client
v0.5.1
Published
HTTP client for the Bazilion daemon. Zero node-only deps — works in browsers, React Native, and Node.
Readme
@bazilion/client
HTTP client for the Bazilion daemon. Zero node-only deps — works in browsers, React Native, and Node.
A thin fetch wrapper over the Bazilion HTTP API: bearer auth (with rotating-token support), JSON + multipart + NDJSON streaming, typed errors. Wire types come from the peer package @bazilion/api-types.
Install
npm install @bazilion/client @bazilion/api-typesRequires Node 24+ (or any runtime with fetch, TextDecoder, and async iteration).
Usage
import { createClient, ApiClientError } from '@bazilion/client'
import type { Agent, ChatFrame } from '@bazilion/api-types'
const client = createClient({
serverUrl: 'http://127.0.0.1:4321',
token: process.env.BAZILION_TOKEN!, // or () => fetchToken()
})
// Simple JSON GET
const agents = await client.get<Agent[]>('/api/agents')
// Streaming chat (NDJSON)
for await (const frame of client.stream<ChatFrame>(
'POST',
`/api/agents/${agentId}/chat`,
{ message: 'say hi' },
)) {
if (frame.kind === 'event') console.log(frame.event)
}
// Error handling
try {
await client.post('/api/agents/missing/cancel')
} catch (err) {
if (err instanceof ApiClientError && err.status === 404) {
// ...
}
}Token rotation
Pass an async supplier instead of a string for OAuth refresh, mobile keychain reads, etc. — it's invoked on every request:
const client = createClient({
serverUrl: 'http://127.0.0.1:4321',
token: async () => await keychain.readToken('bazilion'),
})Getting a token
On the daemon machine, mint a per-client token with the CLI:
bazilion token create "my-app"The plaintext is shown once — pass it to createClient as the token field. Revoke any time with bazilion token revoke <id>.
API surface
createClient({ serverUrl, token }) returns:
| Method | Signature | Purpose |
| --- | --- | --- |
| get | <T>(path) => Promise<T> | JSON GET |
| post | <T>(path, body?) => Promise<T> | JSON POST |
| put | <T>(path, body?) => Promise<T> | JSON PUT |
| patch | <T>(path, body?) => Promise<T> | JSON PATCH |
| del | <T>(path) => Promise<T> | DELETE |
| postMultipart | <T>(path, FormData) => Promise<T> | File uploads |
| stream | <T>(method, path, body?) => AsyncGenerator<T> | NDJSON streaming |
All methods reject with ApiClientError on non-2xx responses; the error carries status and the daemon's { error: string } body.
Documentation
- Daemon HTTP API & overall architecture: https://github.com/rullopat/bazilion
- Wire types: https://www.npmjs.com/package/@bazilion/api-types
