接缝钱包SDK
@seams/wallet 0.41.1 提供浏览器钱包生命周期,NEAR和evm家族
阈值签名、React组件和托管钱包运行时资产。
安装
pnpm add @seams/[email protected]
React和React DOM是可选的对等体 >=19.0.0,包括未来的主要版本。
SDK开发使用精确的 [email protected] 和 [email protected].
应用程序锁定文件选择已安装的React版本。从中导入提供程序和UI
@seams/wallet/react 和它的样式表 @seams/wallet/react/styles.
保留应用程序包、钱包源资产和
@seams/[email protected] 在匹配的释放上。钱包iframe协议
是 23.0.0. 应用程序和钱包主机必须使用相同的协议版本。
当前的API
公共API将调用分组在下面 auth, connection, config, events,
registration,以及链命名空间。看到
浏览器的参考.
使用 auth.lock() 结束会话,同时保留有效的持久预签名。
自定义电子邮件解锁使用主机拥有的挑战:
const requested = await seams.auth.requestEmailCode({
method: 'google',
idToken,
target: { kind: 'wallet', walletId },
});
if (!requested.ok) throw new Error(requested.error.message);
const result = await seams.auth.unlockWithEmailCode({
challenge: requested.value,
code,
});
if (!result.ok) throw new Error(result.error.message);
对于现有的本地电子邮件方法,请使用
{ method: 'email', walletId, email }. 挑战支持 resend() 和
cancel(). 使用成功重发后返回的替换挑战。
SDK选择签名者并在内部完成待激活。
只有在用户选择该方法后才请求电子邮件代码。主机拥有的钱包 挑战和它的到期。应用程序接收类型化质询句柄。
申请会议和新业主批准
SDK 0.41.1接受来自显式信任的应用程序后端的切换。
谷歌和app-passkey登录可以使用相同的稳定应用用户ID。
使用 registration.registerOwnerWallet 使用NEAR-only密码登机和 near.prepareOwnerTransaction 重新批准每笔交易。
这些操作不创建可重用的签名授权。
React读连接将所有者操作句柄与可重用的签名者分开公开。
看到 应用程序会话指导.
带上自己的谷歌身份验证
SDK 0.41.1可以重用应用程序的b谷歌ID令牌来打开相关的钱包设置。 配置环境的谷歌客户端ID,并让所有者将他们的钱包关联一次。 然后在应用程序现有的谷歌登录后传递令牌:
const result = await seams.auth.authenticate({ method: 'google', walletId, idToken });
if (!result.ok) throw new Error(result.code);
保留令牌的应用程序在后端使用 prepareExternalAuth 以及浏览器绑定的切换。
呼叫 seams.auth.lock() 当应用程序注销或切换帐户时。
这些会话授予设置读取。签名、导出、恢复和安全更改保留其所有者身份验证要求。
看到 谷歌单点登录指南 对于交换路径、关联、到期和撤销。
反应快速启动
三个必需的值是钱包来源、网关/中继器URL和 管理注册可发布密钥。从您的项目中获取它们并允许 您的应用程序在该环境中的源。浏览器配置是公开的。
import {
HostedSeamsAuthMenu,
SeamsWebProvider,
seamsTestnetConfig,
type HostedAuthMenuOutcome,
} from '@seams/wallet/react';
import '@seams/wallet/react/styles';
const config = seamsTestnetConfig({
walletOrigin: import.meta.env.VITE_WALLET_ORIGIN,
relayerUrl: import.meta.env.VITE_RELAYER_URL,
publishableKey: import.meta.env.VITE_SEAMS_PUBLISHABLE_KEY,
});
function handleOutcome(outcome: HostedAuthMenuOutcome): void {
console.log('Wallet authentication:', outcome);
}
export function App() {
return (
<SeamsWebProvider config={config}>
<HostedSeamsAuthMenu onOutcome={handleOutcome} />
</SeamsWebProvider>
);
}
seamsTestnetConfig 选择NEAR和Tempo测试网。使用 defineSeamsConfig
对于另一个链集。evm家族链记录需要数字 chainId.
一个可选的 projectEnvironmentId 交叉检查拒绝a的可发布密钥
不同的环境。
托管菜单拥有注册,登录,OTP提示,恢复代码备份,
还有用户的存在感。供应 externalAuthBroker 当您的应用程序获得
谷歌钱包主机的身份证明。保密证书和
从应用配置和日志中恢复材料。
签名和生命周期
useSeams() 公开身份验证操作、生命周期状态和当前
wallet. 注销时钱包为空。经过身份验证的钱包提供
near, evm, tempo 签名者受其身份约束。
wallet.near 在NEAR帐户准备好之前为空。检查注册是否未完成
分支和用途 registration.waitForNearAccount 签署NEAR之前。
const { unlock, lock, wallet } = useSeams();
解锁在随后的React渲染中更新钱包。使用经过身份验证的
在签名处理程序中渲染钱包。 wallet.walletId 识别钱包。
这个体系的中立者 SeamsWeb 下的客户端组操作 registration,
auth, near, evm, tempo, recovery, devices, keys。签名可以
一次操作使用新授权; unlock 供应有限
可重复使用钱包会话。evm系列签名或导出呼叫需要
chainTarget 命名已配置的链。
keys.exportKey 打开钱包源查看器并返回 { kind: 'exported' }.
它不向应用程序返回私钥。 recovery.syncAccount
同步已知钱包的账户状态;托管菜单处理恢复
代码和新因素验证。
看到 编制示例 用于 注册、解锁、签名、链接设备、导出、恢复和主题化。
钱包设置
WalletSettingsPage 提供帐户,密钥导出,恢复代码,
认证方法、设备链接、链接设备和事务
偏好。已注销用户可查看托管身份验证菜单。
import {
SeamsWebProvider,
WalletSettingsPage,
type SeamsConfigsInput,
} from '@seams/wallet/react';
import '@seams/wallet/react/styles';
export function WalletSettingsApp({ config }: { config: SeamsConfigsInput }) {
return (
<SeamsWebProvider config={config}>
<WalletSettingsPage />
</SeamsWebProvider>
);
}
保持配置 /wallet-service 端点。裸服务HTML
资产需要部署的引导和配置,然后才能提供服务
完成设置应用程序。
接待边界和区域家庭
专用钱包原点服务 /wallet-service 和 /sdk/*,包括
工人、WASM和导出查看器。SDK iframe委托WebAuthn
该源的权限。在那里执行凭据创建和断言;
没有应用程序源凭据桥接。
区域托管部署在注册时为每个钱包分配一个home。 一个项目中的钱包可以有不同的家,而所有设备都是一个 钱包使用同一个家。旅行不会改变它。钱包的主人可以移动钱包 到另一个具有钱包区域设置的区域。自动区域重新定位 未来的能力。
对于亚太地区,注册和搬迁申请东南亚安置通过
apac-se。提示不保证城市或移动现有对象。运营商
必须验证实际的对象位置和数据库主。
遵循 升级指南 在更改应用程序、钱包资产或后端之前。不相容的开放 客户端在重试之前必须重新加载匹配的资产。
初次装载和登记
当钱包原点没有存储钱包时,主机回答连接读取
它的引导代码。它在操作需要时加载运行时。呼叫
seams.authMenu.prepare() 在登录时,打算提前下载登录代码。
越来越多 HostedSeamsAuthMenu 无需额外呼叫即可开始下载。
打开托管的注册视图准备它的钱包和密钥挑战。
authMenu.prepare() 只下载代码。一个直接 registerWallet() 电话开始
该调用中的注册设置。看到
编译的托管菜单示例.
注册可以在控制台目录中显示其完成之前进行签名。 网关重新尝试挂起的目录发布。在得到承认之前, 钱包可以从控制台列表中缺席,并且在区域移动时不可用。
公共entrypoints
@seams/wallet-浏览器客户端,配置构建器,公共结果和值。@seams/wallet/react-提供程序、钩子、组件、事务审查和主题。@seams/wallet/external-evm-浏览器EVM扩展连接器。@seams/wallet/advanced-精确的身份生成器,RPC和编码助手。@seams/wallet/threshold-会话策略助手、PRF盐和意图摘要。@seams/wallet/runtime-明确的平台端口和自定义签名运行时。
使用文档化的包导出。代理通道的发行仍在计划中。 VoiceID审批原型是可选择的:
import { defineSeamsConfig } from '@seams/wallet';
import { voiceIdAuthMethod } from '@seams/voiceid';
const config = defineSeamsConfig({
walletOrigin,
relayerUrl,
publishableKey,
authMethods: [voiceIdAuthMethod()],
});
VoiceID是一个单独的可选包。钱包主机运营商必须部署其
钱包主机旁边的资产。描述符本身不下载实现
或模型。VoiceID支持注册,钱包会话解锁和审查NEAR
和Arc测试网签约。看到 @seams/voiceid 为安装。
从源头发展
从存储库根目录:
pnpm install
pnpm build
pnpm -C packages/wallet dev
pnpm test:wallet-browser
pnpm -C packages/wallet type-check
已经构建了所需的WASM和服务器构件,只需重新构建SDK
与 pnpm -C packages/wallet build:sdk。请参阅存储库README以获取完整的
本地栈和控制台Lite示例。
许可和支持
apache - 2.0。请看包装的 LICENSE.md 和 THIRD_PARTY_NOTICES.md.