@burnt-labs/abstraxion-js (英语)
XION 账户抽象的框架不可知运行时间. 拥有每个模态的状态机器,控制器,策略,以及签名客户端——没有反应,没有DOM,也没有平台的假设被烤入.
您只需直接依赖此软件包 :
- 建立非反应/RN一体化(Svelte、Vue、SolidJS、vanilla JS)
- 实施自定义主机(如电子预装,服务员,测试带),需要注入自己的存储/重定向/iframe-transport行为
- 写入新框架包抄到
@burnt-labs/abstraxion-react或者说@burnt-labs/abstraxion-react-native
如果你正在建造一个 反应应用程序,使用时 @burnt-labs/abstraxion-react。如果你正在建立一个 反应原生应用程序,使用时 @burnt-labs/abstraxion-react-native。两个包件都会重新导出此运行时间的相关部件,所以您很少需要从 abstraxion-js 直接说.
安装
npm i @burnt-labs/abstraxion-js
运行时间
createAbstraxionRuntime(config, strategies?) 是单一的切入点。 它返回一个 runtime 一次拥有一个控制器的对象(匹配对象) config.authentication.type),并揭露出一个小的反应性API:
import { createAbstraxionRuntime } from "@burnt-labs/abstraxion-js";
const runtime = createAbstraxionRuntime({
chainId: "xion-testnet-2",
treasury: "xion1...",
authentication: { type: "auto" },
});
const unsubscribe = runtime.subscribe((state) => {
// state.isConnected, state.isConnecting, state.granterAddress, state.error, ...
});
await runtime.login();
const snapshot = runtime.getState();
await runtime.logout();
unsubscribe();
这是整个表面 一个主机框架需要绑定。 反应 useSyncExternalStore,一个斯维尔特 readable 存储, 一个 Vue ref 周围都是薄的适配器 runtime.subscribe(listener) → unsubscribe 加号 runtime.getState()。 。 。 .
认证模式
这个 authentication 配置字段选择控制器 :
| 模式 | 主计长 | 它会做什么 |
|---|---|---|
popup | PopupController | 在弹出窗口中打开仪表板;通过 postMessage。 。 。 . |
redirect | RedirectController | 全页重定向到仪表板;返回回调的URL. |
embedded | IframeController | 在嵌入式iframe中渲染仪表板;通过 MessageChannel。 。 。 . |
signer | SignerController | 无头-呼叫者提供一个签名器(Turnkey / MetaMask / Kepler /自定义). |
auto | 自动解决 | 决定 popup 在桌面上, redirect 在移动/PWA. |
每个控制器通过 runtime.subscribe,所以包装不需要特殊的情况模式.
策略注入( 运行在浏览器外)
运行时间通过三种可注入策略到达主机环境:
import {
createAbstraxionRuntime,
type StorageStrategy,
type RedirectStrategy,
type IframeTransportStrategy,
} from "@burnt-labs/abstraxion-js";
const runtime = createAbstraxionRuntime(config, {
strategies: {
storageStrategy: myStorageStrategy, // implements StorageStrategy
redirectStrategy: myRedirectStrategy, // implements RedirectStrategy
iframeTransportStrategy: myIframeTransport, // implements IframeTransportStrategy
},
});
默认为浏览器本地化 :
BrowserStorageStrategy—— 说localStorageBrowserRedirectStrategy—— 说window.location+ 键URLSearchParamsBrowserIframeTransportStrategy- DOM iframe + 数据MessageChannel
你只能超越那些不符合你环境的违约者——例如. @burnt-labs/abstraxion-react-native 注入 AsyncStorage 备份 StorageStrategy,一个被Web浏览器支持的博览会 RedirectStrategy,则a react-native-webview- 后卫 IframeTransportStrategy。不使用的模式(signer 不需要改变策略, redirect 不需要iframe transfer)可以不设.
直接签名
两个客户被曝直接签名(即元账户在每笔交易上签字,支付自己的毒气):
RequireSigningClient——处理弹出/重定向/iframe传输的单一客户端. 运输从活性控制器中选择;消费者不直接选择.AAClient用于signer模式; 将外部提供的签名符(MetaMask、Kepler、Twitchey、.)包起来.
两者都暴露了同样的 signAndBroadcast 编号 : sendTokens 编号 : execute 因此在会话键签名和直接签名之间切换是消费者的一行变化.
公共表面(部分出口)
export { createAbstraxionRuntime } from "@burnt-labs/abstraxion-js";
export type {
AbstraxionRuntime,
AbstraxionRuntimeOptions,
} from "@burnt-labs/abstraxion-js";
export {
BaseController,
IframeController,
PopupController,
RedirectController,
SignerController,
createController,
} from "@burnt-labs/abstraxion-js";
export {
BrowserStorageStrategy,
BrowserRedirectStrategy,
BrowserIframeTransportStrategy,
} from "@burnt-labs/abstraxion-js";
export type {
IframeTransportStrategy,
// RedirectStrategy and StorageStrategy are re-exported from abstraxion-core
} from "@burnt-labs/abstraxion-js";
export { RequireSigningClient, AAClient } from "@burnt-labs/abstraxion-js";
export {
ConnectorType,
IframeMessageType,
MessageTarget,
} from "@burnt-labs/abstraxion-js";
export { AUTHENTICATOR_TYPE } from "@burnt-labs/abstraxion-js";
配置类型( E)AbstraxionConfig, (中文(简体) ), AuthenticationConfig见 packages/abstraxion-js/src/types.ts 它们也从框架包装中再出口.
建立一个新的框架包
斯维尔特演示 demos/svelte/ 是实例: 它创建了运行时间, 从 Svelte 订阅 writable,并且与由此产生的商店相对立。 同一模式对Vue(ref + 键 watchEffect),SolidJS (英语:createStore),或任何可以反射外部订阅的活性原始.
许可证
麻省理工学院