# Instalar el SDK

> El paquete @vimine/sdk, sus tres puntos de entrada, los requisitos.

URL: https://developers.vimine.network/es/start/install/

El SDK oficial es **`@vimine/sdk`**: TypeScript, ESM, **sin dependencias** (usa `fetch` y WebCrypto). El punto de
entrada del navegador pesa unos 7 kB comprimido.

<Tabs syncKey="pkg">
    <TabItem label="npm">
        ```sh
        npm install @vimine/sdk
        ```
    </TabItem>
    <TabItem label="pnpm">
        ```sh
        pnpm add @vimine/sdk
        ```
    </TabItem>
    <TabItem label="yarn">
        ```sh
        yarn add @vimine/sdk
        ```
    </TabItem>
</Tabs>

## Puntos de entrada

| Import | Qué contiene | Dónde |
|---|---|---|
| `@vimine/sdk` | `Vimine` (Iniciar sesión con Vimine + API de socios), `publicApi`, `VimineError`, los tipos | navegador; también Node, con un almacenamiento propio |
| `@vimine/sdk/react` | `VimineProvider`, `useVimine`, `SignInButton` | React ≥ 18 (dependencia peer opcional) |
| `@vimine/sdk/server` | `VimineServer` (clientes confidenciales, `client_credentials`, sandbox) | Node ≥ 18 — nunca en un navegador |

```js title="navegador"
import { Vimine, publicApi, VimineError } from '@vimine/sdk';
```

```js title="servidor"
import { VimineServer } from '@vimine/sdk/server';
```

```jsx title="React"
import { VimineProvider, useVimine, SignInButton } from '@vimine/sdk/react';
```

## Requisitos

- **Navegador**: `fetch`, `crypto.subtle` (WebCrypto) y `sessionStorage`/`localStorage` — cualquier navegador
  moderno. Las páginas deben servirse por `https` (o `http://localhost` en desarrollo): WebCrypto no está
  disponible en orígenes no seguros.
- **Node**: 18 o posterior (`fetch` y `globalThis.crypto` nativos).
- **Bundler**: cualquiera (Vite, webpack, esbuild, …) o `<script type="module">` con un bundle propio. El
  paquete es solo ESM.
- **TypeScript**: los tipos están incluidos; no hay que añadir ningún `@types/*`.

## El primer inicio de sesión

```js title="app.js"
import { Vimine } from '@vimine/sdk';

const vimine = new Vimine({
    clientId: 'vmc_…',                                          // de la consola Desarrolladores
    redirectUri: 'https://www.example.org/vimine/callback',  // registrado para el cliente
    scopes: ['profile:read', 'membership:read']
});

document.querySelector('#sign-in').addEventListener('click', () => vimine.signIn());
```

```js title="callback.js"
const result = await vimine.handleRedirect();   // intercambia el código, guarda la sesión
if (result) {
    const me = await vimine.me.get();
    console.log(`Hola, ${me.first_name}`);
}
```

Sigue con [Iniciar sesión con Vimine](https://developers.vimine.network/es/guides/sign-in/) para el flujo completo, la sesión y el cierre de sesión.
