Files
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

1.2 KiB

@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).

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.