SDK Electron com fluxo PKCE no processo principal, preload viacontextBridge, armazenamento de tokens no keychain do SO eestratégias de callback loopback ou esquema personalizado.
O status do pacote é Pacote atual. App do processo principal,preload via contextBridge e bridge do lado do renderer estãoimplementados. Uma ida e volta real com o IdP em infraestrutura deprodução ainda está pendente de verificação manual.
Pontos de entrada
Entry
Finalidade
@xid-kit/electron
Export padrão: superfície de renderer e tipos
@xid-kit/electron/main
Somente processo principal: XidElectronApp
@xid-kit/electron/renderer
Processo de renderer: getXidBridge, XidClient
@xid-kit/electron/preload
Script de preload pronto que expõe 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 ao 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)
Armazenamento de tokens
Os tokens são criptografados com safeStorage.encryptString()(keychain do SO) e armazenados como arquivos binários emapp.getPath('userData')/xid-tokens/ por padrão.
Se safeStorage.isEncryptionAvailable() retornar false(Linux headless sem keyring), setItem() lançaElectronStorageError com código encryption_unavailableem vez de gravar texto simples silenciosamente.
Substitua o diretório de armazenamento com storageDir emXidElectronMainOptions.
Contrato nativo compartilhado
Método
Descrição
signIn(options?)
Abre o navegador do sistema, troca o código, armazena os tokens
signOut()
Limpa os tokens locais
getAccessToken()
Retorna o token atual (atualiza se próximo da expiração); null sedesconectado