UNPKG

@roochnetwork/rooch-sdk-kit

Version:
415 lines (382 loc) 18 kB
"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/session-modal/views/WhatIsASessionView.tsx var WhatIsASessionView_exports = {}; __export(WhatIsASessionView_exports, { Info: () => Info, WhatIsASessionView: () => WhatIsASessionView }); module.exports = __toCommonJS(WhatIsASessionView_exports); var import_react12 = require("react"); var import_rooch_sdk3 = require("@roochnetwork/rooch-sdk"); // src/components/ui/Text.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/Text.css.ts var import_createRuntimeFn = require("@vanilla-extract/recipes/createRuntimeFn"); var textVariants = (0, import_createRuntimeFn.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_runtime = require("react/jsx-runtime"); var Text = (0, import_react.forwardRef)( ({ children, className, asChild = false, as: Tag = "div", size, weight, color, mono, ...textProps }, forwardedRef) => { return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_react_slot.Slot, { ...textProps, ref: forwardedRef, className: (0, import_clsx.default)(textVariants({ size, weight, color, mono }), className), children: asChild ? children : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Tag, { children }) } ); } ); Text.displayName = "Text"; // src/components/ui/Button.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/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_runtime2 = require("react/jsx-runtime"); var Button = (0, import_react2.forwardRef)( ({ className, variant, size, asChild = false, ...props }, forwardedRef) => { const Comp = asChild ? import_react_slot2.Slot : "button"; return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( Comp, { ...props, className: (0, import_clsx2.default)(buttonVariants({ variant, size }), className), ref: forwardedRef } ); } ); Button.displayName = "Button"; // src/components/ui/Heading.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/Heading.css.ts var import_createRuntimeFn3 = require("@vanilla-extract/recipes/createRuntimeFn"); var headingVariants = (0, import_createRuntimeFn3.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_runtime3 = require("react/jsx-runtime"); var Heading = (0, import_react3.forwardRef)( ({ children, className, asChild = false, as: Tag = "h1", size, weight, truncate, ...headingProps }, forwardedRef) => { return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)( import_react_slot3.Slot, { ...headingProps, ref: forwardedRef, className: (0, import_clsx3.default)(headingVariants({ size, weight, truncate }), className), children: asChild ? children : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Tag, { children }) } ); } ); Heading.displayName = "Heading"; // 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/components/ProgressProvider.tsx var import_react4 = require("react"); var import_jsx_runtime4 = require("react/jsx-runtime"); var ProgressProviderContext = (0, import_react4.createContext)(null); var useProgress = () => { const ctx = (0, import_react4.useContext)(ProgressProviderContext); if (!ctx) { throw new Error("useSubscribeToError must be used within a GlobalProvider"); } return ctx; }; // src/hooks/client/useRoochContext.ts var import_react11 = require("react"); // src/provider/clientProvider.tsx var import_react10 = require("react"); var import_rooch_sdk2 = require("@roochnetwork/rooch-sdk"); // src/hooks/useSessionsStore.ts var import_react9 = require("react"); var import_zustand2 = require("zustand"); // src/provider/roochProvider.tsx var import_react6 = require("react"); // src/provider/globalProvider.tsx var import_react5 = require("react"); var import_jsx_runtime5 = require("react/jsx-runtime"); var GlobalContext = (0, import_react5.createContext)(null); var useTriggerError = () => { const ctx = (0, import_react5.useContext)(GlobalContext); if (!ctx) { throw new Error("useTriggerError must be used within a GlobalProvider"); } return ctx.triggerError; }; // src/provider/roochProvider.tsx var import_jsx_runtime6 = require("react/jsx-runtime"); var RoochContext = (0, import_react6.createContext)(null); // src/provider/walletProvider.tsx var import_react8 = require("react"); var import_rooch_sdk = require("@roochnetwork/rooch-sdk"); // src/hooks/wallet/useWalletStore.ts var import_react7 = require("react"); var import_zustand = require("zustand"); function useWalletStore(selector) { const store = (0, import_react7.useContext)(WalletContext); if (!store) { throw new Error("Could not find WalletContext. Ensure that you have set up the WalletProvider."); } return (0, import_zustand.useStore)(store, selector); } // src/provider/walletProvider.tsx var import_jsx_runtime7 = require("react/jsx-runtime"); var WalletContext = (0, import_react8.createContext)(null); // src/hooks/useSessionsStore.ts function useSessionStore(selector) { const store = (0, import_react9.useContext)(RoochContext); if (!store) { throw new Error( "Could not find RoochSessionContext. Ensure that you have set up the RoochClientProvider." ); } return (0, import_zustand2.useStore)(store, selector); } // src/provider/clientProvider.tsx var import_jsx_runtime8 = require("react/jsx-runtime"); var ClientContext = (0, import_react10.createContext)(null); var DEFAULT_NETWORKS = { localnet: { url: (0, import_rooch_sdk2.getRoochNodeUrl)("localnet") } }; // src/hooks/client/useRoochContext.ts function useRoochContext() { const context = (0, import_react11.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/walletMutationKeys.ts function formMutationKeyFn(baseEntity) { return function mutationKeyFn(additionalKeys = []) { return [{ ...walletMutationKeys.all, baseEntity }, ...additionalKeys]; }; } var walletMutationKeys = { all: { baseScope: "wallet" }, connectWallet: formMutationKeyFn("connect-wallet"), autoConnectWallet: formMutationKeyFn("auto-connect-wallet"), switchAccount: formMutationKeyFn("switch-account"), createSessionKey: formMutationKeyFn("create-session-key") }; // src/hooks/wallet/useCurrentWallet.ts function useCurrentWallet() { const currentWallet = useWalletStore((state) => state.currentWallet); const connectionStatus = useWalletStore((state) => state.connectionStatus); switch (connectionStatus) { case "connecting": return { status: connectionStatus, wallet: currentWallet, isDisconnected: false, isConnecting: true, isConnected: false }; case "disconnected": return { status: connectionStatus, wallet: currentWallet, isDisconnected: true, isConnecting: false, isConnected: false }; case "connected": { return { status: connectionStatus, wallet: currentWallet, isDisconnected: false, isConnecting: false, isConnected: true }; } } } // src/hooks/useCreateSession.ts var import_react_query = 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_query.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/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")}`; }; // src/components/session-modal/views/WhatIsASessionView.tsx var import_jsx_runtime9 = 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_react12.useState)("what"); (0, import_react12.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_runtime9.jsxs)("div", { className: whatContent, children: [ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Heading, { as: "h2", children: "What is a Session" }), /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: whatContent, children: [ /* @__PURE__ */ (0, import_jsx_runtime9.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_runtime9.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_runtime9.jsx)("div", { className: whatMoreContent, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { className: moreInfo, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)( "a", { href: "https://rooch.network/learn/core-concepts/accounts/session-key", target: "_blank", rel: "noreferrer", children: "More Info" } ) }) }) ] }), _sessionConf && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: actionButtonContainer, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Button, { type: "button", variant: "outline", onClick: createSession, children: "Create" }) }) ] }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: createSessionContainer, children: [ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Heading, { as: "h2", children: "Info" }), /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: createSessionContent, children: [ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Info, { name: "App name", value: _sessionConf.appName }), /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Info, { name: "App url", value: _sessionConf.appUrl }), /* @__PURE__ */ (0, import_jsx_runtime9.jsx)( Info, { name: "Expiration Interval", value: _sessionConf.maxInactiveInterval ? _sessionConf.maxInactiveInterval * 1e3 + Date.now() : 0 } ), /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: createSessionScopeContent, children: [ /* @__PURE__ */ (0, import_jsx_runtime9.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_runtime9.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_runtime9.jsx)("div", { className: createSessionStatus, children: isError ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: "danger", children: "Create failed" }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: "muted", children: "Confirm sign in the wallet..." }) }), isError ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: actionButtonContainer, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Button, { type: "button", variant: "outline", onClick: createSession, children: "Retry Create" }) }) : null ] }) ] }); } function Info({ name, value }) { return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: sessionItemContent, children: [ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: "danger", style: { width: "130px" }, children: name }), /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: "muted", children: typeof value === "number" ? `${unix2str(value)} (${getUTCOffset()})` : value }) ] }); } //# sourceMappingURL=WhatIsASessionView.js.map