SDK de Electron con flujo PKCE en el proceso principal, preload contextBridge, almacenamiento de tokens en el llavero del SO y estrategias de callback loopback o esquema personalizado.
El estado del paquete es Paquete actual. La app del proceso principal, el preload contextBridge y el bridge del lado del renderer están implementados. Una prueba de ida y vuelta real contra un IdP en infraestructura de producción está pendiente de verificación manual.
Puntos de entrada
Entrada
Propósito
@xid-kit/electron
Exportación por defecto: superficie de renderizado y tipos
@xid-kit/electron/main
Solo proceso principal: XidElectronApp
@xid-kit/electron/renderer
Proceso de renderizado: getXidBridge, XidClient
@xid-kit/electron/preload
Script de precarga listo para usar que expone window.xidBridge
import { getXidBridge } from '@xid-kit/electron/renderer'const bridge = getXidBridge()// Opens system browser, waits for loopback callback, exchanges code.const accessToken = await bridge.signIn()// Get current access token (transparently refreshes if near expiry).const token = await bridge.getAccessToken() // null when not signed in// Get full session (accessToken + expiresAt in epoch seconds).const session = await bridge.getSession()// Sign out and clear tokens.await bridge.signOut()
Esquema personalizado (alternativa al loopback)
// main.tsimport { app } from 'electron'import { XidElectronApp } from '@xid-kit/electron/main'app.setAsDefaultProtocolClient('myapp')const xidApp = new XidElectronApp({ issuer: 'https://xid.dev', clientId: 'client_abc123', callbackStrategy: 'custom-scheme', customScheme: 'myapp', // redirect_uri = myapp://callback})xidApp.registerDeepLinkHandler(app)
Almacenamiento de tokens
Los tokens se cifran con safeStorage.encryptString() (llavero del SO) y se almacenan como archivos binarios en app.getPath('userData')/xid-tokens/ por defecto.
Si safeStorage.isEncryptionAvailable() devuelve false (Linux headless sin llavero), setItem() lanza ElectronStorageError con el código encryption_unavailable en lugar de escribir en texto plano silenciosamente.
Anula el directorio de almacenamiento con storageDir en XidElectronMainOptions.
Contrato nativo compartido
Método
Descripción
signIn(options?)
Abre el navegador del sistema, intercambia el código y almacena los tokens
signOut()
Limpia los tokens locales
getAccessToken()
Devuelve el token actual (renueva si está próximo a expirar); null si la sesión está cerrada