Aller au contenu

@xid-kit/electron

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

Afficher en Markdown

Statut

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
@xid-kit/electron Export par défaut : surface de rendu et types
@xid-kit/electron/main Processus principal uniquement : XidElectronApp
@xid-kit/electron/renderer Processus de rendu : getXidBridge, XidClient
@xid-kit/electron/preload Script de préchargement prêt à l’emploi qui expose window.xidBridge

Configuration du processus principal

// main.ts
import { app, ipcMain } from 'electron'
import { XidElectronApp } from '@xid-kit/electron/main'

const xidApp = new XidElectronApp({
  issuer: 'https://xid.dev',
  clientId: 'client_abc123',
  // callbackStrategy: 'loopback' (default, RFC 8252 s.7.3) | 'custom-scheme'
})

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

Script de préchargement

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

Processus de rendu

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

Schéma personnalisé (alternative au loopback)

// main.ts
import { 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)

Stockage des jetons

  • Les jetons sont chiffrés avec safeStorage.encryptString()(trousseau OS) et stockés sous forme de fichiers binaires dansapp.getPath('userData')/xid-tokens/ par défaut.
  • Si safeStorage.isEncryptionAvailable() retourne false (Linuxheadless sans trousseau), setItem() lèveElectronStorageError avec le code encryption_unavailableplutôt que d’écrire en clair silencieusement.
  • Remplacer le répertoire de stockage avec storageDir dansXidElectronMainOptions.

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 courant (rafraîchit si proche de l’expiration) ; null sidéconnecté
getSession() Retourne accessToken et expiresAt, ou null
Navigation

Saisissez votre recherche...

Utilisez les touches fléchées pour naviguerAppuyez sur Entrée pour sélectionnerAppuyez sur Échap pour fermer