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()
사용자 정의 스킴(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)
토큰 저장소
토큰은 safeStorage.encryptString()(OS keychain)으로 암호화되어 기본적으로 app.getPath('userData')/xid-tokens/에 바이너리 파일로 저장됩니다.
safeStorage.isEncryptionAvailable()이 false(키링이 없는 헤드리스 Linux)를 반환하면, setItem()은 평문을 조용히 쓰는 대신 코드 encryption_unavailable로 ElectronStorageError를 발생시킵니다.