状態
Registry 状態: UNPUBLISHED。この SDK はリポジトリのソース checkout からのみインストールし、外部 package registry は使用しないでください。
パッケージステータス:現行パッケージ。メインプロセスアプリ、contextBridge プリロード、レンダラー側ブリッジが実装済みです。本番インフラでの実際の IdP ラウンドトリップはまだ手動検証待ちです。
エントリーポイント
| エントリー | 目的 |
|---|---|
@xid-kit/electron |
デフォルトエクスポート:レンダラーサーフェスと型 |
@xid-kit/electron/main |
メインプロセス専用:XidElectronApp |
@xid-kit/electron/renderer |
レンダラープロセス:getXidBridge、XidClient |
@xid-kit/electron/preload |
window.xidBridge を公開する既製のプリロードスクリプト |
メインプロセスセットアップ
// 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.ts
import '@xid-kit/electron/preload'
// Exposes window.xidBridge with storage, signIn, signOut,
// getAccessToken, getSession, setTokenStorageレンダラープロセス
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 the current unexpired access token. Expiry requires a new sign-in.
const token = await bridge.getAccessToken() // null when signed out or expired
// Get the current unexpired session (accessToken + expiresAt in epoch seconds).
const session = await bridge.getSession()
// Clear local tokens. No refresh or revoke request is sent.
await bridge.signOut()カスタムスキーム(ループバックの代替)
// 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)トークンストレージ
- トークンは
safeStorage.encryptString()(OS キーチェーン)で暗号化され、デフォルトでapp.getPath('userData')/xid-tokens/にバイナリファイルとして保存されます。 safeStorage.isEncryptionAvailable()がfalse(キーリングのないヘッドレス Linux)を返す場合、setItem()は平文を黙って書き込む代わりにコードencryption_unavailableのElectronStorageErrorをスローします。XidElectronMainOptionsのstorageDirでストレージディレクトリを上書きします。
共有ネイティブコントラクト
| 方式 | 説明 |
|---|---|
signIn(options?) |
システムブラウザを開き、コードを交換してトークンを保存します |
signOut() |
ローカルトークンをクリアします |
getAccessToken() |
refresh を行わずに、現在の有効期限内の access token を返します。有効期限切れのローカル state を消去した場合は null を返します。DPoP が実装されるまで SDK は offline_access を拒否します。 |
getSession() |
現在の有効期限内の accessToken と expiresAt、または null を返します |