← 開発者ガイド

自分のサーバーに統合する

backend にトークン発行エンドポイントを追加し、ブラウザの SDK が短期の session JWT を受け取れるようにします — secret がクライアントに届くことは一切ありません。

これは 認証モードを選ぶ のパターンを具体化したものです: サーバー上のトークン発行エンドポイントと、SDK を呼び出す前にそれを呼び出すブラウザページです。

1. backend にトークンエンドポイントを追加する

import jwt from "jsonwebtoken";

const SECRET = process.env.QURAVIN_SIGNING_SECRET;   // API キーを取得する で入手
const APP_ID = "your-app-id";                        // あなたのアプリの登録 ID

app.get("/ai-token", requireUserLogin, (req, res) => {
  const token = jwt.sign(
    {
      iss: APP_ID,
      sub: req.user.id,                    // あなたのアプリのユーザー ID
      aud: "quravin",
      pipelines: ["translate-string"],     // このユーザーが呼び出せるパイプライン
      rate_limit: { rpm: 30 },
    },
    SECRET,
    { algorithm: "HS256", expiresIn: "15m" },
  );
  res.json({ token, expires_in: 15 * 60 });
});

requireUserLogin は独自の認証ミドルウェアです — トークンは、あなたのサーバーがすでに認証済みの ユーザーにのみ発行されます。

2. ブラウザでトークンを取得して SDK を呼び出す

<input id="text" />
<button id="go">Translate</button>
<span id="result"></span>

<script src="https://js.quravin.com/v1.js"></script>
<script>
  const fetchToken = async () => {
    const r = await fetch("/ai-token", { credentials: "include" });
    if (!r.ok) throw new Error("Token fetch failed");
    return (await r.json()).token;
  };

  const ai = new Quravin.Quravin({
    endpoint: "https://api.example.com/ai-pipeline",
    sessionToken: await fetchToken(),
    onTokenExpired: fetchToken,   // API が 401 を返したら自動更新
  });

  document.getElementById("go").onclick = async () => {
    const out = await ai.run({
      pipeline: "translate-string",
      inputs: { text: document.getElementById("text").value, target_language: "German" },
    });
    document.getElementById("result").textContent = out.translation;
  };
</script>

3. エラーを処理する

クォータや rate limit に達すると、型付きエラーが返ります — ユーザーにわかりやすいメッセージと pricing へのリンクを表示してください:

try {
  const out = await ai.run({ pipeline: "translate-string", inputs: { /* ... */ } });
} catch (err) {
  showToast("Translation failed: " + err.message);
}

これで一連の流れは完成です:サーバーがトークンを発行し、ブラウザは secret を一切見ることなく、 すべての呼び出しは実行したユーザーに紐づけられます。SDK には ai.runMany によるバッチ処理、 ai.button の DOM バインディング、raw-prompt モード、そして完全なトラブルシューティング表を含む、 より詳しいリファレンスもあります — さらに深く知りたい場合は、プラットフォーム担当者にお問い合わせ ください。