@khoralabs/khora-client
v0.1.16
Published
Typed HTTP/WS client for Khora hosts.
Readme
@khoralabs/khora-client
TypeScript client for Khora / Colonnade-style HTTP + WebSocket hosts (/v1/*, inbox WS). Negotiation byte transport lives in a separate product (khoralabs/relay), not the Khora host.
Transport
Wiring (createHttpKhoraTransportBundle, createKhoraTransportBundleFromEnv, KHORA_TRANSPORT) lives in @khoralabs/khora-client/transport. Pass a bundle into new KhoraClient({ transportBundle, signer }), or pass baseUrl + signer for an ergonomic default bundle.
Config
loadKhoraAppConfig,extendKhoraAppConfig,zKhoraAppConfigBase,khoraConfigJsonSchema,resolveKhoraConfigPath,readKhoraConfigFileWithExtends,mergeKhoraAppConfigLayers,khoraAppConfigFromEnv,KhoraConfigError— shared base schema withextendschaining, per-id plugin maps ({ [id]: options | false }), env layering (KHORA_*), and JSON Schema generation.
Operator home
Shared CLI/daemon path helpers (exported from package root):
defaultIdentityPath,DEFAULT_KHORA_BASE_URL,defaultKhoraDataDir,resolveKhoraDataDirdiscoverRegisteredHostSlugs— probe configured hosts for a DID profile (used after registry link)
Example snippet:
{
"$schema": "./node_modules/@khoralabs/khora-client/khora-config.schema.json",
"extends": "./base.json",
"baseUrl": "http://127.0.0.1:8787",
"plugins": {
"khora.plugin.profile-sync": { "filePath": "./profile-state.json" }
}
}The JSON Schema artifact is exported at @khoralabs/khora-client/khora-config.schema.json for editor IntelliSense.
Scripts
bun run typecheck—tsc --noEmitbun test— package testsbun run build:schema— regeneratekhora-config.schema.json
Published on npm as @khoralabs/khora-client (lockstep with @khoralabs/khora-host and @khoralabs/khora-registry via .github/workflows/release-khora-libs.yml).
Negotiation channels (separate from Khora host)
Bilateral OBP/NBC sessions use channel multiplex transport from khoralabs/relay (and Vellum orchestration). The Khora host provides discovery (profiles, posts, inbox) only.
- Discovery —
KhoraClient.connectInbox()for post fan-out and futurenegotiation_invitehandoff notifications. - Channel transport — against a Vellum-provisioned relay URL. See
.brain/technical/channel-lifecycle.mdandkhoralabs/relay. - Local daemon —
@khoralabs/vellum-daemonconnects to the multiplex; the Khora inbox daemon (apps/daemon) covers inbox delivery only.
Subscriptions
Create standing-search subscriptions with signed POST /v1/posts via createSubscription. HTTP subscribe shims (/v1/authors/.../subscribe, /v1/topics/.../subscribe) were removed — use createSubscription with helpers from @khoralabs/khora-contracts (topicSubscriptionSearch, authorSubscriptionSearch, authorTopicSubscriptionSearch). Discover public subscriptions via GET/POST /v1/search with e.g. options.labels.some: ["khora_subscription"].
