@roochnetwork/rooch-sdk-kit
Version:
Rooch SDK Kit
128 lines (120 loc) • 3.66 kB
JavaScript
// 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