このプロジェクトについて

# RelayAB 概要 RelayABは、上流AIサービスのAPIキーを安全かつ制御可能な方法で少数のユーザーに共有し、きめ細かな権限と使用量管理を提供することを目的とした、セルフホスト型AI APIゲートウェイ(中継ステーション)です。Vercelへのワンクリックデプロイに対応し、OpenAIおよびAnthropicのAPIプロトコルと互換性があります。 ## コア機能 - **マルチユーザーとロール**:管理者(admin)と一般ユーザー(user)の2種類のロールをサポートし、ユーザーパスワードはbcryptによる一方向ハッシュで保存されます。 - **クレジットクォータ管理**:管理者は各アカウントにクレジット総量とアクセス可能なモデルを割り当てることができ、アカウント配下のすべてのAPIキーがそのクレジットを共有し、使い切るとすべて停止します。 - **ユーザーセルフサービス**:一般ユーザーはコンソールでAPIキーの作成、名前変更、有効化/無効化、削除を自分で行え、パスワードの変更もセルフサービスで可能です。 - **きめ細かなキー制御**:各ユーザーは複数のAPIキーを作成でき、各キーには有効期限、有効状態、モデルホワイトリスト(アカウントのホワイトリストをさらに絞り込む形でのみ設定可能)を個別に設定できます。 - **プロトコル互換性**:OpenAI Chat CompletionsおよびAnthropic Messagesプロトコルをサポートし、クライアントモデルから上流の実際のモデルへのマッピングにも対応しています。 - **安全な保存**:上流プロバイダーキーはAES-256-GCMで暗号化されてRedisに保存され、マスターキーを紛失するとデータは永久に使用不能になります。 - **多言語インターフェース**:デフォルトは中国語で、英語にも対応し、フッターでワンクリック切り替えが可能です。 - **ユーザーフレンドリーなドキュメントページ**:コピー可能なインターフェースアドレスと、OpenAI/Anthropic互換のサンプルコードを提供します。 ## 技術スタック - **フレームワーク**:Next.js 15 App Router + React 19 + TypeScript 5 - **データストレージ**:Upstash for Redis(Vercel Marketplaceからワンクリックでインストール可能) - **認証**:iron-session 8 + bcryptjs(work factor 12) - **暗号化**:AES-256-GCM + bcryptjs - **上流AI統合**:Vercel AI SDK - **テスト**:Vitest + Playwright ## クイックスタート 1. **依存関係のインストール**:`pnpm install` 2. **環境変数の設定**:`.env.example`を`.env.local`にコピーし、`RELAY_AUTH`(マスターパスワード、管理者ログインパスワードでもある)を設定するだけです。Upstashの変数はVercel上で自動的に注入されます。 3. **開発サーバーの起動**:`pnpm dev`で、`http://localhost:3000`にアクセスします。 4. **ログイン**:初回起動時に管理者アカウントが自動的に作成され、ユーザー名はデフォルトで`admin`、パスワードは`RELAY_AUTH`の値になります。 ## Vercelへのデプロイ プロジェクトにはワンクリックデプロイボタンが用意されており、デプロイ時に`RELAY_AUTH`環境変数を入力するだけです。デプロイ成功後、Vercel MarketplaceからUpstashデータベースをインストールし、再デプロイ(Redeploy)すれば有効になります。 ## セキュリティのポイント - ユーザーパスワードはbcryptによる一方向ハッシュで保存され、元の文字列を逆算することはできません。 - クライアントAPIキーはSHA-256ハッシュ値のみが保存され、平文は作成時に一度だけ返されます。 - 上流プロバイダーキーはAES-256-GCMで暗号化されて保存され、マスターキーを紛失すると復元できません。 - セッションCookieはiron-sessionで暗号化され、HttpOnly、Secure、SameSite=Lax属性が設定されています。 ## ドキュメントと運用 プロジェクトには、アーキテクチャ、データモデル、APIルート、テスト、デプロイに関する詳細なドキュメントが用意されています。また、bootstrap-admin、reset-password、rotate-key、list-usageなどの運用スクリプトも含まれています。 ## ライセンス MIT