UNPKG

@roochnetwork/rooch-sdk-kit

Version:
178 lines (160 loc) 5.17 kB
// src/hooks/useCreateSession.ts import { useMutation } from "@tanstack/react-query"; // src/hooks/client/useRoochContext.ts import { useContext as useContext4 } from "react"; // src/provider/clientProvider.tsx import { createContext as createContext4, useMemo, useState } from "react"; import { getRoochNodeUrl, RoochClient } from "@roochnetwork/rooch-sdk"; // src/hooks/useSessionsStore.ts import { useContext as useContext3 } from "react"; import { useStore as useStore2 } from "zustand"; // src/provider/roochProvider.tsx import { createContext as createContext2, useRef } from "react"; // src/provider/globalProvider.tsx import { createContext, useContext } from "react"; import { jsx } from "react/jsx-runtime"; var GlobalContext = createContext(null); var useTriggerError = () => { const ctx = useContext(GlobalContext); if (!ctx) { throw new Error("useTriggerError must be used within a GlobalProvider"); } return ctx.triggerError; }; // src/provider/roochProvider.tsx import { jsx as jsx2, jsxs } from "react/jsx-runtime"; var RoochContext = createContext2(null); // src/provider/walletProvider.tsx import { useCallback, createContext as createContext3, useEffect, useRef as useRef2 } from "react"; import { BitcoinAddress } from "@roochnetwork/rooch-sdk"; // src/hooks/wallet/useWalletStore.ts import { useContext as useContext2 } from "react"; import { useStore } from "zustand"; function useWalletStore(selector) { const store = useContext2(WalletContext); if (!store) { throw new Error("Could not find WalletContext. Ensure that you have set up the WalletProvider."); } return useStore(store, selector); } // 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/provider/walletProvider.tsx import { jsx as jsx3 } from "react/jsx-runtime"; var WalletContext = createContext3(null); // src/hooks/useSessionsStore.ts function useSessionStore(selector) { const store = useContext3(RoochContext); if (!store) { throw new Error( "Could not find RoochSessionContext. Ensure that you have set up the RoochClientProvider." ); } return useStore2(store, selector); } // src/provider/clientProvider.tsx import { jsx as jsx4 } from "react/jsx-runtime"; var ClientContext = createContext4(null); var DEFAULT_NETWORKS = { localnet: { url: getRoochNodeUrl("localnet") } }; // src/hooks/client/useRoochContext.ts function useRoochContext() { const context = useContext4(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/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 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 }); } export { useCreateSessionKey }; //# sourceMappingURL=useCreateSession.js.map