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
/miniapp.webmanifestjson
{
  "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.