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

> Pubblica app in modo che altri space possano scoprirle e installarle.

# Marketplace

Pubblicare un'app nel marketplace la rende disponibile per altri space Kazzle per scoprirla e installarla.

## Cosa fa la pubblicazione

La pubblicazione rende l'app installabile da altri space. Le persone vedono il nome dell'app, il sottotitolo, l'icona, l'editore e la visibilità, quindi la installano nel proprio space. La pubblicazione richiede un `subtitle` in `kazzle.config.ts` — un tagline di una riga sotto il nome dell'app.

La versione pubblicata utilizza il commit più recente su `main`. Non esiste un ramo di rilascio separato per le app pubblicate.

La definizione dell'app sceglie esplicitamente se fare clic su un'app installata apre un componente, apre un URL incorporato o esterno, o non ha una superficie di avvio. Le app possono anche richiedere l'identità Kazzle prima dell'apertura o ricevere webhook del ciclo di vita.

Vedi [Pubblica la tua app](/apps/build-and-publish) per come pubblicare un'app.

## Installazioni

Quando qualcuno installa un'app pubblicata, Kazzle crea un record di installazione all'interno del loro space. Lo space che installa possiede l'installazione e tutti i dati ad essa associati.

## Identità utente

Quando un utente Kazzle connesso apre un'app installata, Kazzle fornisce all'app informazioni sull'utente corrente.

Kazzle allega un JWT di breve durata come bearer token. L'app può verificare il token rispetto al JWKS pubblico di Kazzle per leggere l'utente, lo space e l'installazione.

Il token contiene questi claim:

| Claim     | Significato                              |
| --------- | ---------------------------------------- |
| `aud`     | `kazzle:app`                             |
| `iss`     | `https://api.kazzle.app`                 |
| `sub`     | ID utente Kazzle                         |
| `user`    | `{ id, email }` dell'utente              |
| `space`   | ID dello space in cui l'app è installata |
| `install` | ID di questa installazione specifica     |

Esempio di verifica:

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

La definizione dell'app controlla il comportamento di avvio per le app pubblicate:

* `launch`: seleziona `none`, un componente app denominato, o un URL con una destinazione incorporata o esterna esplicita.
* `kazzleAuth`: `required` significa che solo gli utenti Kazzle connessi possono aprire l'app; `optional` consente l'apertura dell'app senza un'identità Kazzle.

## Webhook

Se la definizione dell'app include un `webhookUrl`, Kazzle invia richieste HTTP POST quando l'app viene installata o disinstallata.

`app.installed` include la chiave di installazione che il backend dell'editore può utilizzare per autenticarsi all'API per installazione:

```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` contiene l'evento, l'ID installazione, l'ID app, l'ID space e l'URL API. L'editore dovrebbe smettere di utilizzare la chiave di installazione dopo aver ricevuto questo evento.

## API per installazione

Ogni installazione può chiamare un'API con ambito su `https://api.kazzle.app`. Le chiamate sono autenticate con la chiave di installazione (dal backend dell'editore) o il token di identità utente (dall'interfaccia ospitata). Tutte le operazioni sono automaticamente limitate a quella installazione.

Endpoint disponibili:

Gli schemi completi di richiesta e risposta sono pubblicati nella specifica OpenAPI di Kazzle su
`https://api.kazzle.app/openapi.json` in questi percorsi.

| Metodo | Percorso              | Descrizione                                              |
| ------ | --------------------- | -------------------------------------------------------- |
| GET    | `/apps/secrets`       | Elenca i nomi dei segreti archiviati per l'installazione |
| GET    | `/apps/secrets/:name` | Leggi un valore segreto                                  |
| PUT    | `/apps/secrets/:name` | Archivia un valore segreto                               |
| DELETE | `/apps/secrets/:name` | Elimina un segreto                                       |
| GET    | `/apps/metadata`      | Leggi i metadati non segreti per l'installazione         |
| PUT    | `/apps/metadata`      | Unisci gli aggiornamenti nei metadati dell'installazione |

I segreti scritti tramite questa API sono crittografati a riposo e isolati all'installazione specifica. Sono separati dai segreti archiviati nel vault di uno space.

## Passaggi successivi

* [Pubblica la tua app](/apps/build-and-publish) — come pubblicare un'app e cosa succede dopo.
