@gnosis-guild/enclave-react
Version:
React hooks and utilities for Enclave SDK
119 lines (118 loc) • 3.38 kB
JavaScript
// src/useEnclaveSDK.ts
import { useState, useEffect, useCallback, useRef } from "react";
import { useWalletClient, usePublicClient } from "wagmi";
import {
EnclaveSDK,
EnclaveEventType,
RegistryEventType,
SDKError
} from "@gnosis-guild/enclave-sdk";
var useEnclaveSDK = (config) => {
const [sdk, setSdk] = useState(null);
const [isInitialized, setIsInitialized] = useState(false);
const [error, setError] = useState(null);
const sdkRef = useRef(null);
const publicClient = usePublicClient();
const { data: walletClient } = useWalletClient();
const initializeSDK = useCallback(async () => {
try {
setError(null);
if (!publicClient) {
throw new Error("Public client not available");
}
if (sdk) {
sdk.cleanup();
}
const sdkConfig = {
publicClient,
walletClient,
contracts: config.contracts || {
enclave: "0x0000000000000000000000000000000000000000",
ciphernodeRegistry: "0x0000000000000000000000000000000000000000"
},
chainId: config.chainId
};
const newSdk = new EnclaveSDK(sdkConfig);
await newSdk.initialize();
setSdk(newSdk);
sdkRef.current = newSdk;
setIsInitialized(true);
} catch (err) {
const errorMessage = err instanceof SDKError ? `SDK Error (${err.code}): ${err.message}` : `Failed to initialize SDK: ${err}`;
setError(errorMessage);
console.error("SDK initialization failed:", err);
}
}, [publicClient, walletClient, config.contracts, config.chainId]);
useEffect(() => {
if (config.autoConnect && publicClient && !isInitialized) {
initializeSDK();
}
}, [config.autoConnect, publicClient, isInitialized, initializeSDK]);
useEffect(() => {
if (isInitialized && publicClient && walletClient) {
initializeSDK();
}
}, [walletClient, initializeSDK]);
useEffect(() => {
return () => {
if (sdkRef.current) {
sdkRef.current.cleanup();
}
};
}, []);
const requestE3 = useCallback(
(...args) => {
if (!sdk) throw new Error("SDK not initialized");
return sdk.requestE3(...args);
},
[sdk]
);
const activateE3 = useCallback(
(...args) => {
if (!sdk) throw new Error("SDK not initialized");
return sdk.activateE3(...args);
},
[sdk]
);
const publishInput = useCallback(
(...args) => {
if (!sdk) throw new Error("SDK not initialized");
return sdk.publishInput(...args);
},
[sdk]
);
const onEnclaveEvent = useCallback(
(eventType, callback) => {
if (!sdk) throw new Error("SDK not initialized");
return sdk.onEnclaveEvent(eventType, callback);
},
[sdk]
);
const off = useCallback(
(eventType, callback) => {
if (!sdk) throw new Error("SDK not initialized");
return sdk.off(eventType, callback);
},
[sdk]
);
return {
sdk,
isInitialized,
error,
requestE3,
activateE3,
publishInput,
onEnclaveEvent,
off,
EnclaveEventType,
RegistryEventType
};
};
// src/index.ts
import { EnclaveEventType as EnclaveEventType2, RegistryEventType as RegistryEventType2 } from "@gnosis-guild/enclave-sdk";
export {
EnclaveEventType2 as EnclaveEventType,
RegistryEventType2 as RegistryEventType,
useEnclaveSDK
};
//# sourceMappingURL=index.js.map