# Manifest de Miniapp

> El JSON que describe tu Miniapp y cómo lo resuelve cada Host, incluido React Native.


Publica un JSON en `/miniapp.webmanifest`, en el mismo origen que tu Miniapp. Es compatible con el Web App Manifest estándar, más un bloque `oauth`.

```ts
import type { AndCoMiniappManifest } from "@andco/protocol";
```

| Campo | Qué es |
| --- | --- |
| `id` | identificador estable de tu Miniapp |
| `name` | nombre completo |
| `short_name` | opcional, para espacios reducidos |
| `description` | opcional |
| `icons` | opcional, formato Web App Manifest |
| `start_url` | dónde arranca tu Miniapp — mismo origen que el manifest |
| `scope`, `display`, `theme_color`, `background_color` | opcionales, mismo significado que en un Web App Manifest |
| `oauth.client_id` | tu cliente OAuth registrado en Andco |
| `oauth.auth_url` | opcional — ver abajo |

```json title="/miniapp.webmanifest"
{
  "id": "https://carmarket.example/",
  "name": "CarMarket",
  "start_url": "https://carmarket.example/",
  "icons": [{ "src": "https://carmarket.example/icon.png", "sizes": "512x512" }],
  "oauth": { "client_id": "tu-client-id" }
}
```

## `oauth.auth_url`

Solo hace falta si tu cliente OAuth es confidencial. El Host lo visita primero, en tu propio origen, para que tu servidor arranque la autorización con `andco.oauth.createAuthorizationRequest()` antes de saltar a Andco — así el verificador PKCE y el `state` quedan en tu backend, no en el Host. Un cliente público no lo necesita: el Host arranca la autorización directamente.

## Cómo lo resuelve un Host

Cualquier Host —una pestaña de navegador, React Native, el playground de Tauri— hace lo mismo:

1. Descarga tu manifest y lo valida contra el schema.
2. Pide a bank-webapp la configuración pública de tu cliente OAuth (`GET /api/oauth/clients/{client_id}`): `redirect_uris`, `allowed_origins`, `client_type`.
3. Comprueba que `start_url` (y `auth_url`, si lo declaraste) estén en `allowed_origins` y sean del mismo origen que el manifest. Si no, rechaza el manifest en vez de abrir tu Miniapp con un origen que no puede verificar.

## En React Native

`@andco/sdk-react-native-webview` es lo que un Host nativo usa para hospedar tu Miniapp. `AndCoMiniappManifest.load({ id, origin })` descarga y valida tu manifest; `.resolve()` trae la configuración pública de OAuth y aplica los mismos chequeos de origen. El componente `<AndCoWebView miniapp={resolved} accessToken={...} .../>` monta tu Miniapp en una WebView nativa: intercepta la navegación hacia Andco y la reemplaza por un consentimiento nativo en vez de una ventana emergente del navegador, y sincroniza las cookies de tu propio callback dentro de esa misma WebView.

Para tu Miniapp esto es transparente — el mismo código que corre en una pestaña de navegador corre sin cambios dentro del Host, el mismo principio que ya viste en `browserPresenter()`. Solo tienes que garantizar que `start_url` y `auth_url` vivan en el mismo origen que tu manifest.
