---
title: "@vonvon-kit/electron"
description: "SDK Electron avec flux PKCE dans le processus principal, preloadcontextBridge, stockage des jetons dans le trousseau OS et stratégies decallback loopback ou schéma personnalisé."
locale: "fr"
---

> Documentation Index
> Fetch the relevant documentation index at: https://vonvon.id/fr/sdks/llms.txt
> Use this file to discover all available pages before exploring further.

# @vonvon-kit/electron

## Statut

Statut du registre : UNPUBLISHED. Installez ce SDK uniquement depuis un checkout du code source du dépôt ; n'utilisez pas de registre de paquets externe.

Le statut du package est **Package actuel**. L'application du processusprincipal, le preload contextBridge et le pont côté rendu sontimplémentés. Un aller-retour réel avec un IdP sur une infrastructure deproduction est en attente de vérification manuelle.

## Points d'entrée

| Entrée | Objectif |
| --- | --- |
| `@vonvon-kit/electron` | Export par défaut : surface de rendu et types |
| `@vonvon-kit/electron/main` | Processus principal uniquement : VonvonElectronApp |
| `@vonvon-kit/electron/renderer` | Processus de rendu : getVonvonBridge, VonvonClient |
| `@vonvon-kit/electron/preload` | Script de préchargement prêt à l'emploi qui expose window.vonvonBridge |

## Configuration du processus principal

```ts
// main.ts
import { app, ipcMain } from 'electron'
import { VonvonElectronApp } from '@vonvon-kit/electron/main'

const vonvonApp = new VonvonElectronApp({
  issuer: 'https://vonvon.id',
  clientId: 'client_abc123',
  // callbackStrategy: 'loopback' (default, RFC 8252 s.7.3) | 'custom-scheme'
})

app.whenReady().then(async () => {
  await vonvonApp.init(ipcMain)
  const win = new BrowserWindow({
webPreferences: {
  contextIsolation: true,
  preload: path.join(__dirname, 'preload.js'),
},
  })
  win.on('closed', () => vonvonApp.dispose(ipcMain))
})
```

## Script de préchargement

```ts
// preload.ts
import '@vonvon-kit/electron/preload'
// Exposes window.vonvonBridge with storage, signIn, signOut,
// getAccessToken, getSession, setTokenStorage
```

## Processus de rendu

```ts
import { getVonvonBridge } from '@vonvon-kit/electron/renderer'

const bridge = getVonvonBridge()

// Opens system browser, waits for loopback callback, exchanges code.
const accessToken = await bridge.signIn()

// Get the current unexpired access token. Expiry requires a new sign-in.
const token = await bridge.getAccessToken() // null when signed out or expired

// Get the current unexpired session (accessToken + expiresAt in epoch seconds).
const session = await bridge.getSession()

// Clear local tokens. No refresh or revoke request is sent.
await bridge.signOut()
```

## Schéma personnalisé (alternative au loopback)

```ts
// main.ts
import { app } from 'electron'
import { VonvonElectronApp } from '@vonvon-kit/electron/main'

app.setAsDefaultProtocolClient('myapp')

const vonvonApp = new VonvonElectronApp({
  issuer: 'https://vonvon.id',
  clientId: 'client_abc123',
  callbackStrategy: 'custom-scheme',
  customScheme: 'myapp',  // redirect_uri = myapp://callback
})

vonvonApp.registerDeepLinkHandler(app)
```

## Stockage des jetons

- Les jetons sont chiffrés avec `safeStorage.encryptString()`(trousseau OS) et stockés sous forme de fichiers binaires dans`app.getPath('userData')/vonvon-tokens/` par défaut.
- Si `safeStorage.isEncryptionAvailable()` retourne `false` (Linuxheadless sans trousseau), `setItem()` lève`ElectronStorageError` avec le code `encryption_unavailable`plutôt que d'écrire en clair silencieusement.
- Remplacer le répertoire de stockage avec `storageDir` dans`VonvonElectronMainOptions`.

## Contrat natif commun

| Méthode | Description |
| --- | --- |
| `signIn(options?)` | Ouvre le navigateur système, échange le code, stocke les jetons |
| `signOut()` | Efface les jetons locaux |
| `getAccessToken()` | Retourne le jeton d'accès actuel non expiré sans renouvellement; efface l'état local expiré et retourne null. Le SDK rejette offline\_access tant que DPoP n'est pas implémenté. |
| `getSession()` | Retourne les valeurs actuelles accessToken et expiresAt si le jeton n'est pas expiré, ou null |

Source: https://vonvon.id/fr/sdks/electron/index.mdx
