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

> Publikuj aplikacje, aby inne przestrzenie mogły je odkrywać i instalować.

# Marketplace

Opublikowanie aplikacji na marketplace'u udostępnia ją innym przestrzeniom Kazzle do odkrycia i instalacji.

## Co robi publikacja

Publikacja sprawia, że aplikacja może być instalowana przez inne przestrzenie. Użytkownicy widzą nazwę aplikacji, podtytuł, ikonę, wydawcę i widoczność, a następnie instalują ją w swojej przestrzeni. Publikacja wymaga `subtitle` w `kazzle.config.ts` — jednolinijkowego sloganu pod nazwą aplikacji.

Opublikowana wersja używa najnowszego commita na `main`. Nie ma osobnej gałęzi wydania dla opublikowanych aplikacji.

Definicja aplikacji jawnie wybiera, czy kliknięcie zainstalowanej aplikacji otwiera komponent, otwiera osadzony lub zewnętrzny adres URL, czy nie ma powierzchni uruchamiania. Aplikacje mogą również wymagać tożsamości Kazzle przed otwarciem lub otrzymywać webhooki cyklu życia.

Przeczytaj [Publikuj swoją aplikację](/apps/build-and-publish), aby dowiedzieć się, jak opublikować aplikację.

## Instalacje

Gdy ktoś instaluje opublikowaną aplikację, Kazzle tworzy rekord instalacji w ich przestrzeni. Instalująca przestrzeń jest właścicielem instalacji i wszelkich danych z nią związanych.

## Tożsamość użytkownika

Gdy zalogowany użytkownik Kazzle otwiera zainstalowaną aplikację, Kazzle dostarcza aplikacji informacje o bieżącym użytkowniku.

Kazzle dołącza krótkotrwały JWT jako token nośnika. Aplikacja może zweryfikować token względem publicznego JWKS Kazzle, aby odczytać użytkownika, przestrzeń i instalację.

Token zawiera te roszczenia:

| Roszczenie | Znaczenie                                             |
| ---------- | ----------------------------------------------------- |
| `aud`      | `kazzle:app`                                          |
| `iss`      | `https://api.kazzle.app`                              |
| `sub`      | ID użytkownika Kazzle                                 |
| `user`     | `{ id, email }` użytkownika                           |
| `space`    | ID przestrzeni, w której aplikacja jest zainstalowana |
| `install`  | ID tej konkretnej instalacji                          |

Przykład weryfikacji:

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

Definicja aplikacji kontroluje zachowanie uruchamiania dla opublikowanych aplikacji:

* `launch`: wybiera `none`, nazwany komponent aplikacji lub adres URL z jawnym osadzonym lub zewnętrznym celem.
* `kazzleAuth`: `required` oznacza, że tylko zalogowani użytkownicy Kazzle mogą otworzyć aplikację; `optional` pozwala na otwarcie aplikacji bez tożsamości Kazzle.

## Webhooki

Jeśli definicja aplikacji zawiera `webhookUrl`, Kazzle wysyła żądania HTTP POST do niego, gdy aplikacja jest instalowana lub odinstalowywana.

`app.installed` zawiera klucz instalacji, który backend wydawcy może użyć do uwierzytelnienia się w interfejsie API dla każdej instalacji:

```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` zawiera zdarzenie, ID instalacji, ID aplikacji, ID przestrzeni i adres URL API. Wydawca powinien przestać używać klucza instalacji po otrzymaniu tego zdarzenia.

## Interfejs API dla każdej instalacji

Każda instalacja może wywoływać interfejs API o ograniczonym zakresie na `https://api.kazzle.app`. Wywołania są uwierzytelniane za pomocą klucza instalacji (z backendu wydawcy) lub tokenu tożsamości użytkownika (z hostowanego interfejsu użytkownika). Wszystkie operacje są automatycznie ograniczone do tej instalacji.

Dostępne punkty końcowe:

Pełne schematy żądań i odpowiedzi są opublikowane w specyfikacji OpenAPI Kazzle na stronie
`https://api.kazzle.app/openapi.json` w tych ścieżkach.

| Metoda | Ścieżka               | Opis                                                     |
| ------ | --------------------- | -------------------------------------------------------- |
| GET    | `/apps/secrets`       | Wyświetl nazwy sekretów przechowywanych dla instalacji   |
| GET    | `/apps/secrets/:name` | Odczytaj wartość sekretu                                 |
| PUT    | `/apps/secrets/:name` | Przechowuj wartość sekretu                               |
| DELETE | `/apps/secrets/:name` | Usuń sekret                                              |
| GET    | `/apps/metadata`      | Odczytaj metadane niezwiązane z sekretami dla instalacji |
| PUT    | `/apps/metadata`      | Scal aktualizacje w metadanych instalacji                |

Sekrety zapisane za pośrednictwem tego interfejsu API są szyfrowane w spoczynku i izolowane do konkretnej instalacji. Są oddzielone od sekretów przechowywanych w magazynie przestrzeni.

## Następne kroki

* [Publikuj swoją aplikację](/apps/build-and-publish) — jak opublikować aplikację i co się dzieje potem.
