@roochnetwork/rooch-sdk-kit
Version:
Rooch SDK Kit
1,207 lines (1,128 loc) • 96.7 kB
JavaScript
"use strict";
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/components/ConnectButton.tsx
var ConnectButton_exports = {};
__export(ConnectButton_exports, {
ConnectButton: () => ConnectButton
});
module.exports = __toCommonJS(ConnectButton_exports);
// src/components/connect-modal/ConnectModal.tsx
var Dialog2 = __toESM(require("@radix-ui/react-dialog"), 1);
var import_clsx6 = __toESM(require("clsx"), 1);
var import_react16 = require("react");
// src/components/icons/BackIcon.tsx
var import_jsx_runtime = require("react/jsx-runtime");
function BackIcon(props) {
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { width: 24, height: 24, fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
"path",
{
d: "M7.57 12.262c0 .341.13.629.403.895l5.175 5.059c.204.205.45.307.751.307.609 0 1.101-.485 1.101-1.087 0-.293-.123-.574-.349-.8L10.14 12.27l4.511-4.375A1.13 1.13 0 0 0 15 7.087C15 6.485 14.508 6 13.9 6c-.295 0-.54.103-.752.308l-5.175 5.058c-.28.28-.404.56-.404.896Z",
fill: "currentColor"
}
) });
}
// src/components/ui/Heading.tsx
var import_react_slot = require("@radix-ui/react-slot");
var import_clsx = __toESM(require("clsx"), 1);
var import_react = require("react");
// src/components/ui/Heading.css.ts
var import_createRuntimeFn = require("@vanilla-extract/recipes/createRuntimeFn");
var headingVariants = (0, import_createRuntimeFn.createRuntimeFn)({ defaultClassName: "Heading__1v58k1t0", variantClassNames: { size: { sm: "Heading_headingVariants_size_sm__1v58k1t1", md: "Heading_headingVariants_size_md__1v58k1t2", lg: "Heading_headingVariants_size_lg__1v58k1t3", xl: "Heading_headingVariants_size_xl__1v58k1t4" }, weight: { normal: "Heading_headingVariants_weight_normal__1v58k1t5", bold: "Heading_headingVariants_weight_bold__1v58k1t6" }, truncate: { true: "Heading_headingVariants_truncate_true__1v58k1t7" } }, defaultVariants: { size: "lg", weight: "bold" }, compoundVariants: [] });
// src/components/ui/Heading.tsx
var import_jsx_runtime2 = require("react/jsx-runtime");
var Heading = (0, import_react.forwardRef)(
({
children,
className,
asChild = false,
as: Tag = "h1",
size,
weight,
truncate,
...headingProps
}, forwardedRef) => {
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
import_react_slot.Slot,
{
...headingProps,
ref: forwardedRef,
className: (0, import_clsx.default)(headingVariants({ size, weight, truncate }), className),
children: asChild ? children : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Tag, { children })
}
);
}
);
Heading.displayName = "Heading";
// src/components/ui/IconButton.tsx
var import_react_slot2 = require("@radix-ui/react-slot");
var import_clsx2 = __toESM(require("clsx"), 1);
var import_react2 = require("react");
// src/components/ui/IconButton.css.ts
var container = "IconButton_container__5zr4fg0";
// src/components/ui/IconButton.tsx
var import_jsx_runtime3 = require("react/jsx-runtime");
var IconButton = (0, import_react2.forwardRef)(
({ className, asChild = false, ...props }, forwardedRef) => {
const Comp = asChild ? import_react_slot2.Slot : "button";
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Comp, { ...props, className: (0, import_clsx2.default)(container, className), ref: forwardedRef });
}
);
IconButton.displayName = "Button";
// src/components/connect-modal/ConnectModal.css.ts
var backButtonContainer = "ConnectModal_backButtonContainer__yocf846";
var selectedViewContainer = "ConnectModal_selectedViewContainer__yocf845";
var title = "ConnectModal_title__yocf841";
var viewContainer = "ConnectModal_viewContainer__yocf844";
var walletListContainer = "ConnectModal_walletListContainer__yocf849";
var walletListContainerWithViewSelected = "ConnectModal_walletListContainerWithViewSelected__yocf84a";
var walletListContent = "ConnectModal_walletListContent__yocf848";
var whatIsAWalletButton = "ConnectModal_whatIsAWalletButton__yocf843";
// src/components/ui/Button.tsx
var import_react_slot3 = require("@radix-ui/react-slot");
var import_clsx3 = __toESM(require("clsx"), 1);
var import_react3 = require("react");
// src/components/ui/Button.css.ts
var import_createRuntimeFn2 = require("@vanilla-extract/recipes/createRuntimeFn");
var buttonVariants = (0, import_createRuntimeFn2.createRuntimeFn)({ defaultClassName: "Button_buttonVariants__1vdhm2g0", variantClassNames: { variant: { primary: "Button_buttonVariants_variant_primary__1vdhm2g1", outline: "Button_buttonVariants_variant_outline__1vdhm2g2" }, size: { md: "Button_buttonVariants_size_md__1vdhm2g3", lg: "Button_buttonVariants_size_lg__1vdhm2g4" } }, defaultVariants: { variant: "primary", size: "md" }, compoundVariants: [] });
// src/components/ui/Button.tsx
var import_jsx_runtime4 = require("react/jsx-runtime");
var Button = (0, import_react3.forwardRef)(
({ className, variant, size, asChild = false, ...props }, forwardedRef) => {
const Comp = asChild ? import_react_slot3.Slot : "button";
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
Comp,
{
...props,
className: (0, import_clsx3.default)(buttonVariants({ variant, size }), className),
ref: forwardedRef
}
);
}
);
Button.displayName = "Button";
// src/components/ui/Text.tsx
var import_react_slot4 = require("@radix-ui/react-slot");
var import_clsx4 = __toESM(require("clsx"), 1);
var import_react4 = require("react");
// src/components/ui/Text.css.ts
var import_createRuntimeFn3 = require("@vanilla-extract/recipes/createRuntimeFn");
var textVariants = (0, import_createRuntimeFn3.createRuntimeFn)({ defaultClassName: "Text__1utg4wj0", variantClassNames: { size: { sm: "Text_textVariants_size_sm__1utg4wj1" }, weight: { normal: "Text_textVariants_weight_normal__1utg4wj2", medium: "Text_textVariants_weight_medium__1utg4wj3", bold: "Text_textVariants_weight_bold__1utg4wj4" }, color: { muted: "Text_textVariants_color_muted__1utg4wj5", danger: "Text_textVariants_color_danger__1utg4wj6", warning: "Text_textVariants_color_warning__1utg4wj7" }, mono: { true: "Text_textVariants_mono_true__1utg4wj8" } }, defaultVariants: { size: "sm", weight: "normal" }, compoundVariants: [] });
// src/components/ui/Text.tsx
var import_jsx_runtime5 = require("react/jsx-runtime");
var Text = (0, import_react4.forwardRef)(
({
children,
className,
asChild = false,
as: Tag = "div",
size,
weight,
color,
mono,
...textProps
}, forwardedRef) => {
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
import_react_slot4.Slot,
{
...textProps,
ref: forwardedRef,
className: (0, import_clsx4.default)(textVariants({ size, weight, color, mono }), className),
children: asChild ? children : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Tag, { children })
}
);
}
);
Text.displayName = "Text";
// src/components/connect-modal/views/ConnectionStatus.css.ts
var connectionStatus = "ConnectionStatus_connectionStatus__l246a63";
var container2 = "ConnectionStatus_container__l246a60";
var retryButtonContainer = "ConnectionStatus_retryButtonContainer__l246a64";
var title2 = "ConnectionStatus_title__l246a62";
var walletIcon = "ConnectionStatus_walletIcon__l246a61";
// src/components/connect-modal/views/ConnectionStatus.tsx
var import_jsx_runtime6 = require("react/jsx-runtime");
function ConnectionStatus({
selectedWallet,
info,
hadConnectionError,
onRetryConnection
}) {
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: container2, children: [
selectedWallet.getName() && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
"img",
{
className: walletIcon,
src: selectedWallet.getIcon(),
alt: `${selectedWallet.getName()} logo`
}
),
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: title2, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(Heading, { as: "h2", size: "xl", children: [
"Opening ",
selectedWallet.getName()
] }) }),
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: connectionStatus, children: [
hadConnectionError ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Text, { color: "danger", children: "Connection failed" }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Text, { color: "muted", children: "Confirm connection in the wallet..." }),
info ? info.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Text, { color: "warning", children: item }, i)) : null
] }),
hadConnectionError ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: retryButtonContainer, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Button, { type: "button", variant: "outline", onClick: () => onRetryConnection(selectedWallet), children: "Retry Connection" }) }) : null
] });
}
// src/components/connect-modal/InfoSection.css.ts
var container3 = "InfoSection_container__1tyxmhu0";
// src/components/connect-modal/InfoSection.tsx
var import_jsx_runtime7 = require("react/jsx-runtime");
function InfoSection({ title: title7, children }) {
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("section", { className: container3, children: [
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Heading, { as: "h3", size: "sm", weight: "normal", children: title7 }),
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { weight: "medium", color: "muted", children })
] });
}
// src/components/connect-modal/views/WhatIsAWallet.css.ts
var container4 = "WhatIsAWallet_container__18x371x0";
var content = "WhatIsAWallet_content__18x371x1";
// src/components/connect-modal/views/WhatIsAWallet.tsx
var import_jsx_runtime8 = require("react/jsx-runtime");
function WhatIsAWallet() {
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: container4, children: [
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Heading, { as: "h2", children: "What is a Wallet" }),
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: content, children: [
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(InfoSection, { title: "Easy Login", children: "No need to create new accounts and passwords for every website. Just connect your wallet and get going." }),
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(InfoSection, { title: "Store your Digital Assets", children: "Send, receive, store, and display your digital assets like NFTs & coins." })
] })
] });
}
// src/components/connect-modal/views/InstallStatus.css.ts
var container5 = "InstallStatus_container__1hlwsco0";
var installButtonContainer = "InstallStatus_installButtonContainer__1hlwsco4";
var installStatus = "InstallStatus_installStatus__1hlwsco3";
var title3 = "InstallStatus_title__1hlwsco2";
var walletIcon2 = "InstallStatus_walletIcon__1hlwsco1";
// src/components/connect-modal/views/InstallStatus.tsx
var import_jsx_runtime9 = require("react/jsx-runtime");
function InstallStatus({ selectedWallet }) {
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: container5, children: [
selectedWallet.getName() && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
"img",
{
className: walletIcon2,
src: selectedWallet.getIcon(),
alt: `${selectedWallet.getName()} logo`
}
),
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: title3, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Heading, { as: "h2", size: "xl", children: [
"Opening ",
selectedWallet.getName()
] }) }),
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: installStatus, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: "danger", children: "undetected Wallet" }) }),
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: installButtonContainer, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
Button,
{
type: "button",
variant: "outline",
onClick: () => window.open(selectedWallet.getInstallUrl(), "_blank"),
children: "Install"
}
) })
] });
}
// src/components/connect-modal/wallet-list/WalletList.css.ts
var container6 = "WalletList_container__1wac1dp0";
// src/components/connect-modal/wallet-list/WalletListItem.tsx
var import_clsx5 = require("clsx");
// src/components/connect-modal/wallet-list/WalletListItem.css.ts
var container7 = "WalletListItem_container__1i3e7c00";
var detectingStatus = "WalletListItem_detectingStatus__1i3e7c07";
var installedStatus = "WalletListItem_installedStatus__1i3e7c05";
var loadingSpinner = "WalletListItem_loadingSpinner__1i3e7c09";
var notInstalledStatus = "WalletListItem_notInstalledStatus__1i3e7c06";
var selectedWalletItem = "WalletListItem_selectedWalletItem__1i3e7c02";
var walletIcon3 = "WalletListItem_walletIcon__1i3e7c03";
var walletItem = "WalletListItem_walletItem__1i3e7c01";
var walletStatus = "WalletListItem_walletStatus__1i3e7c04";
// src/components/connect-modal/wallet-list/WalletListItem.tsx
var import_jsx_runtime10 = require("react/jsx-runtime");
function WalletListItem({
name,
icon,
onClick,
isSelected = false,
isInstalled = false,
isDetecting = false
}) {
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { className: container7, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
"button",
{
className: (0, import_clsx5.clsx)(walletItem, { [selectedWalletItem]: isSelected }),
type: "button",
onClick,
children: [
icon && typeof icon === "string" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("img", { className: walletIcon3, src: icon, alt: `${name} logo` }) : icon,
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Heading, { size: "md", truncate: true, asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { children: name }) }),
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
"span",
{
className: (0, import_clsx5.clsx)(walletStatus, {
[installedStatus]: isInstalled && !isDetecting || name === "Local",
[notInstalledStatus]: !isInstalled && !isDetecting,
[detectingStatus]: isDetecting && name !== "Local"
}),
children: isDetecting && name !== "Local" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: loadingSpinner }) }) : isInstalled ? "Installed" : "Uninstalled"
}
)
]
}
) });
}
// src/components/connect-modal/wallet-list/WalletList.tsx
var import_jsx_runtime11 = require("react/jsx-runtime");
function WalletList({
wallets,
selectedWalletName,
onSelect,
walletStatus: walletStatus2,
isDetecting
}) {
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("ul", { className: container6, children: wallets.map((wallet) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
WalletListItem,
{
name: wallet.getName(),
icon: wallet.getIcon(),
isSelected: wallet.getName() === selectedWalletName,
isInstalled: walletStatus2.get(wallet.getName()),
isDetecting,
onClick: () => onSelect(wallet)
},
wallet.getName()
)) });
}
// src/hooks/wallet/useConnectWallet.ts
var import_react_query3 = require("@tanstack/react-query");
// src/hooks/wallet/useWalletStore.ts
var import_react11 = require("react");
var import_zustand2 = require("zustand");
// src/provider/roochProvider.tsx
var import_react8 = require("react");
// src/provider/clientProvider.tsx
var import_react7 = require("react");
var import_rooch_sdk = require("@roochnetwork/rooch-sdk");
// src/hooks/useSessionsStore.ts
var import_react5 = require("react");
var import_zustand = require("zustand");
function useSessionStore(selector) {
const store = (0, import_react5.useContext)(RoochContext);
if (!store) {
throw new Error(
"Could not find RoochSessionContext. Ensure that you have set up the RoochClientProvider."
);
}
return (0, import_zustand.useStore)(store, selector);
}
// src/provider/globalProvider.tsx
var import_react6 = require("react");
var import_jsx_runtime12 = require("react/jsx-runtime");
var GlobalContext = (0, import_react6.createContext)(null);
var useSubscribeOnError = () => {
const ctx = (0, import_react6.useContext)(GlobalContext);
if (!ctx) {
throw new Error("useSubscribeToError must be used within a GlobalProvider");
}
return ctx.subscribeOnError;
};
var useTriggerError = () => {
const ctx = (0, import_react6.useContext)(GlobalContext);
if (!ctx) {
throw new Error("useTriggerError must be used within a GlobalProvider");
}
return ctx.triggerError;
};
var useSubscribeOnRequest = () => {
const ctx = (0, import_react6.useContext)(GlobalContext);
if (!ctx) {
throw new Error("useSubscribeToError must be used within a GlobalProvider");
}
return ctx.subscribeOnRequest;
};
var useTriggerRequest = () => {
const ctx = (0, import_react6.useContext)(GlobalContext);
if (!ctx) {
throw new Error("useTriggerError must be used within a GlobalProvider");
}
return ctx.triggerRequest;
};
// src/provider/clientProvider.tsx
var import_jsx_runtime13 = require("react/jsx-runtime");
var ClientContext = (0, import_react7.createContext)(null);
var DEFAULT_NETWORKS = {
localnet: { url: (0, import_rooch_sdk.getRoochNodeUrl)("localnet") }
};
// src/constants/styleDataAttribute.ts
var styleDataAttributeName = "data-sdk-kit";
var styleDataAttributeSelector = `[${styleDataAttributeName}]`;
var styleDataAttribute = { [styleDataAttributeName]: "" };
// src/provider/roochProvider.tsx
var import_jsx_runtime14 = require("react/jsx-runtime");
var RoochContext = (0, import_react8.createContext)(null);
// src/provider/walletProvider.tsx
var import_react10 = require("react");
var import_rooch_sdk2 = require("@roochnetwork/rooch-sdk");
// src/hooks/client/useCurrentNetwork.ts
function useCurrentNetwork() {
return useRoochContext().network;
}
// src/hooks/client/useRoochContext.ts
var import_react9 = require("react");
function useRoochContext() {
const context = (0, import_react9.useContext)(ClientContext);
if (!context) {
throw new Error(
"Could not find RoochClientContext. Ensure that you have set up the RoochClientProvider."
);
}
return context;
}
// src/hooks/client/useRoochClient.ts
function useRoochClient() {
return useRoochContext().client;
}
// src/constants/roochMutationKeys.ts
function formMutationKeyFn(baseEntity) {
return function mutationKeyFn(additionalKeys = []) {
return [{ ...roochMutationKeys.all, baseEntity }, ...additionalKeys];
};
}
var roochMutationKeys = {
all: { baseScope: "rooch" },
addNetwork: formMutationKeyFn("add-network"),
switchNetwork: formMutationKeyFn("switch-network"),
removeNetwork: formMutationKeyFn("remove-network"),
removeSession: formMutationKeyFn("remove-session"),
transferObject: formMutationKeyFn("transfer-object"),
transferCoin: formMutationKeyFn("transfer-coin"),
signAndExecuteTransaction: formMutationKeyFn("sign-and-execute-transaction")
};
// src/constants/walletMutationKeys.ts
function formMutationKeyFn2(baseEntity) {
return function mutationKeyFn(additionalKeys = []) {
return [{ ...walletMutationKeys.all, baseEntity }, ...additionalKeys];
};
}
var walletMutationKeys = {
all: { baseScope: "wallet" },
connectWallet: formMutationKeyFn2("connect-wallet"),
autoConnectWallet: formMutationKeyFn2("auto-connect-wallet"),
switchAccount: formMutationKeyFn2("switch-account"),
createSessionKey: formMutationKeyFn2("create-session-key")
};
// src/hooks/useCurrentSession.ts
function useCurrentSession() {
return useSessionStore((state) => state.currentSession);
}
// src/hooks/wallet/useCurrentAddress.ts
function useCurrentAddress() {
return useWalletStore((state) => state.currentAddress);
}
// src/hooks/wallet/useCurrentWallet.ts
function useCurrentWallet() {
const currentWallet = useWalletStore((state) => state.currentWallet);
const connectionStatus3 = useWalletStore((state) => state.connectionStatus);
switch (connectionStatus3) {
case "connecting":
return {
status: connectionStatus3,
wallet: currentWallet,
isDisconnected: false,
isConnecting: true,
isConnected: false
};
case "disconnected":
return {
status: connectionStatus3,
wallet: currentWallet,
isDisconnected: true,
isConnecting: false,
isConnected: false
};
case "connected": {
return {
status: connectionStatus3,
wallet: currentWallet,
isDisconnected: false,
isConnecting: false,
isConnected: true
};
}
}
}
// src/hooks/wallet/useWallets.ts
function useWallets() {
return useWalletStore((state) => state.wallets);
}
// src/hooks/useSessions.ts
function useSessions() {
return useSessionStore(
(state) => state.sessions.sort((a, b) => b.getCreateTime() - a.getCreateTime())
);
}
// src/hooks/useRemoveSession.ts
var import_react_query = require("@tanstack/react-query");
function useRemoveSession({
mutationKey,
...mutationOptions
} = {}) {
const sessionsKeys = useSessions();
const removeSession = useSessionStore((state) => state.removeSession);
const setCurrentSession = useSessionStore((state) => state.setCurrentSession);
const currentSession = useCurrentSession();
const client = useRoochClient();
return (0, import_react_query.useMutation)({
mutationKey: roochMutationKeys.removeSession(mutationKey),
mutationFn: async (args) => {
try {
if (!currentSession) {
return;
}
const result = await client.removeSession({
authKey: args.authKey,
signer: currentSession
});
if (result) {
let cacheSession = sessionsKeys.find(
(item) => item.getAuthKey() === args.authKey
);
if (cacheSession) {
removeSession(cacheSession);
if (cacheSession.getAuthKey() === currentSession?.getAuthKey()) {
const substitute = sessionsKeys.filter((item) => item.getAuthKey() !== cacheSession.getAuthKey()).sort((a, b) => b.getCreateTime() - a.getCreateTime()).filter((item) => !item.isSessionExpired());
if (substitute.length > 0) {
setCurrentSession(substitute[0]);
} else {
setCurrentSession(void 0);
}
}
}
}
} catch (e) {
throw e;
}
},
...mutationOptions
});
}
// src/hooks/useCreateSession.ts
var import_react_query2 = require("@tanstack/react-query");
// src/error/walletErrors.ts
var WalletNotConnectedError = class extends Error {
};
// src/hooks/useCreateSession.ts
function useCreateSessionKey({
mutationKey,
...mutationOptions
} = {}) {
const client = useRoochClient();
const { wallet } = useCurrentWallet();
const setCurrentSession = useSessionStore((state) => state.setCurrentSession);
const triggerError = useTriggerError();
return (0, import_react_query2.useMutation)({
mutationKey: walletMutationKeys.createSessionKey(mutationKey),
mutationFn: async (args) => {
const signer = args.signer || wallet;
if (!signer) {
throw new WalletNotConnectedError("No wallet is connected.");
}
try {
const sessionAccount = await client.createSession({
signer,
sessionArgs: args
});
setCurrentSession(sessionAccount);
return sessionAccount;
} catch (error) {
if ("code" in error && "message" in error) {
triggerError(error);
}
throw error;
}
},
...mutationOptions
});
}
// src/provider/walletProvider.tsx
var import_jsx_runtime15 = require("react/jsx-runtime");
var WalletContext = (0, import_react10.createContext)(null);
// src/hooks/wallet/useWalletStore.ts
function useWalletStore(selector) {
const store = (0, import_react11.useContext)(WalletContext);
if (!store) {
throw new Error("Could not find WalletContext. Ensure that you have set up the WalletProvider.");
}
return (0, import_zustand2.useStore)(store, selector);
}
// src/hooks/wallet/useConnectWallet.ts
function useConnectWallet({
mutationKey,
...mutationOptions
} = {}) {
const sessions = useSessions();
const setCurrentSession = useSessionStore((state) => state.setCurrentSession);
const setWalletConnected = useWalletStore((state) => state.setWalletConnected);
const setWalletDisconnected = useWalletStore((state) => state.setWalletDisconnected);
const setConnectionStatus = useWalletStore((state) => state.setConnectionStatus);
const triggerError = useTriggerError();
return (0, import_react_query3.useMutation)({
mutationKey: walletMutationKeys.connectWallet(mutationKey),
mutationFn: async ({ wallet }) => {
try {
setConnectionStatus("connecting");
const connectAddress = await wallet.connect();
const selectedAddress = connectAddress[0];
setWalletConnected(wallet, connectAddress, selectedAddress);
const cur = sessions.find(
(item) => item.getRoochAddress().toStr() === selectedAddress?.genRoochAddress().toStr()
);
setCurrentSession(cur);
return connectAddress;
} catch (error) {
setWalletDisconnected();
if ("code" in error && "message" in error) {
triggerError(error);
}
throw error;
}
},
...mutationOptions
});
}
// src/components/ui/Modal.tsx
var import_react14 = require("react");
var Dialog = __toESM(require("@radix-ui/react-dialog"), 1);
// src/components/ui/Modal.css.ts
var closeButtonContainer = "Modal_closeButtonContainer__1c5z17f2";
var content2 = "Modal_content__1c5z17f1";
var overlay = "Modal_overlay__1c5z17f0";
// src/components/styling/StyleMarker.tsx
var import_react_slot5 = require("@radix-ui/react-slot");
var import_react12 = require("react");
var import_jsx_runtime16 = require("react/jsx-runtime");
var StyleMarker = (0, import_react12.forwardRef)(({ children, ...props }, forwardedRef) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_slot5.Slot, { ref: forwardedRef, ...props, ...styleDataAttribute, children }));
StyleMarker.displayName = "StyleMarker";
// src/components/ProgressProvider.tsx
var import_react13 = require("react");
// src/components/fauct-modal/views/FaucetView.css.ts
var container8 = "FaucetView_container__1ff62y00";
var content3 = "FaucetView_content__1ff62y01";
var createButtonContainer = "FaucetView_createButtonContainer__1ff62y02";
var progressBar = "FaucetView_progressBar__1ff62y03";
// src/components/ui/Progress.tsx
var import_jsx_runtime17 = require("react/jsx-runtime");
function Progress() {
const { progress } = useProgress();
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: progressBar, style: { width: `${progress}%` } });
}
// src/components/ProgressProvider.tsx
var import_jsx_runtime18 = require("react/jsx-runtime");
var ProgressProviderContext = (0, import_react13.createContext)(null);
var ProgressProvider = ({ children }) => {
const [progress, setProgress] = (0, import_react13.useState)(0);
const [loading, setLoading] = (0, import_react13.useState)(false);
const start = (0, import_react13.useCallback)(() => {
setLoading(true);
setProgress(0);
const interval = setInterval(() => {
setProgress((prev) => {
const nextProgress = prev + 10;
if (nextProgress >= 70) {
clearInterval(interval);
}
return Math.min(nextProgress, 70);
});
}, 100);
}, []);
const finish = (0, import_react13.useCallback)((callback) => {
const interval = setInterval(() => {
setProgress((prev) => {
const nextProgress = prev + 5;
if (nextProgress >= 100) {
clearInterval(interval);
setTimeout(() => {
setLoading(false);
if (callback) {
callback();
}
}, 300);
}
return Math.min(nextProgress, 100);
});
}, 50);
}, []);
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(ProgressProviderContext.Provider, { value: { loading, progress, start, finish }, children: [
children,
loading && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Progress, {})
] });
};
var useProgress = () => {
const ctx = (0, import_react13.useContext)(ProgressProviderContext);
if (!ctx) {
throw new Error("useSubscribeToError must be used within a GlobalProvider");
}
return ctx;
};
// src/components/icons/CloseIcon.tsx
var import_jsx_runtime19 = require("react/jsx-runtime");
function CloseIcon(props) {
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("svg", { width: 10, height: 10, fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
"path",
{
d: "M9.708.292a.999.999 0 0 0-1.413 0l-3.289 3.29L1.717.291A.999.999 0 0 0 .305 1.705l3.289 3.289-3.29 3.289a.999.999 0 1 0 1.413 1.412l3.29-3.289 3.288 3.29a.999.999 0 0 0 1.413-1.413l-3.29-3.29 3.29-3.288a.999.999 0 0 0 0-1.413Z",
fill: "currentColor"
}
) });
}
// src/components/ui/Modal.tsx
var import_jsx_runtime20 = require("react/jsx-runtime");
function Modal({ trigger, children, open, defaultOpen, onOpenChange }) {
const [isModalOpen, setModalOpen] = (0, import_react14.useState)(open ?? defaultOpen);
const handleOpenChange = (open2) => {
setModalOpen(open2);
onOpenChange?.(open2);
};
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(Dialog.Root, { open: open ?? isModalOpen, onOpenChange: handleOpenChange, children: [
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Dialog.Trigger, { asChild: true, children: trigger }),
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Dialog.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(StyleMarker, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Dialog.Overlay, { className: overlay, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(Dialog.Content, { className: content2, "aria-describedby": void 0, children: [
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ProgressProvider, { children }),
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Dialog.Close, { className: closeButtonContainer, asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(IconButton, { type: "button", "aria-label": "Close", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(CloseIcon, {}) }) })
] }) }) }) })
] });
}
// src/components/switch-network-modal/views/SwitchNetworkView.css.ts
var connectionStatus2 = "SwitchNetworkView_connectionStatus__e4ayqy3";
var container9 = "SwitchNetworkView_container__e4ayqy0";
var retryButtonContainer2 = "SwitchNetworkView_retryButtonContainer__e4ayqy4";
var title4 = "SwitchNetworkView_title__e4ayqy2";
var walletIcon4 = "SwitchNetworkView_walletIcon__e4ayqy1";
// src/components/switch-network-modal/views/SwitchNetworkView.tsx
var import_react15 = require("react");
// src/components/util/wallet.ts
var NETWORK_MAP = {
mainnet: "livenet",
testnet: "testnet",
devnet: void 0,
localnet: void 0
};
var checkWalletNetwork = async (wallet, roochNetwork) => {
try {
const walletNetwork = await wallet.getNetwork();
const target = NETWORK_MAP[roochNetwork];
if (target && walletNetwork !== target) {
return target;
}
} catch (_) {
}
return void 0;
};
// src/components/switch-network-modal/views/SwitchNetworkView.tsx
var import_jsx_runtime21 = require("react/jsx-runtime");
function SwitchNetworkView({
wallet,
onSuccess,
targetNetWork,
switchNetwork
}) {
const { start, finish, loading } = useProgress();
const [error, setError] = (0, import_react15.useState)(false);
const [support, setSupport] = (0, import_react15.useState)(true);
const roochNetwork = useCurrentNetwork();
const switch2Network = () => {
start();
switchNetwork(wallet, targetNetWork).catch((e) => {
if ("message" in e && e.message.includes("not support")) {
setSupport(false);
}
setError(true);
}).finally(() => {
finish();
});
};
const refresh = () => {
start();
checkWalletNetwork(wallet, roochNetwork).then((result) => {
if (!result) {
onSuccess();
}
}).finally(() => finish());
};
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: container9, children: [
wallet.getName() && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
"img",
{
className: walletIcon4,
src: wallet.getIcon(),
alt: `${wallet.getName()} logo`
}
),
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: title4, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(Heading, { as: "h2", size: "xl", children: [
"Check ",
wallet.getName()
] }) }),
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: connectionStatus2, children: [
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Text, { color: "danger", children: !loading ? `${error ? "Switch failed" : `Wallet network is not ${targetNetWork}`}` : "being processed..." }),
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Text, { color: "muted", children: !loading ? `Please ${error ? "manually" : ""} switch the wallet network to ${targetNetWork}` : "" })
] }),
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: retryButtonContainer2, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
Button,
{
disabled: loading,
type: "button",
variant: "outline",
onClick: () => support ? switch2Network() : refresh(),
children: support ? error ? "Retry Switch" : "Switch" : "Refresh"
}
) })
] });
}
// src/components/connect-modal/ConnectModal.tsx
var import_jsx_runtime22 = require("react/jsx-runtime");
function ConnectModal({
trigger,
open,
defaultOpen,
onOpenChange,
onSuccess
}) {
const wallets = useWallets();
const { mutateAsync, isError } = useConnectWallet();
const roochNetwork = useCurrentNetwork();
const [isModalOpen, setModalOpen] = (0, import_react16.useState)(open ?? defaultOpen);
const [currentView, setCurrentView] = (0, import_react16.useState)();
const [targetNetwork, setTargetNetwork] = (0, import_react16.useState)();
const [selectedWallet, setSelectedWallet] = (0, import_react16.useState)();
const [walletStatus2, setWalletStatus] = (0, import_react16.useState)(/* @__PURE__ */ new Map());
const [isDetecting, setIsDetecting] = (0, import_react16.useState)(false);
(0, import_react16.useEffect)(() => {
setIsDetecting(true);
const checkWallets = async () => {
for (const item of wallets) {
const result = await item.checkInstalled();
setWalletStatus((prev) => {
const newS = new Map(prev);
newS.set(item.getName(), result);
return newS;
});
}
setIsDetecting(false);
};
checkWallets();
}, [wallets, setWalletStatus]);
const sortedWallet = (0, import_react16.useMemo)(() => {
return wallets.toSorted((a, b) => {
if (a.getName() === "Local") {
walletStatus2.set(a.getName(), true);
return -1;
}
return Number(walletStatus2.get(b.getName())) - Number(walletStatus2.get(a.getName()));
});
}, [wallets, walletStatus2]);
const resetSelection = () => {
setSelectedWallet(void 0);
setCurrentView(void 0);
};
const handleOpenChange = (open2) => {
if (!open2) {
resetSelection();
}
setModalOpen(open2);
onOpenChange?.(open2);
};
const switchNetwork = async (wallet, target) => {
wallet.switchNetwork(target).then(() => {
connectWallet(wallet);
});
};
const handleSelectedWallet = async (wallet) => {
if (wallet.getName() === "OneKey") {
connectWallet(wallet);
return;
}
const target = await checkWalletNetwork(wallet, roochNetwork);
if (target) {
setTargetNetwork(target);
setCurrentView("switch-network");
} else {
connectWallet(wallet);
}
};
const connectWallet = (wallet) => {
setCurrentView("connection-status");
mutateAsync({ wallet }).then(() => {
if (onSuccess) {
onSuccess();
}
handleOpenChange(false);
});
};
let modalContent;
switch (currentView) {
case "what-is-a-wallet":
modalContent = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(WhatIsAWallet, {});
break;
case "switch-network":
modalContent = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
SwitchNetworkView,
{
wallet: selectedWallet,
targetNetWork: targetNetwork,
switchNetwork,
onSuccess: () => connectWallet(selectedWallet)
}
);
break;
case "connection-status":
modalContent = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
ConnectionStatus,
{
selectedWallet,
hadConnectionError: isError,
info: (
// TODO: Better solutions are needed to deal with it
walletStatus2.get("OneKey") && walletStatus2.get("UniSat") && selectedWallet?.getName() === "UniSat" ? [
"If UniSat does not work!",
"Disable One Key Wallet, Refresh the page and try again."
] : void 0
),
onRetryConnection: connectWallet
}
);
break;
case "install-status":
modalContent = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(InstallStatus, { selectedWallet });
break;
default:
modalContent = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(WhatIsAWallet, {});
}
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
Modal,
{
trigger,
open: isModalOpen,
defaultOpen,
onOpenChange,
children: [
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
"div",
{
className: (0, import_clsx6.default)(walletListContainer, {
[walletListContainerWithViewSelected]: !!currentView
}),
children: [
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: walletListContent, children: [
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Dialog2.Title, { className: title, asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Heading, { as: "h2", children: "Connect a Wallet" }) }),
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
WalletList,
{
walletStatus: walletStatus2,
wallets: sortedWallet,
selectedWalletName: selectedWallet?.getName(),
isDetecting,
onSelect: (wallet) => {
if (selectedWallet?.getName() !== wallet.getName()) {
setSelectedWallet(wallet);
if (walletStatus2.get(wallet.getName())) {
handleSelectedWallet(wallet);
} else {
setCurrentView("install-status");
}
}
}
}
)
] }),
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
"button",
{
className: whatIsAWalletButton,
onClick: () => setCurrentView("what-is-a-wallet"),
type: "button",
children: "What is a Wallet?"
}
)
]
}
),
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
"div",
{
className: (0, import_clsx6.default)(viewContainer, {
[selectedViewContainer]: !!currentView
}),
children: [
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: backButtonContainer, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(IconButton, { type: "button", "aria-label": "Back", onClick: () => resetSelection(), children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(BackIcon, {}) }) }),
modalContent
]
}
)
]
}
);
}
// src/components/DropdownMenu.tsx
var import_clsx10 = __toESM(require("clsx"), 1);
var import_react26 = require("react");
var DropdownMenu = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
var import_rooch_sdk8 = require("@roochnetwork/rooch-sdk");
// src/components/DropdownMenu.css.ts
var addressContainer = "DropdownMenu_addressContainer__uignk48";
var connectedAddress = "DropdownMenu_connectedAddress__uignk40";
var menuContainer = "DropdownMenu_menuContainer__uignk41";
var menuContent = "DropdownMenu_menuContent__uignk42";
var menuItem = "DropdownMenu_menuItem__uignk43";
var menuItemText = "DropdownMenu_menuItemText__uignk44";
var progressBar2 = "DropdownMenu_progressBar__uignk47";
var rgasBalance = "DropdownMenu_rgasBalance__uignk49";
var switchMenuItem = "DropdownMenu_switchMenuItem__uignk45";
// src/components/icons/ChevronIcon.tsx
var import_jsx_runtime23 = require("react/jsx-runtime");
function ChevronIcon(props) {
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", width: 16, height: 16, fill: "none", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
"path",
{
stroke: "#A0B6C3",
strokeLinecap: "round",
strokeLinejoin: "round",
strokeWidth: 1.5,
d: "m4 6 4 4 4-4"
}
) });
}
// src/components/session-modal/SessionModal.tsx
var Dialog3 = __toESM(require("@radix-ui/react-dialog"), 1);
var import_clsx8 = __toESM(require("clsx"), 1);
var import_react19 = require("react");
// src/components/session-modal/SessionModal.css.ts
var backButtonContainer2 = "SessionModal_backButtonContainer__18jzcrv6";
var closeButtonContainer2 = "SessionModal_closeButtonContainer__18jzcrv7";
var content4 = "SessionModal_content__18jzcrv2";
var overlay2 = "SessionModal_overlay__18jzcrv0";
var selectedViewContainer2 = "SessionModal_selectedViewContainer__18jzcrv5";
var sessionListContainer = "SessionModal_sessionListContainer__18jzcrv9";
var sessionListContainerWithViewSelected = "SessionModal_sessionListContainerWithViewSelected__18jzcrva";
var sessionListContent = "SessionModal_sessionListContent__18jzcrv8";
var title5 = "SessionModal_title__18jzcrv1";
var viewContainer2 = "SessionModal_viewContainer__18jzcrv4";
var whatIsASessionButton = "SessionModal_whatIsASessionButton__18jzcrv3";
// src/components/session-modal/views/WhatIsASessionView.tsx
var import_react17 = require("react");
var import_rooch_sdk3 = require("@roochnetwork/rooch-sdk");
// src/components/session-modal/views/WhatIsASessionView.css.ts
var actionButtonContainer = "WhatIsASessionView_actionButtonContainer__9cleo57";
var createSessionContainer = "WhatIsASessionView_createSessionContainer__9cleo53";
var createSessionContent = "WhatIsASessionView_createSessionContent__9cleo54";
var createSessionScopeContent = "WhatIsASessionView_createSessionScopeContent__9cleo55";
var createSessionStatus = "WhatIsASessionView_createSessionStatus__9cleo56";
var moreInfo = "WhatIsASessionView_moreInfo__9cleo58";
var sessionItemContent = "WhatIsASessionView_sessionItemContent__9cleo59";
var whatContent = "WhatIsASessionView_whatContent__9cleo51";
var whatMoreContent = "WhatIsASessionView_whatMoreContent__9cleo52";
// src/utils/time.ts
var import_dayjs = __toESM(require("dayjs"), 1);
function getUTCOffset() {
const date = /* @__PURE__ */ new Date();
const offset = -date.getTimezoneOffset();
const hours = Math.floor(offset / 60);
const minutes = offset % 60;
return `UTC ${hours >= 0 ? "+" : "-"}${hours}:${minutes < 10 ? "0" : ""}${minutes}`;
}
var unix2str = (input) => {
const timestampInSeconds = input > 1e12 ? input / 1e3 : input;
return `${import_dayjs.default.unix(timestampInSeconds).format("MMM DD, YYYY HH:mm:ss")}`;
};
var second2Countdown = (input) => {
const days = Math.floor(input / (24 * 3600));
const hours = Math.floor(input % (24 * 3600) / 3600);
const minutes = Math.floor(input % 3600 / 60);
const secs = Math.floor(input % 60);
return `${days} : ${hours} : ${minutes} : ${secs}`;
};
// src/components/session-modal/views/WhatIsASessionView.tsx
var import_jsx_runtime24 = require("react/jsx-runtime");
function WhatIsASessionView({ getTitle }) {
const { start, finish } = useProgress();
const { mutateAsync, isError } = useCreateSessionKey();
const _sessionConf = useSessionStore((state) => state.sessionConf);
const [model, setModel] = (0, import_react17.useState)("what");
(0, import_react17.useEffect)(() => {
getTitle(model === "what" ? "What is a session" : "Create session");
}, [getTitle, model]);
const createSession = () => {
if (!_sessionConf) {
return;
}
setModel("create");
start();
mutateAsync({ ..._sessionConf }).finally(() => finish());
};
return model === "what" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: whatContent, children: [
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Heading, { as: "h2", children: "What is a Session" }),
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: whatContent, children: [
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { weight: "medium", color: "muted", children: "Rooch's Session Key is a temporary key that facilitates users to interact with the chain." }),
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { weight: "medium", color: "muted", children: "When interacting with Rooch applications, each application generates a session key. It has an expiration time and will become invalid if there is no interaction for a long time." }),
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: whatMoreContent, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { className: moreInfo, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
"a",
{
href: "https://rooch.network/learn/core-concepts/accounts/session-key",
target: "_blank",
rel: "noreferrer",
children: "More Info"
}
) }) })
] }),
_sessionConf && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: actionButtonContainer, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Button, { type: "button", variant: "outline", onClick: createSession, children: "Create" }) })
] }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: createSessionContainer, children: [
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Heading, { as: "h2", children: "Info" }),
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: createSessionContent, children: [
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Info, { name: "App name", value: _sessionConf.appName }),
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Info, { name: "App url", value: _sessionConf.appUrl }),
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
Info,
{
name: "Expiration Interval",
value: _sessionConf.maxInactiveInterval ? _sessionConf.maxInactiveInterval * 1e3 + Date.now() : 0
}
),
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: createSessionScopeContent, children: [
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Heading, { as: "h3", size: "sm", weight: "normal", children: "Scope" }),
_sessionConf.scopes.slice(0, 3).map(
(item) => typeof item === "string" ? item : `${item.address}::${item.module}::${item.function}`
).sort((a, b) => b.length - a.length).map((item) => {
const _tmp = item.split("::");
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { children: _tmp[0].length > 3 ? (0, import_rooch_sdk3.toShortStr)(item, {
start: 12,
end: 10 + _tmp[1].length + _tmp[2].length
}) : item }, item);
})
] }),
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: createSessionStatus, children: isError ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Text, { color: "danger", children: "Create failed" })