UNPKG

@roochnetwork/rooch-sdk-kit

Version:
128 lines (120 loc) 3.66 kB
// src/provider/useDefaultClient.ts import { useCallback, useMemo } from "react"; import { ErrorValidateInvalidAccountAuthKey, ErrorValidateSessionIsExpired, isRoochClient, RoochClient } from "@roochnetwork/rooch-sdk"; // src/hooks/useSessionsStore.ts import { useContext as useContext2 } from "react"; import { useStore } 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; }; var useTriggerRequest = () => { const ctx = useContext(GlobalContext); if (!ctx) { throw new Error("useTriggerError must be used within a GlobalProvider"); } return ctx.triggerRequest; }; // src/provider/roochProvider.tsx import { jsx as jsx2, jsxs } from "react/jsx-runtime"; var RoochContext = createContext2(null); // src/hooks/useSessionsStore.ts function useSessionStore(selector) { const store = useContext2(RoochContext); if (!store) { throw new Error( "Could not find RoochSessionContext. Ensure that you have set up the RoochClientProvider." ); } return useStore(store, selector); } // src/http/httpTransport.ts import { RoochHTTPTransport } from "@roochnetwork/rooch-sdk"; var HTTPTransport = class extends RoochHTTPTransport { constructor(options, requestErrorCallback) { super(options); this.requestCallback = requestErrorCallback; } async request(input) { let result; try { if (input.method === "rooch_executeRawTransaction") { this.requestCallback("requesting"); } result = await super.request(input); if (input.method === "rooch_executeRawTransaction") { this.requestCallback("success"); } return result; } catch (e) { if ("code" in e) { this.requestCallback("error", { code: e.code, message: e.message }); } throw e; } } }; // src/provider/useDefaultClient.ts var DEFAULT_CREATE_CLIENT = (_name, config, requestErrorCallback) => { if (isRoochClient(config)) { return config; } config.transport = new HTTPTransport( { url: config.url.toString() }, requestErrorCallback ); return new RoochClient(config); }; function useDefaultClient(params) { const { currentNetwork, networks } = params; const currentSession = useSessionStore((state) => state.currentSession); const removeSession = useSessionStore((state) => state.removeSession); const triggerError = useTriggerError(); const triggerRequest = useTriggerRequest(); const _requestErrorCallback = useCallback( (state, error) => { try { if (state === "error") { if (error.code === ErrorValidateInvalidAccountAuthKey || error.code === ErrorValidateSessionIsExpired) { if (currentSession) { removeSession(currentSession); } } triggerError(error); } triggerRequest(state); } catch (e) { console.error(e); } }, [triggerError, currentSession, removeSession, triggerRequest] ); return useMemo(() => { return DEFAULT_CREATE_CLIENT(currentNetwork, networks[currentNetwork], _requestErrorCallback); }, [currentNetwork, networks, _requestErrorCallback]); } export { useDefaultClient }; //# sourceMappingURL=useDefaultClient.js.map