用途:这是 Bounded 应用的客户端侧技能,覆盖 Web 或移动应用调用的 SDK、终端用户认证方式,以及托管前端的提供方式。客户端每次写入仍受策略约束,因此当客户端操作需要规则或不变量时,应配合 bounded-backend 技能;托管与域名相关配合 bounded-deploy;跨技能导航见根 bounded 技能。
主要能力:SDK 读取、写入、订阅、分页、queryAggregate、count、过滤、排序、游标、setMany、set(path, null);Web 前端构建;React Native/移动端构建;应用用户邮箱 OTP、OAuth、openBoundedWidget 统一登录组件、默认 Turnkey 认证;自带钱包登录(walletLogin、authMethod:'phantom'、supportsWalletSignIn);匿名账户与邀请链接、账户升级;关联 X 账户(connect('x')、completeConnection、getConnections);托管前端与应用 URL;开发者账户登录;嵌入式钱包;onramp() 法币购买 SOL/USDC;OpenApps 托管(fundVenueEscrow、disputeVenueEscrow、getVenueEscrow)。
使用方式:按任务查阅对应参考文档(SDK 参考、Web 应用指南、React Native 指南、localhost 开发、应用认证、钱包登录、匿名账户、关联账户、前端托管、开发者账户、嵌入式钱包、onramp 等)。本地开发使用 npm run dev、Vite、localhost;登录弹窗失败或 redirect_uri 源未注册、CORS 问题参见 localhost 开发文档。
限制与要点:客户端写入被策略管控,写入返回 403 是规则拒绝而非客户端缺陷;被拒绝的读取返回空 200 而非 403。默认实时推送,不要轮询;用 useQuery(React)或 subscribe,倒计时基于本地时钟状态。对非实时接口(runQuery、functions.invoke、第三方)才刻意轮询,并暂停隐藏标签页、限定计时器范围、退避与设上限。列表计算值用 runQueryMany 批量读取,不要对列表 map runQuery。提供商 API 密钥放 Bounded secrets(后端),不要放前端代码。多数应用保留认证默认值,不要为“启用钱包”添加 authMode 或 auth.wallets;仅外部密钥对会话才部署 "auth": { "wallets": true }。@user.id 是身份/所有权键,@user.address 仅用于钱包/链上语义。手机钱包登录需要 Solana Mobile 适配器,保持 @solana-mobile/wallet-standard-mobile 安装(.npmrc 中 legacy-peer-deps=true),打开组件前不要预检 window.solana。若 npm audit 报告经 @solana/web3.js -> jayson 的 uuid 公告 GHSA-w5hq-g745-h8pq,使用限定 override 方案,并对已安装 lockfile 运行 npm audit --omit=dev 单独排查其余问题。