OpenApps frontend
El lado del cliente de una aplicación OpenApps: el SDK al que llama tu aplicación web o móvil, cómo se autentican los usuarios finales y cómo se sirve el frontend alojado. La política sigue rigiendo cada escritura desde el cliente, así que combina esto con el skill openapps-backend cuando una acción del cliente necesite una regla o invariante, y con openapps-deploy para el alojamiento y los dominios. Para enrutar entre la familia, consulta el skill raíz openapps.
Enrutador de referencia
Lee solo la fila que coincida con la tarea o término actual.
| Tarea o término | Lee |
|---|---|
Lecturas, escrituras, suscripciones, paginación del SDK, queryAggregate, count, filtros, orden, cursor, setMany, set(path, null) | Referencia del SDK |
| Construir un frontend web | Guía de aplicación web |
Servidor de desarrollo local (npm run dev, Vite, localhost), fallo del popup de inicio de sesión, redirect_uri origin is not a registered origin, CORS durante el desarrollo local | Desarrollar en localhost |
Temporizador de actualización, setInterval, polling, "mantenerlo fresco", cuenta regresiva, UI obsoleta | Referencia del SDK |
| Construir para React Native / móvil | Guía de React Native |
OTP por correo del usuario de la aplicación, OAuth, openBoundedWidget, widget de inicio de sesión unificado, autenticación Turnkey por defecto | Autenticación de la aplicación |
Inicio de sesión con billetera propia; walletLogin, authMethod:'phantom', supportsWalletSignIn, billetera no compatible / Wallet Standard | Inicio de sesión con billetera |
Inicio de sesión con billetera perdido al recargar, getCurrentUser() nulo después de recargar, bounded_last_auth_method, método de restauración de sesión | Inicio de sesión con billetera - "Las sesiones de billetera sobreviven a las recargas" |
| Invitados, usuarios anónimos, enlaces de invitación, actualización de cuenta | Cuentas anónimas |
Vincular la cuenta X de un usuario, connect('x'), completeConnection, getConnections, identificador X verificado, __connections__ | Cuentas conectadas |
| Frontend alojado y URLs de la aplicación | Alojamiento de frontend |
Inicio de sesión de desarrollador desde CLI o openapps login | Cuentas de desarrollador |
Billetera incrustada, auth.wallets, @user.address después del inicio de sesión por correo/social | Billeteras incrustadas |
onramp(), comprar SOL/USDC con tarjeta, Coinbase Onramp, recarga de billetera | Onramp |
Reglas prácticas
- Cada escritura del cliente está gobernada por la política; un
403en una escritura es una denegación de regla, no un error del cliente. Consulta el skill openapps-backend para la regla. - Las lecturas denegadas devuelven respuestas
200vacías, nunca403. - Vivo por defecto; nunca hagas polling. Cada colección es push-based, así que un
setIntervalque relee una ruta es un error, no una elección de ajuste: usauseQuery(React) osubscribe. Las cuentas regresivas se basan en el estado del reloj local, no en una relectura. Para las pocas superficies que no son en vivo (runQuery,functions.invoke, terceros), haz polling de forma deliberada: pausa en una pestaña oculta, limita el temporizador al estado que lo necesita, retrocede y acótalo. Consulta sdk-reference.md. - Agrupa lecturas para listas de valores calculados con
runQueryMany; nunca usesrunQuerysobre una lista. Consulta sdk-reference.md. - Pon las claves de API de proveedores en los secretos de OpenApps (backend), nunca en el código del frontend.
- Si
npm auditreporta el avisouuidGHSA-w5hq-g745-h8pq a través de@solana/web3.js -> jayson, usa la receta de anulación con ámbito. Aborda ese aviso; ejecutanpm audit --omit=deven el lockfile instalado e investiga cualquier hallazgo restante por separado. - Mantén los valores predeterminados de autenticación para la mayoría de las aplicaciones. No agregues
authModeoauth.walletspara "habilitar billeteras": el inicio de sesión predeterminado por correo/social de Turnkey ya incluye@user.address. Despliega"auth": { "wallets": true }solo para una sesión de par de claves EXTERNA (inicio de sesión con billetera propia, un cliente SDK de par de claves del servidor, el carril de datos de par de claves de la CLI). Regla completa y las opciones de exclusión: embedded-wallets.md. @user.id(el id de la cuenta) es identidad/propiedad;@user.addresses la billetera. Clave de propiedad, membresía y protecciones de autenticación en@user.id(siempre presente). Recurre a@user.addresssolo para semántica de billetera/onchain, nunca como clave de identidad.- El inicio de sesión con billetera en un teléfono necesita el adaptador Solana Mobile. Un navegador de teléfono nunca inyecta aplicaciones de billetera; mantén
@solana-mobile/wallet-standard-mobileinstalado (legacy-peer-deps=trueen.npmrc) y nunca verifiqueswindow.solanaantes de abrir el widget. Consulta Solana Mobile.