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

> Опублікуйте додатки, щоб інші простори могли їх знайти та встановити.

# Marketplace

Опублікування додатка на marketplace робить його доступним для виявлення та встановлення іншими Kazzle просторами.

## Що робить опублікування

Опублікування робить додаток придатним для встановлення іншими просторами. Люди бачать назву додатка, підзаголовок, значок, видавця та видимість, а потім встановлюють його у свій простір. Опублікування вимагає `subtitle` у `kazzle.config.ts` — однорядкового слогану під назвою додатка.

Опублікована версія використовує останній коміт на `main`. Для опублікованих додатків немає окремої гілки випуску.

Визначення додатка явно вибирає, чи відкриває клік на встановленому додатку компонент, відкриває вбудовану або зовнішню URL-адресу, чи взагалі не має поверхні запуску. Додатки також можуть вимагати ідентичність Kazzle перед відкриттям або отримувати вебхуки життєвого циклу.

Див. [Опублікуйте свій додаток](/apps/build-and-publish), щоб дізнатися, як опублікувати додаток.

## Встановлення

Коли хтось встановлює опублікований додаток, Kazzle створює запис про встановлення всередині його простору. Простір, що встановлює, володіє встановленням та будь-якими пов'язаними з ним даними.

## Ідентичність користувача

Коли авторизований користувач Kazzle відкриває встановлений додаток, Kazzle надає додатку інформацію про поточного користувача.

Kazzle додає короткотривалий JWT як токен носія. Додаток може перевірити токен за допомогою публічного JWKS Kazzle, щоб прочитати користувача, простір та встановлення.

Токен містить ці претензії:

| Претензія | Значення                                 |
| --------- | ---------------------------------------- |
| `aud`     | `kazzle:app`                             |
| `iss`     | `https://api.kazzle.app`                 |
| `sub`     | ID користувача Kazzle                    |
| `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.

## Вебхуки

Якщо визначення додатка включає `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 простору та URL API. Видавець повинен припинити використання ключа встановлення після отримання цієї події.

## API для кожного встановлення

Кожне встановлення може викликати обмежений API на `https://api.kazzle.app`. Виклики автентифікуються за допомогою ключа встановлення (з бекенду видавця) або токена ідентичності користувача (з розміщеного 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) — як опублікувати додаток та що відбувається далі.
