> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kazzle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# マーケットプレイス

> アプリを公開して、他のスペースで発見・インストールできるようにします。

# マーケットプレイス

アプリをマーケットプレイスに公開すると、他の Kazzle スペースで発見してインストールできるようになります。

## 公開の効果

公開することで、アプリが他のスペースからインストール可能になります。ユーザーはアプリの名前、サブタイトル、アイコン、パブリッシャー、公開設定を確認してから、自分のスペースにインストールします。公開には `kazzle.config.ts` に `subtitle` が必須です。これはアプリ名の下に表示される 1 行のタグラインです。

公開されたバージョンは `main` ブランチの最新コミットを使用します。公開アプリ用の別のリリースブランチはありません。

アプリ定義は、インストール済みアプリをクリックしたときにコンポーネントを開くか、埋め込み URL または外部 URL を開くか、起動画面を持たないかを明示的に選択します。アプリは Kazzle の認証を開く前に要求したり、ライフサイクル Webhook を受け取ったりすることもできます。

アプリの公開方法については、[アプリを公開する](/apps/build-and-publish)を参照してください。

## インストール

ユーザーが公開されたアプリをインストールすると、Kazzle はそのスペース内にインストールレコードを作成します。インストールを行ったスペースがインストールとそれに関連するすべてのデータを所有します。

## ユーザー認証

ログイン済みの Kazzle ユーザーがインストール済みアプリを開くと、Kazzle はそのアプリに現在のユーザーに関する情報を提供します。

Kazzle は短命の JWT をベアラートークンとして添付します。アプリは Kazzle の公開 JWKS に対してトークンを検証し、ユーザー、スペース、インストール情報を読み取ることができます。

トークンには以下のクレームが含まれます：

| クレーム      | 意味                       |
| --------- | ------------------------ |
| `aud`     | `kazzle:app`             |
| `iss`     | `https://api.kazzle.app` |
| `sub`     | Kazzle ユーザー ID           |
| `user`    | ユーザーの `{ id, email }`    |
| `space`   | アプリがインストールされているスペースの ID  |
| `install` | この特定のインストールの ID          |

検証例：

```ts theme={"theme":"material-theme-darker"}
import { jwtVerify, createRemoteJWKSet } from 'jose';

const JWKS = createRemoteJWKSet(new URL('https://api.kazzle.app/auth/.well-known/jwks.json'));

async function getUserFromToken(token: string) {
  const { payload } = await jwtVerify(token, JWKS, {
    audience: 'kazzle:app',
    issuer: 'https://api.kazzle.app',
  });
  return payload;
}
```

アプリ定義は公開アプリの起動動作を制御します：

* `launch`：`none`、名前付きアプリコンポーネント、または明示的な埋め込みまたは外部ターゲットを持つ URL を選択します。
* `kazzleAuth`：`required` はログイン済みの Kazzle ユーザーのみがアプリを開くことができることを意味し、`optional` は Kazzle 認証なしでアプリを開くことを許可します。

## Webhook

アプリ定義に `webhookUrl` が含まれている場合、Kazzle はアプリがインストールまたはアンインストールされたときに HTTP POST リクエストを送信します。

`app.installed` にはパブリッシャーのバックエンドがインストール単位の API に認証するために使用できるインストールキーが含まれます：

```json theme={"theme":"material-theme-darker"}
{
  "event": "app.installed",
  "installId": "...",
  "appId": "...",
  "spaceId": "...",
  "apiUrl": "https://api.kazzle.app",
  "installKey": "kzl_inst_...",
  "user": { "id": "...", "email": "..." }
}
```

`app.uninstalled` にはイベント、インストール ID、アプリ ID、スペース ID、API URL が含まれます。パブリッシャーはこのイベントを受け取った後、インストールキーの使用を停止する必要があります。

## インストール単位の API

各インストールは `https://api.kazzle.app` 上のスコープ付き API を呼び出すことができます。呼び出しはインストールキー（パブリッシャーのバックエンドから）またはユーザー認証トークン（ホストされた UI から）で認証されます。すべての操作は自動的にそのインストールにスコープされます。

利用可能なエンドポイント：

完全なリクエストとレスポンススキーマは、Kazzle OpenAPI スペック（`https://api.kazzle.app/openapi.json`）の以下のパスで公開されています。

| メソッド   | パス                    | 説明                        |
| ------ | --------------------- | ------------------------- |
| GET    | `/apps/secrets`       | インストール用に保存されたシークレット名を一覧表示 |
| GET    | `/apps/secrets/:name` | シークレット値を読み取り              |
| PUT    | `/apps/secrets/:name` | シークレット値を保存                |
| DELETE | `/apps/secrets/:name` | シークレットを削除                 |
| GET    | `/apps/metadata`      | インストール用の非シークレットメタデータを読み取り |
| PUT    | `/apps/metadata`      | インストールのメタデータに更新をマージ       |

この API を通じて書き込まれたシークレットは保存時に暗号化され、特定のインストールに分離されます。これらはスペースのボルトに保存されたシークレットとは別です。

## 次のステップ

* [アプリを公開する](/apps/build-and-publish) — アプリを公開する方法とその後の流れ。
