# Installa l'SDK

> Il pacchetto @vimine/sdk, i suoi tre punti d'ingresso, i requisiti.

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

L'SDK ufficiale è **`@vimine/sdk`**: TypeScript, ESM, **zero dipendenze** (usa `fetch` e WebCrypto). Il
punto d'ingresso per il browser pesa circa 7 kB compressi.

<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>

## I punti d'ingresso

| Import | Cosa contiene | Dove |
|---|---|---|
| `@vimine/sdk` | `Vimine` (Accedi con Vimine + API del socio), `publicApi`, `VimineError`, i tipi | browser; anche Node con uno storage tuo |
| `@vimine/sdk/react` | `VimineProvider`, `useVimine`, `SignInButton` | React ≥ 18 (peer dependency opzionale) |
| `@vimine/sdk/server` | `VimineServer` (client riservati, `client_credentials`, sandbox) | Node ≥ 18 — mai nel browser |

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

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

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

## Requisiti

- **Browser**: `fetch`, `crypto.subtle` (WebCrypto) e `sessionStorage`/`localStorage` — tutti i browser
  moderni. Le pagine devono essere servite su `https` (o `http://localhost` in sviluppo): WebCrypto non è
  disponibile su origini non sicure.
- **Node**: 18 o successivo (`fetch` e `globalThis.crypto` nativi).
- **Bundler**: qualunque (Vite, webpack, esbuild, …) o `<script type="module">` con un bundle tuo. Il pacchetto
  è solo ESM.
- **TypeScript**: i tipi sono inclusi; nessun `@types/*` da aggiungere.

## Il primo accesso

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

const vimine = new Vimine({
    clientId: 'vmc_…',                                        // dalla console Sviluppatori
    redirectUri: 'https://www.tuosito.it/vimine/callback', // registrato per il client
    scopes: ['profile:read', 'membership:read']
});

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

```js title="callback.js"
const result = await vimine.handleRedirect();   // scambia il codice, salva la sessione
if (result) {
    const me = await vimine.me.get();
    console.log(`Ciao ${me.first_name}`);
}
```

Prosegui con [Accedi con Vimine](https://developers.vimine.network/guides/sign-in/) per il flusso completo, la sessione e l'uscita.
