Files
lib-integration-registry-cl…/README.md
Giuliano Silvestro ac9f1fa7c2 Initial commit — @crema/integration-registry-client
Typed client + types for the arcadia integration registry (on arcadia-llm-gateway).
One createIntegrationsApi(client, mode) factory serves both surfaces:
- operator → /api/v1/integrations* (any scope, scope filters)
- tenant   → /api/v1/me/integrations* (scope forced server-side)

Plus shared types (Integration/Credential/UsageEntry/*Input/TestVerdict) and
display helpers (formatUsd, credentialHealth). Consumed by arcadia-admin and
arcadia-console as a sibling lib via vite/tsconfig aliases (no build step).
Secrets are write-only; the rich panels stay per-app.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 21:25:29 +10:00

27 lines
1.2 KiB
Markdown

# @crema/integration-registry-client
Typed client + types for the **arcadia integration registry** — the external-API
credential plane hosted on `arcadia-llm-gateway`. Consumed by `arcadia-admin`
(operator) and `arcadia-console` (tenant) as a sibling lib via vite/tsconfig
aliases (no build step — the app compiles `src/` directly).
```ts
import { createIntegrationsApi } from "@crema/integration-registry-client"
// gateway-pointed ArcadiaClient (see each app's app/lib/gateway.ts)
const api = createIntegrationsApi(gatewayClient, "tenant") // or "operator"
await api.list()
await api.create({ provider: "tavily", capability: "web_search" })
await api.test(id) // throws ArcadiaError on 409 expired / 429 over-budget
```
- `operator` mode → `/api/v1/integrations*` (any scope, scope filters honoured).
- `tenant` mode → `/api/v1/me/integrations*` (scope forced to the caller server-side).
Secrets are **write-only**: reads carry `has_secret`, never a value.
The rich management **page/components stay per-app** (they use each app's shadcn
primitives and the operator/tenant surfaces legitimately diverge) — this lib owns
the client, types, and display helpers only.