Observed since 20 Oct, 23:05 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Client for the Tab gateway: agent credit on Hedera. Ten verbs, two of which spend.
Tier 3 · PUBLISHED to npm · thin HTTP client · browser-safe
The TypeScript client every other surface is built on: agentkit-plugin, mcp, cli,
dashboard, and both demo agents.
boundaries.json forbids @hiero-ledger/sdk, ioredis and drizzle-orm here. This package
speaks HTTP to the gateway and nothing else.
That constraint carries the product claim. The agent holds no key and signs nothing — so the library it installs should not even be able to sign. If the SDK bundled the Hedera SDK, the claim would rest on us not having used it. This way it rests on a check anyone can run.
Browser-safe matters too: apps/web imports this, and a browser bundle must not be able to
reach a signing path or a database driver.
spend · quote · balance · ceiling · receipts · register
The same five verbs appear in the Agent Kit plugin and the MCP server. Define them once here.
| File | Holds |
|---|---|
src/client.ts | constructor, auth, retry, timeouts |
src/spend.ts | the spend call, including the refusal shape |
src/quote.ts | pre-flight quote without reserving |
src/state.ts | balance, ceiling, available, pending holds, window countdown |
src/receipts.ts | receipt history and the SSE stream the dashboard consumes |
src/errors.ts | typed errors — refusal, unavailable, invalid |
src/types.ts | re-exported from @0xdivyanshh/tab-protocol. One definition, not two |
spend() returns a discriminated result carrying
the rule that fired. Throwing on refusal pushes every consumer into try/catch and makes the
Refusals view harder to build — and refusal is the demo, so it deserves a first-class type.
Throw only for transport and protocol failures.MicroUsdc on the way in. bigint
does not survive JSON.stringify.@0xdivyanshh/tab-protocol, never redefined. A second copy will drift.spend carries an idempotency key so a network retry cannot double-spend.Versioned with changesets. Once an agent depends on this, breaking changes cost someone a redeploy — so treat exports as a contract from the first release.
Download counts and popularity will appear here as the collector receives them.
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 23:05 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:d42427ab9e053b284075b614f9f0e5d96af66f6788cc1678879e9a3c321f843b