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

> Publique aplicativos para que outros espaços possam descobrir e instalá-los.

# Marketplace

Publicar um aplicativo no marketplace o torna disponível para que outros espaços Kazzle o descubram e instalem.

## O que a publicação faz

A publicação torna o aplicativo instalável por outros espaços. As pessoas veem o nome, subtítulo, ícone, editor e visibilidade do aplicativo, depois o instalam em seu próprio espaço. A publicação requer um `subtitle` em `kazzle.config.ts` — um slogan de uma linha sob o nome do aplicativo.

A versão publicada usa o commit mais recente em `main`. Não há branch de lançamento separado para aplicativos publicados.

A definição do aplicativo escolhe explicitamente se clicar em um aplicativo instalado abre um componente, abre uma URL incorporada ou externa, ou não tem superfície de inicialização. Os aplicativos também podem exigir identidade Kazzle antes de abrir ou receber webhooks de ciclo de vida.

Veja [Publique seu aplicativo](/apps/build-and-publish) para saber como publicar um aplicativo.

## Instalações

Quando alguém instala um aplicativo publicado, o Kazzle cria um registro de instalação dentro de seu espaço. O espaço que instala é proprietário da instalação e de todos os dados associados a ela.

## Identidade do usuário

Quando um usuário Kazzle conectado abre um aplicativo instalado, o Kazzle fornece ao aplicativo informações sobre o usuário atual.

O Kazzle anexa um JWT de curta duração como um token de portador. O aplicativo pode verificar o token contra o JWKS público do Kazzle para ler o usuário, espaço e instalação.

O token contém estas declarações:

| Declaração | Significado                                   |
| ---------- | --------------------------------------------- |
| `aud`      | `kazzle:app`                                  |
| `iss`      | `https://api.kazzle.app`                      |
| `sub`      | ID do usuário Kazzle                          |
| `user`     | `{ id, email }` do usuário                    |
| `space`    | ID do espaço onde o aplicativo está instalado |
| `install`  | ID desta instalação específica                |

Exemplo de verificação:

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

A definição do aplicativo controla o comportamento de inicialização para aplicativos publicados:

* `launch`: seleciona `none`, um componente de aplicativo nomeado ou uma URL com um alvo incorporado ou externo explícito.
* `kazzleAuth`: `required` significa que apenas usuários Kazzle conectados podem abrir o aplicativo; `optional` permite que o aplicativo seja aberto sem uma identidade Kazzle.

## Webhooks

Se a definição do aplicativo incluir um `webhookUrl`, o Kazzle enviará solicitações HTTP POST para ele quando o aplicativo for instalado ou desinstalado.

`app.installed` inclui a chave de instalação que o backend do editor pode usar para autenticar na API por instalação:

```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` contém o evento, ID de instalação, ID do aplicativo, ID do espaço e URL da API. O editor deve parar de usar a chave de instalação após receber este evento.

## API por instalação

Cada instalação pode chamar uma API com escopo em `https://api.kazzle.app`. As chamadas são autenticadas com a chave de instalação (do backend do editor) ou o token de identidade do usuário (da interface hospedada). Todas as operações são automaticamente limitadas a essa instalação.

Endpoints disponíveis:

Os esquemas completos de solicitação e resposta são publicados na especificação OpenAPI do Kazzle em
`https://api.kazzle.app/openapi.json` sob estes caminhos.

| Método | Caminho               | Descrição                                              |
| ------ | --------------------- | ------------------------------------------------------ |
| GET    | `/apps/secrets`       | Listar nomes de segredos armazenados para a instalação |
| GET    | `/apps/secrets/:name` | Ler um valor de segredo                                |
| PUT    | `/apps/secrets/:name` | Armazenar um valor de segredo                          |
| DELETE | `/apps/secrets/:name` | Excluir um segredo                                     |
| GET    | `/apps/metadata`      | Ler metadados não secretos para a instalação           |
| PUT    | `/apps/metadata`      | Mesclar atualizações nos metadados da instalação       |

Segredos escritos através desta API são criptografados em repouso e isolados para a instalação específica. Eles são separados dos segredos armazenados no vault de um espaço.

## Próximas etapas

* [Publique seu aplicativo](/apps/build-and-publish) — como publicar um aplicativo e o que acontece depois.
