@ 力学- labs- sdk/ legacy- 嵌入- wallet- 升级
帮助用户将遗留的"动态"嵌入式钱包升级为"动态瓦". 将 URL 合同, 重定向回转, iframe/WebView 完成握手, 会话在一小组函数后刷新, 所以您只调用函数 —— 您从未自己组装流量 .
核心切入点为框架-可知性(无反应). 反应钩子分开住 /react 子路径,所以非反应消费者永远不会加载它们.
安装
npm install @dynamic-labs-sdk/legacy-embedded-wallet-upgrade @dynamic-labs-sdk/client
检测需要升级的钱包
import {
getWalletsRequiringUpgrade,
hasWalletsRequiringUpgrade,
} from '@dynamic-labs-sdk/legacy-embedded-wallet-upgrade';
if (hasWalletsRequiringUpgrade()) {
const wallets = getWalletsRequiringUpgrade();
// show an upgrade entry point for these wallets
}
重定向路径
将顶级窗口导航到主机升级应用,然后在返回时处理结果. 后腿有两步—— detectUpgradeRedirect 告诉你当前 URL 是否是升级应用的回放,以及 completeUpgradeRedirect 完成它(恢复关于成功的会话)——反映OAuth和器件注册如何消耗它们的重定向. 你总是自己通过 URL(window.location.href 在浏览器中,React Introduction中的深链接 URL).
import {
startUpgradeRedirect,
detectUpgradeRedirect,
completeUpgradeRedirect,
} from '@dynamic-labs-sdk/legacy-embedded-wallet-upgrade';
// on the "Upgrade via redirect" button
startUpgradeRedirect();
// once, on app load
if (detectUpgradeRedirect({ url: window.location.href })) {
const result = await completeUpgradeRedirect({ url: window.location.href });
if (result?.status === 'error') {
showErrorToast();
}
}
Iframe 路径
包件没有自己的UI——你拥有容器(例如底板). openUpgradeIframe 将 iframe 附加到您的容器中, 监听原端检查的补全信息, 刷新会话的成功度, 并解析 .
import { openUpgradeIframe } from '@dynamic-labs-sdk/legacy-embedded-wallet-upgrade';
const session = openUpgradeIframe({ container: sheetBodyElement });
const { status } = await session.completed;
closeSheet();
// if the user dismisses the sheet first:
session.close();
反应原生/自定义挂载
在您挂载升级时使用 DOM- 不可知原始软件( 例如, 反应原生) WebView:
import {
buildUpgradeUrl,
subscribeToUpgradeCompletion,
} from '@dynamic-labs-sdk/legacy-embedded-wallet-upgrade';
const src = buildUpgradeUrl();
const unsubscribe = subscribeToUpgradeCompletion({
onComplete: ({ status }) => handleOutcome(status),
});
反应
反应钩是从 /react 子路径, 与 react 作为可选同伴依赖:
import {
useWalletsRequiringUpgrade,
useHasWalletsRequiringUpgrade,
useUpgradeRedirectResult,
useUpgradeIframe,
} from '@dynamic-labs-sdk/legacy-embedded-wallet-upgrade/react';
const needsUpgrade = useHasWalletsRequiringUpgrade();
useUpgradeRedirectResult({ onComplete: ({ status }) => handleOutcome(status) });
const { upgradeUrl } = useUpgradeIframe({
active: isSheetOpen,
onComplete: ({ status }) => closeSheet(status),
});
多客户
每个函数都接受动态客户端作为可选的第二个参数,默认为 getDefaultClient(); 只在使用一个以上客户端时明确通过.