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
// 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
// preload.ts
import '@vonvon-kit/electron/preload'
// Exposes window.vonvonBridge with storage, signIn, signOut,
// getAccessToken, getSession, setTokenStorageProcessus de rendu
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)
// 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 dansapp.getPath('userData')/vonvon-tokens/par défaut. - Si
safeStorage.isEncryptionAvailable()retournefalse(Linuxheadless sans trousseau),setItem()lèveElectronStorageErroravec le codeencryption_unavailableplutôt que d’écrire en clair silencieusement. - Remplacer le répertoire de stockage avec
storageDirdansVonvonElectronMainOptions.
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 |