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

> Publica aplicaciones para que otros espacios puedan descubrirlas e instalarlas.

# Marketplace

Publicar una aplicación en el marketplace la hace disponible para que otros espacios de Kazzle la descubran e instalen.

## Qué hace la publicación

La publicación hace que la aplicación sea instalable por otros espacios. Las personas ven el nombre, subtítulo, icono, editor y visibilidad de la aplicación, y luego la instalan en su propio espacio. La publicación requiere un `subtitle` en `kazzle.config.ts` — un eslogan de una línea bajo el nombre de la aplicación.

La versión publicada usa el último commit en `main`. No hay una rama de lanzamiento separada para aplicaciones publicadas.

La definición de la aplicación elige explícitamente si hacer clic en una aplicación instalada abre un componente, abre una URL incrustada o externa, o no tiene superficie de lanzamiento. Las aplicaciones también pueden requerir identidad de Kazzle antes de abrirse o recibir webhooks de ciclo de vida.

Consulta [Publica tu aplicación](/apps/build-and-publish) para saber cómo publicar una aplicación.

## Instalaciones

Cuando alguien instala una aplicación publicada, Kazzle crea un registro de instalación dentro de su espacio. El espacio que instala es propietario de la instalación y de cualquier dato asociado con ella.

## Identidad del usuario

Cuando un usuario de Kazzle que ha iniciado sesión abre una aplicación instalada, Kazzle proporciona a la aplicación información sobre el usuario actual.

Kazzle adjunta un JWT de corta duración como token portador. La aplicación puede verificar el token contra el JWKS público de Kazzle para leer el usuario, espacio e instalación.

El token contiene estos claims:

| Claim     | Significado                                       |
| --------- | ------------------------------------------------- |
| `aud`     | `kazzle:app`                                      |
| `iss`     | `https://api.kazzle.app`                          |
| `sub`     | ID de usuario de Kazzle                           |
| `user`    | `{ id, email }` del usuario                       |
| `space`   | ID del espacio donde está instalada la aplicación |
| `install` | ID de esta instalación específica                 |

Ejemplo de verificación:

```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 definición de la aplicación controla el comportamiento de lanzamiento para aplicaciones publicadas:

* `launch`: selecciona `none`, un componente de aplicación nombrado, o una URL con un destino incrustado o externo explícito.
* `kazzleAuth`: `required` significa que solo los usuarios de Kazzle que han iniciado sesión pueden abrir la aplicación; `optional` permite que la aplicación se abra sin una identidad de Kazzle.

## Webhooks

Si la definición de la aplicación incluye una `webhookUrl`, Kazzle envía solicitudes HTTP POST cuando la aplicación se instala o desinstala.

`app.installed` incluye la clave de instalación que el backend del editor puede usar para autenticarse en la API por instalación:

```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 el evento, ID de instalación, ID de aplicación, ID de espacio y URL de API. El editor debe dejar de usar la clave de instalación después de recibir este evento.

## API por instalación

Cada instalación puede llamar a una API con alcance en `https://api.kazzle.app`. Las llamadas se autentican con la clave de instalación (desde el backend del editor) o el token de identidad del usuario (desde la interfaz alojada). Todas las operaciones se limitan automáticamente a esa instalación.

Endpoints disponibles:

Los esquemas completos de solicitud y respuesta se publican en la especificación OpenAPI de Kazzle en
`https://api.kazzle.app/openapi.json` bajo estas rutas.

| Método | Ruta                  | Descripción                                                   |
| ------ | --------------------- | ------------------------------------------------------------- |
| GET    | `/apps/secrets`       | Lista los nombres de secretos almacenados para la instalación |
| GET    | `/apps/secrets/:name` | Lee un valor de secreto                                       |
| PUT    | `/apps/secrets/:name` | Almacena un valor de secreto                                  |
| DELETE | `/apps/secrets/:name` | Elimina un secreto                                            |
| GET    | `/apps/metadata`      | Lee metadatos no secretos para la instalación                 |
| PUT    | `/apps/metadata`      | Fusiona actualizaciones en los metadatos de la instalación    |

Los secretos escritos a través de esta API se cifran en reposo y se aíslan a la instalación específica. Son independientes de los secretos almacenados en el vault de un espacio.

## Próximos pasos

* [Publica tu aplicación](/apps/build-and-publish) — cómo publicar una aplicación y qué sucede después.
