Instalación

Los paquetes de JavaScript y de Python, y qué necesitas configurar antes de la primera llamada.

JavaScript

El paquete base es @andco/sdk. Trae el cliente, OAuth, el almacenamiento de sesión y el cliente REST, y funciona en cualquier runtime con fetch: navegador, Node, Bun, Deno, Expo, Tauri.

bash
npm install @andco/sdk
bash
pnpm add @andco/sdk
bash
yarn add @andco/sdk
bash
bun add @andco/sdk

Si usas un framework, agrega su paquete de enlace. Cada uno depende de @andco/sdk y no duplica nada de él.

Framework Paquete
React, Next.js @andco/sdk-react
Vue @andco/sdk-vue
Svelte @andco/sdk-svelte
Sin build, con <script> @andco/sdk-script
Expo, React Native @andco/sdk-react-native-webview
bash
npm install @andco/sdk @andco/sdk-react
bash
pnpm add @andco/sdk @andco/sdk-react
bash
yarn add @andco/sdk @andco/sdk-react
bash
bun add @andco/sdk @andco/sdk-react

En el servidor puede que además quieras la integración con tu capa de autenticación: @andco/better-auth para Better Auth y @andco/passport para Passport.

Python

bash
uv add andco-sdk
bash
pip install andco-sdk
bash
poetry add andco-sdk

El SDK de Python es solo de backend: cliente confidencial, sin navegador y sin presentaciones. Requiere Python 3.11 o superior.

Lo que necesitas de Andco

Para cualquier integración hacen falta dos valores, que obtienes al registrar tu aplicación:

  • clientId: identifica públicamente a tu aplicación. Viaja en la URL de autorización y no es un secreto.
  • redirectTo: la URL exacta a la que Andco devuelve al usuario. Debe estar registrada tal cual, incluido el esquema y el puerto.

Una integración de servidor necesita además un clientSecret, que nunca debe llegar al navegador. Si estás construyendo una aplicación de navegador, no tienes ni necesitas un secreto: el flujo usa PKCE justamente para eso.

Variables de entorno

El SDK no lee variables de entorno por su cuenta: las recibe como argumentos. Eso deja la decisión de dónde viven en tu aplicación, que es donde corresponde.

.env.localts
NEXT_PUBLIC_ANDCO_CLIENT_ID=tu-client-id
ANDCO_CLIENT_SECRET=tu-client-secret

La convención de prefijos es la de tu framework. Lo único que importa es que el secreto no esté entre las variables que el framework expone al navegador.

Comprobar que quedó

scripts/check.tsts
import { createAndcoInstanceForServer } from "@andco/sdk/server";

const andco = createAndcoInstanceForServer({
  clientId: process.env.ANDCO_CLIENT_ID!,
  clientSecret: process.env.ANDCO_CLIENT_SECRET!,
});

const configuration = await andco.oauth.configuration();
console.log(configuration.serverMetadata().issuer);

Si eso imprime el emisor, tu configuración llega al servidor de autorización y el resto de la documentación te va a funcionar. Si falla, el error dice qué URL no respondió.