---
title: "@vonvon-kit/tauri"
description: "PKCE S256 フロー、ディープリンクコールバックハンドラー、OS キーチェーンアダプター、Rust プラグインテンプレートを備えた Tauri v2 デスクトップ SDK。"
locale: "ja"
---

> Documentation Index
> Fetch the relevant documentation index at: https://vonvon.id/ja/sdks/llms.txt
> Use this file to discover all available pages before exploring further.

# @vonvon-kit/tauri

## 状態

Registry 状態: UNPUBLISHED。この SDK はリポジトリのソース checkout からのみインストールし、外部 package registry は使用しないでください。

パッケージステータス：**現行パッケージ**。JS ブリッジ、PKCE S256 フロー、ディープリンクコールバックハンドラー、OS キーチェーンアダプター、Rust プラグインテンプレートが実装済みです。本番インフラでの実際の IdP ラウンドトリップはまだ手動検証待ちです。

## Tauri 設定

```json
// tauri.conf.json
{
  "bundle": { "identifier": "com.example.myapp" },
  "plugins": {
"deep-link": { "desktop": { "schemes": ["myapp"] } }
  }
}
```

## Rust プラグイン

`templates/vonvon-keychain-plugin.rs` を `src-tauri/src/vonvon_keychain.rs` にコピーし、`templates/tauri-app-setup.rs` に従って登録します。`src-tauri/Cargo.toml` に `keyring = \"2\"`、`tauri-plugin-deep-link = \"2\"`、`tauri-plugin-shell = \"2\"` を追加します。

## JS 統合

```ts
import { createVonvonTauriClient, createTauriKeychainAdapter } from '@vonvon-kit/tauri'
import { invoke } from '@tauri-apps/api/core'
import { open } from '@tauri-apps/plugin-shell'
import { onOpenUrl } from '@tauri-apps/plugin-deep-link'

const client = createVonvonTauriClient({
  issuer: 'https://vonvon.id',
  clientId: 'YOUR_CLIENT_ID',
  redirectUri: 'myapp://auth/callback',
  keychain: createTauriKeychainAdapter({ invoke }),
})

// Register deeplink handler (e.g. on App component mount)
await onOpenUrl(async (urls) => {
  for (const url of urls) await client.handleRedirect(url)
})

// Trigger sign-in: opens system browser
await client.signIn({ openUrl: open })
```

## トークン取得とサインアウト

```ts
// Get the current unexpired access token. Expiry requires a new sign-in.
const token = await client.getAccessToken()

// Get the current unexpired session (userId, organizationId, expiresAt).
const session = await client.getSession()

// Clear local keychain state. No refresh or revoke request is sent.
await client.signOut()

// To request full IdP sign-out, open an explicit OIDC RP-initiated logout URL.
const logoutUrl = client.buildSignOutUrl({ postLogoutRedirectUri: 'myapp://logout' })
await open(logoutUrl.toString())
```

## Tauri ランタイムなしの開発/テスト

```ts
import { createVonvonTauriClient, createMemoryKeychainAdapter } from '@vonvon-kit/tauri'

const client = createVonvonTauriClient({
  issuer: 'http://localhost:8788',
  clientId: 'test-client',
  redirectUri: 'http://localhost:1420/callback',
  keychain: createMemoryKeychainAdapter(),
})
```

## createVonvonTauriClient オプション

| オプション | 種別 | 説明 |
| --- | --- | --- |
| `issuer` | string | Vonvon 発行者 URL |
| `clientId` | string | OAuth 2.0 client\_id |
| `redirectUri` | string | カスタム URI スキームコールバック |
| `scopes` | readonly string\[\] | デフォルト：openid、profile、email |
| `keychain` | VonvonKeychainAdapter | トークンストレージアダプター。デフォルトは MemoryKeychainAdapter（本番では Tauri アダプターを使用してください） |

## VonvonTauriClient メソッド

| 方式 | 説明 |
| --- | --- |
| `signIn(options?)` | PKCE 認可 URL を構築します。openUrl コールバック経由で開きます |
| `handleRedirect(url)` | ディープリンクを解析し、state を検証し、コードをトークンと交換します |
| `getSession()` | 現在の有効期限内のローカルセッションを表す TauriSession、または null。有効期限切れの state は消去されます |
| `getAccessToken(options?)` | 現在の有効期限内の access token 文字列、または null。refresh request は行われません。DPoP が実装されるまで SDK は offline\_access を拒否します。 |
| `signOut()` | revoke request を送信せずにローカルの keychain state を消去 |
| `buildSignOutUrl(options?)` | RP 起点ログアウト用の OIDC end\_session URL を構築します |
| `setTokenStorage(adapter)` | ランタイム時にキーチェーンアダプターを交換します |

## PKCE とトークンストレージ

- PKCE S256 が常に使用されます。plain チャレンジは生成されません。
- ベリファイアーのエントロピーは 64 バイト。チャレンジは Web Crypto の `crypto.subtle.digest('SHA-256', ...)` で導出されます。
- すべてのキーは `vonvon.*` 名前空間に属します。現在使用されるのは `vonvon.access_token` です。`vonvon.refresh_token` はレガシーデータのクリーンアップ時にのみ削除されます。`vonvon.session`、`vonvon.pkce_verifier`、`vonvon.oauth_state` には現在のセッションと認可 state が保持され、refresh credential の読み書きは行われません。

Source: https://vonvon.id/ja/sdks/tauri/index.mdx
