Developers
Content
El dueño edita el sitio desde el chat. Tu app lee esos datos vía API tokenizada — sin paneles ni CMS paralelo.
Qué es
Cada sitio Guaso guarda content_entries tipados por el schema del template (páginas, colecciones, bloques). La Content API expone lectura autenticada para hosts headless; la escritura sigue siendo solo por chat.
El package @guaso-ai/content es el cliente HTTP server-only para leer esas entries con token de lectura. No escribe, no abre Neon, no corre en el browser. La UI de bloques no vive acá: usá el registry @guaso.
Instalar
npm i @guaso-ai/contentTambién en npm (@guaso-ai/content@0.2.0)(abre en una pestaña nueva).
Uso mínimo
import { createClient } from "@guaso-ai/content"; const client = createClient({ siteId: process.env.GUASO_SITE_ID!, token: process.env.GUASO_CONTENT_TOKEN!,}); const home = await client.getEntry("pages/home");if (home.empty) { // empty state} const batch = await client.getEntries(["pages/home", "pages/about"]);
Solo en RSC / route handlers / server. Tipado mínimo: getEntry / getEntries → { data, empty }. Env opcional GUASO_API_BASE (default https://api.guaso.link). Missing key → { data: null, empty: true } (HTTP 200). Revalidate vía webhook del host — el contrato es host-agnóstico.
Server-only
El package depende de server-only. Importarlo desde un Client Component ("use client") rompe el build (poison). El assert de runtime también tira si hay window (Node/Vite/tests sin condition react-server).
Guard ESLint opcional (copy-paste — npm i no configura ESLint):
// eslint.config.mjs — opcional; npm i NO lo aplica solo{ files: ["**/components/**/*.{ts,tsx}"], rules: { "no-restricted-imports": [ "error", { paths: [ { name: "@guaso-ai/content", message: "Server-only: importá desde RSC / route handlers, nunca desde Client Components. Token ⛔ NEXT_PUBLIC_*.", }, ], }, ], },}
Código fuente
El SoT vive fuera del monorepo de Guaso App:
github.com/guaso-ai/guaso-content(abre en una pestaña nueva)Relacionado
- Blocks registry — componentes UI del catálogo creativo.