RP 開発者が UPBOND ID(OIDC)+ 埋め込みウォレット(MPC/TSS)+ リカバリを数行で組み込むための SDK(docs/00-BUILD-SPEC.md §1)。auth0-spa-js や @web3auth/* を直接使わずに済ませることが目的。
EXAMPLES.md — シナリオ別のサンプル集(認証専用 / リダイレクトウォレット / 埋め込みウィジェット / 低レベル OIDC)。型チェック済みの examples/*.ts を embedme で埋め込み。docs/api/ — 生成 API リファレンス(TypeDoc → Markdown、pnpm --filter @upbond/sdk docs:api で再生成)。docs/24-sdk-design.md — 設計記録(決定事項 D1–、変更記録)。docs/27-sdk-release.md — 初回外部リリース Runbook(準備済み・未実行)。RP が設定するのは clientId の 1 つだけ(+ staging に繋ぐ場合の environment)。environment のデフォルトは 'production' で、issuer(auth.upbond.io)からウォレットまで全部が埋まる。ウォレットのデフォルトは embedded(ウィジェット)モード: 鍵・パスキー・儀式はすべて wallet.upbond.io のウィジェット内で動き、RP ページには EIP-1193 provider だけが渡る。redirectUri は window.location.origin がデフォルト(issuer 側にその値を登録しておくこと)。
import { createUpbond } from '@upbond/sdk';
const upbond = createUpbond({
clientId: 'your-client-id',
// environment: 'staging', // staging に繋ぐ場合のみ。省略 = production
});
await upbond.init(); // callback 消費 or セッション復元
loginBtn.onclick = () => upbond.login(); // issuer へ redirect(PKCE は内部)
logoutBtn.onclick = () => upbond.logout(); // issuer サインアウト
認証専用の RP もこの形のまま — ウォレット系メソッドを呼ばなければウォレットには触れない。
追加設定は不要。connect() でユーザーを接続し、getEthereumProvider() の EIP-1193 provider を ethers.js / viem からそのまま使える。署名要求は必ずウィジェットの確認 UI(origin バッジ + 生体)に落ちる — RP ページからのサイレント署名は不能。
const upbond = createUpbond({ clientId: 'your-client-id' });
await upbond.init();
connectBtn.onclick = async () => {
await upbond.connect(); // popup: ログイン + ウォレット(ユーザージェスチャー内で!)
const provider = await upbond.getEthereumProvider(); // EIP-1193
const [address] = await provider.request({ method: 'eth_accounts' });
};
sendBtn.onclick = async () => {
const provider = await upbond.getEthereumProvider();
await provider.request({
method: 'eth_sendTransaction',
params: [{ to, value }], // 承認はウィジェット側の確認 UI
});
};
openBtn.onclick = () => upbond.openWallet(); // フルウォレット UI をオーバーレイ表示
対応 RPC は eth_accounts / eth_requestAccounts / eth_chainId / personal_sign / eth_sendTransaction(ネイティブ送金)。data 付き tx(ERC-20 / コントラクト呼び出し)と読み取り系(eth_call 等)は未対応 — 読み取りは公開 RPC の JsonRpcProvider を併用する(docs/25-widget.md)。
wallet: { mode: 'redirect' } で MPC 儀式を RP ページ内で実行する形に切り替わる(connectWallet() / setupWallet() / signTransaction() 系 API)。この場合はパートナーの origin を Web3Auth ダッシュボードの allowed origins に追加する運用が必要。旧設定との互換のため、mode 省略でもローカル MPC 系フィールド(web3authClientId / network / verifier / rpId / recovery)を明示した設定は redirect と解釈される。詳細は EXAMPLES.md §2。
注意点:
connect() / redirect モードの setupWallet 等)はユーザージェスチャー(クリックハンドラ)内で呼ぶ — popup / パスキー / 生体プロンプトが開くため。beginAuthorization / completeAuthorization / buildLogoutUrl)は advanced 用途向けに公開継続。src/index.ts が公開面のすべて。それ以外の import はサポート外。src/core/(プラットフォーム非依存 — 将来 @upbond/sdk-core として抽出可能)と src/web/(ブラウザアダプタ)に分離。境界は scripts/check-deps.mjs が CI で強制する: core はブラウザグローバル禁止・import は @upbond/shared / jose / core 内相対のみ。@web3auth/* の直接依存は禁止(wallet-core 抽象経由のみ、.claude/rules/wallet.md)。UpbondError { code }。内部実装のエラー型は公開面に漏らさない。公開 API(型・メソッド・エラー code)は外部顧客との契約であり、破壊的変更はバージョニング + docs/ の移行ガイドなしに行わない。契約の凍結は初の外部リリースから適用。それまでは 0.x として docs/24-sdk-design.md(設計記録)に変更を記録しながら開発する。