Cargando documentación…
Cargando documentación…
NotHeadless
@notcommerce/headless-nube-sdk es un cliente type-safe, con batching automático, para la Storefront API de Tiendanube. Headless Store UI es un set de componentes de e-commerce construidos sobre shadcn/ui. Con los dos está hecha la tienda demo.
Tipado como un ORM
select acota el tipo del resultado campo por campo, como en Drizzle o Prisma. Los campos desconocidos son errores de compilación.
Batching automático
Las llamadas concurrentes a findUnique se combinan en un solo request con ids= (hasta 30 por llamada). Los requests idénticos se deduplican.
Paginación resuelta
findMany recorre todas las páginas y las trae en paralelo. O hacé streaming con for await.
Checkout seguro
Un solo handler valida el origen, que el producto esté en el catálogo, que la variante le pertenezca, las cantidades y el stock, y después redirige al checkout alojado en Tiendanube.
Consultá tu storefront como si fuera tu propia base de datos:
import { nube } from "@/lib/nube"
const products = await nube.products.findMany({
where: { categoryId: 41184206 },
orderBy: "best-selling",
select: { id: true, name: true, handle: true, images: true, variants: true },
})
// ^? { id: number; name: string; handle: string; images: ProductImage[]; variants: Variant[] }[]
const category = await nube.categories.findUnique({
where: { handle: "mundo-capy" },
select: { name: true },
with: { children: true, products: { select: { id: true, name: true }, limit: 8 } },
})
// ^? { name: string; children: {...}[]; products: { id: number; name: string }[] } | nullDespués renderizalo con Headless Store UI:
<ProductProvider product={product}>
<ProductGallery />
<ProductPurchase /> {/* precio · variantes · stock · cantidad · agregar al carrito */}
</ProductProvider>
<CartSheet /> {/* valida con tu servidor y después redirige al checkout */}Navegador (Headless Store UI) ── lineItems: [{productId, variantId, quantity}] ────▶ /api/checkout
▲ │ createCheckoutHandler
│ ▼
│ RSC: productos, categorías nube.cart.validate() ── GET en batch /products?ids=…
│ │
└── Server components ── nube.products.findMany() ──▶ Storefront API ◀───┘ nube.checkouts.create()
│
302 → https://…/checkout (alojado) ◀─────┘El token de Storefront nunca llega al navegador. Los componentes reciben datos planos y tipados desde server components, y lo único que el cliente manda de vuelta son ids y cantidades.