> ## 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.

# Marketplace

> Publikasikan aplikasi agar space lain dapat menemukan dan memasangnya.

# Marketplace

Mempublikasikan aplikasi ke marketplace membuat aplikasi tersedia untuk space Kazzle lain guna menemukan dan memasangnya.

## Apa yang dilakukan publikasi

Publikasi membuat aplikasi dapat dipasang oleh space lain. Orang melihat nama aplikasi, subtitle, ikon, penerbit, dan visibilitas, kemudian memasangnya ke space mereka sendiri. Publikasi memerlukan `subtitle` dalam `kazzle.config.ts` — tagline satu baris di bawah nama aplikasi.

Versi yang dipublikasikan menggunakan commit terbaru di `main`. Tidak ada cabang rilis terpisah untuk aplikasi yang dipublikasikan.

Definisi aplikasi secara eksplisit memilih apakah mengklik aplikasi yang dipasang membuka komponen, membuka URL tertanam atau eksternal, atau tidak memiliki permukaan peluncuran. Aplikasi juga dapat memerlukan identitas Kazzle sebelum membuka atau menerima webhook siklus hidup.

Lihat [Publikasikan aplikasi Anda](/apps/build-and-publish) untuk cara mempublikasikan aplikasi.

## Pemasangan

Ketika seseorang memasang aplikasi yang dipublikasikan, Kazzle membuat catatan pemasangan di dalam space mereka. Space yang memasang memiliki pemasangan dan data apa pun yang terkait dengannya.

## Identitas pengguna

Ketika pengguna Kazzle yang masuk membuka aplikasi yang dipasang, Kazzle menyediakan aplikasi dengan informasi tentang pengguna saat ini.

Kazzle melampirkan JWT berumur pendek sebagai token pembawa. Aplikasi dapat memverifikasi token terhadap JWKS publik Kazzle untuk membaca pengguna, space, dan pemasangan.

Token berisi klaim berikut:

| Klaim     | Arti                              |
| --------- | --------------------------------- |
| `aud`     | `kazzle:app`                      |
| `iss`     | `https://api.kazzle.app`          |
| `sub`     | ID pengguna Kazzle                |
| `user`    | `{ id, email }` pengguna          |
| `space`   | ID space tempat aplikasi dipasang |
| `install` | ID pemasangan spesifik ini        |

Contoh verifikasi:

```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;
}
```

Definisi aplikasi mengontrol perilaku peluncuran untuk aplikasi yang dipublikasikan:

* `launch`: memilih `none`, komponen aplikasi bernama, atau URL dengan target tertanam atau eksternal yang eksplisit.
* `kazzleAuth`: `required` berarti hanya pengguna Kazzle yang masuk dapat membuka aplikasi; `optional` memungkinkan aplikasi dibuka tanpa identitas Kazzle.

## Webhook

Jika definisi aplikasi menyertakan `webhookUrl`, Kazzle mengirim permintaan HTTP POST ke sana ketika aplikasi dipasang atau dicopot.

`app.installed` menyertakan kunci pemasangan yang dapat digunakan backend penerbit untuk autentikasi ke API per-pemasangan:

```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` berisi acara, ID pemasangan, ID aplikasi, ID space, dan URL API. Penerbit harus berhenti menggunakan kunci pemasangan setelah menerima acara ini.

## API per-pemasangan

Setiap pemasangan dapat memanggil API berskop di `https://api.kazzle.app`. Panggilan diautentikasi dengan kunci pemasangan (dari backend penerbit) atau token identitas pengguna (dari UI yang dihosting). Semua operasi secara otomatis dibatasi pada pemasangan tersebut.

Endpoint yang tersedia:

Skema permintaan dan respons lengkap dipublikasikan dalam spesifikasi OpenAPI Kazzle di `https://api.kazzle.app/openapi.json` di bawah jalur ini.

| Metode | Jalur                 | Deskripsi                                          |
| ------ | --------------------- | -------------------------------------------------- |
| GET    | `/apps/secrets`       | Daftar nama rahasia yang disimpan untuk pemasangan |
| GET    | `/apps/secrets/:name` | Baca nilai rahasia                                 |
| PUT    | `/apps/secrets/:name` | Simpan nilai rahasia                               |
| DELETE | `/apps/secrets/:name` | Hapus rahasia                                      |
| GET    | `/apps/metadata`      | Baca metadata non-rahasia untuk pemasangan         |
| PUT    | `/apps/metadata`      | Gabungkan pembaruan ke metadata pemasangan         |

Rahasia yang ditulis melalui API ini dienkripsi saat istirahat dan terisolasi ke pemasangan spesifik. Mereka terpisah dari rahasia yang disimpan di vault space.

## Langkah berikutnya

* [Publikasikan aplikasi Anda](/apps/build-and-publish) — cara mempublikasikan aplikasi dan apa yang terjadi setelahnya.
