Zum Inhalt springen

@xid-kit/electron

Electron-SDK mit PKCE-Flow im Hauptprozess, contextBridge-Preload,OS-Keychain-Token-Speicherung und Loopback- oderCustom-Scheme-Callback-Strategien.

Als Markdown anzeigen

Zustand

Paketstatus: Aktuelles Paket. Hauptprozess-App,contextBridge-Preload und renderer-seitige Bridge sind implementiert. Einechter IdP-Round-Trip auf Produktionsinfrastruktur steht noch manuell aus.

Einstiegspunkte

Eintrag Zweck
@xid-kit/electron Standardexport: Renderer-Oberfläche und Typen
@xid-kit/electron/main Nur Hauptprozess: XidElectronApp
@xid-kit/electron/renderer Renderer-Prozess: getXidBridge, XidClient
@xid-kit/electron/preload Vorgefertigtes Preload-Skript, das window.xidBridge verfügbar macht

Hauptprozess-Einrichtung

// 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))
})

Preload-Skript

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

Renderer-Prozess

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

Benutzerdefiniertes Schema (Alternative zu 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)

Token-Speicher

  • Tokens werden mit safeStorage.encryptString() (OS-Keychain)verschlüsselt und standardmäßig als Binärdateien inapp.getPath('userData')/xid-tokens/ gespeichert.
  • Wenn safeStorage.isEncryptionAvailable() false zurückgibt(headless Linux ohne Keyring), löst setItem() einenElectronStorageError mit Code encryption_unavailable aus,anstatt stillschweigend Klartext zu schreiben.
  • Das Speicherverzeichnis mit storageDir inXidElectronMainOptions überschreiben.

Gemeinsamer nativer Vertrag

Methode Beschreibung
signIn(options?) Öffnet Systembrowser, tauscht Code ein, speichert Tokens
signOut() Löscht lokale Tokens
getAccessToken() Gibt den aktuellen Token zurück (erneuert ihn bei nahendem Ablauf); nullwenn abgemeldet
getSession() Gibt accessToken und expiresAt zurück, oder null
Navigation

Suchbegriff eingeben...

Mit den Pfeiltasten navigierenEingabetaste zum AuswählenEscape zum Schließen