Communitygithub.com

poofdotnew/openapps-skill

Connectez une interface web ou React Native à OpenApps : le SDK client @bounded-sh/client (lectures, écritures, abonnements, requêtes), les frontends statiques hébergés et l'interface d'authentification utilisateur (OTP par email, OAuth, comptes invités/anonymes et mise à niveau).

Qu'est-ce que openapps-skill ?

Cette compétence gère le côté client d'une application OpenApps, fournissant le SDK @bounded-sh/client pour les lectures, écritures, abonnements et requêtes. Elle permet l'authentification des utilisateurs finaux via email OTP, OAuth, ou des comptes invités/anonymes avec mise à niveau. Elle s'intègre avec les compétences openapps-backend pour les règles et invariants côté serveur, et openapps-deploy pour l'hébergement et les domaines. Le SDK est push-based, donc le polling est à éviter sauf cas explicites ; les collections sont en temps réel par défaut. La compétence est conçue pour les développeurs construisant des applications web ou React Native, avec des aides pour le développement local, la gestion des sessions, et les portefeuilles intégrés.

Compatible avec~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/poofdotnew/openapps-skill/tree/HEAD/openapps-frontend

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Frontend OpenApps

Le côté client d'une application OpenApps : le SDK appelé par votre application web ou mobile, comment les utilisateurs finaux s'authentifient, et comment le frontend hébergé est servi. La politique régit toujours chaque écriture depuis le client, donc associez cette compétence avec openapps-backend lorsqu'une action client nécessite une règle ou un invariant, et openapps-deploy pour l'hébergement et les domaines. Pour naviguer dans la famille, voir la compétence racine openapps.

Routeur de référence

Lisez uniquement la ligne correspondant à la tâche ou au terme actuel.

Tâche ou termeLire
Lectures SDK, écritures, abonnements, pagination, queryAggregate, count, filtres, tri, curseur, setMany, set(path, null)Référence SDK
Construire un frontend webGuide application web
Serveur de développement local (npm run dev, Vite, localhost), échec de la popup de connexion, redirect_uri origin is not a registered origin, CORS pendant le développement localDévelopper sur localhost
Minuterie de rafraîchissement, setInterval, polling, "garder à jour", compte à rebours, interface utilisateur obsolèteRéférence SDK
Construire pour React Native / mobileGuide React Native
OTP par email utilisateur-app, OAuth, openBoundedWidget, widget de connexion unifié, authentification Turnkey par défautAuthentification application
Connexion avec portefeuille personnel ; walletLogin, authMethod:'phantom', supportsWalletSignIn, portefeuille non pris en charge / Wallet StandardConnexion portefeuille
Connexion portefeuille perdue lors du rafraîchissement, getCurrentUser() nul après rechargement, bounded_last_auth_method, méthode de restauration de sessionConnexion portefeuille - "Les sessions portefeuille survivent aux rechargements"
Invités, utilisateurs anonymes, liens d'invitation, mise à niveau de compteComptes anonymes
Lier le compte X d'un utilisateur, connect('x'), completeConnection, getConnections, pseudo X vérifié, __connections__Comptes connectés
Frontend hébergé et URLs d'applicationHébergement frontend
Connexion développeur CLI ou openapps loginComptes développeur
Portefeuille intégré, auth.wallets, @user.address après connexion email/socialePortefeuilles intégrés
onramp(), acheter SOL/USDC par carte, Coinbase Onramp, rechargement de portefeuilleOnramp

Règles de base

  • Chaque écriture client est régie par la politique ; une 403 sur une écriture est un refus de règle, pas un bug client. Voir la compétence openapps-backend pour la règle.
  • Les lectures refusées renvoient des réponses 200 vides, jamais 403.
  • Vivant par défaut ; ne jamais faire de polling. Chaque collection est push-based, donc un setInterval qui relit un chemin est un bug, pas un choix de réglage - utilisez useQuery (React) ou subscribe. Les comptes à rebours se font sur l'état de l'horloge locale, pas sur une relecture. Pour les rares surfaces qui ne sont pas en direct (runQuery, functions.invoke, tiers), faites du polling délibérément : mettez en pause dans un onglet caché, limitez le timer à l'état qui en a besoin, diminuez progressivement et bornez-le. Voir sdk-reference.md.
  • Regroupez les lectures pour listes de valeurs calculées avec runQueryMany ; ne mappez jamais runQuery sur une liste. Voir sdk-reference.md.
  • Placez les clés API du fournisseur dans les secrets OpenApps (backend), jamais dans le code frontend.
  • Si npm audit signale l'avis uuid GHSA-w5hq-g745-h8pq via @solana/web3.js -> jayson, utilisez la recette de remplacement délimitée. Elle traite cet avis ; exécutez npm audit --omit=dev sur le fichier lockfile installé et enquêtez sur les autres résultats séparément.
  • Conservez les paramètres d'authentification par défaut pour la plupart des applications. N'ajoutez pas authMode ou auth.wallets pour "activer les portefeuilles" : la connexion par défaut Turnkey email/sociale inclut déjà @user.address. Déployez "auth": { "wallets": true } uniquement pour une session de paire de clés EXTERNE (connexion avec portefeuille personnel, client SDK serveur avec paire de clés, voie de données CLI avec paire de clés). Règle complète et exceptions : embedded-wallets.md.
  • @user.id (l'identifiant du compte) est l'identité/propriété ; @user.address est le portefeuille. Clés de propriété, adhésion et gardes d'authentification sur @user.id (toujours présent). Utilisez @user.address uniquement pour la sémantique de portefeuille/onchain - jamais comme clé d'identité.
  • La connexion portefeuille sur un téléphone nécessite l'adaptateur Solana Mobile. Un navigateur de téléphone n'injecte jamais d'applications portefeuille ; gardez @solana-mobile/wallet-standard-mobile installé (legacy-peer-deps=true dans .npmrc) et ne vérifiez jamais window.solana avant d'ouvrir le widget. Voir Solana Mobile.

Skills associés