Skip to content

Commit

Permalink
fix(provider): fixed onchain error and blank client error on retry pr…
Browse files Browse the repository at this point in the history
…ovider process (#848)

* fix(provider): get onchain information from indexer api instead of onchain call from backend

* fix(provider): fixed activestep on wallet import being set to true causing issue
  • Loading branch information
jigar-arc10 authored Feb 14, 2025
1 parent 75377c2 commit c354e77
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 81 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export const ActivityLogDetails: React.FC<{ actionId: string | null }> = ({ acti
const response = await restClient.get<StaticLogsResponse, StaticLogsResponse>(`/tasks/logs/archive/${taskId}`);
setTaskLogs(prev => ({
...prev,
[taskId]: response.logs.map((log: StaticLog) => `${log.type === "stderr" ? "[ERROR] " : ""}${log.message}`).join("\n")
[taskId]: response.logs.map((log: StaticLog) => `${log.message}`).join("\n")
}));
} finally {
setLoadingLogs(prev => ({ ...prev, [taskId]: false }));
Expand All @@ -79,7 +79,7 @@ export const ActivityLogDetails: React.FC<{ actionId: string | null }> = ({ acti
eventSource.onmessage = event => {
try {
const logData = JSON.parse(event.data);
const formattedMessage = `${logData.type === "stderr" ? "[ERROR] " : ""}${logData.message}`;
const formattedMessage = `${logData.message}`;

setTaskLogs(prev => ({
...prev,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
"use client";
import React from "react";
import { useQuery } from "react-query";
import React, { useEffect } from "react";

import { getSelectedNetwork } from "@src/hooks/useSelectedNetwork";
import { useProviderDashboard, useProviderDetails } from "@src/queries/useProviderQuery";
import { ProviderDashoard, ProviderDetails } from "@src/types/provider";
import consoleClient from "@src/utils/consoleClient";
import restClient from "@src/utils/restClient";
import { useWallet } from "../WalletProvider";

type ContextType = {
Expand All @@ -16,45 +17,44 @@ type ContextType = {
const ProviderContext = React.createContext<ContextType>({} as ContextType);

export const ProviderContextProvider = ({ children }) => {
const { address } = useWallet();
const { address, isProviderStatusFetched, setIsWalletProvider, setIsProviderStatusFetched, setIsProviderOnlineStatusFetched, setIsWalletProviderOnline } =
useWallet();
const selectedNetwork = getSelectedNetwork();

const { data: providerDetails, isLoading: isLoadingProviderDetails } = useQuery<ProviderDetails | null>(
["providerDetails", address],
async () => {
try {
return await consoleClient.get<ProviderDetails, ProviderDetails>(`/v1/providers/${address}`);
} catch (error) {
if (error.response?.status === 404) {
return null; // Return null for non-existent providers
}
throw error;
}
},
{
refetchOnWindowFocus: false,
retry: 3,
enabled: !!address
}
);
const { data: providerDetails, isLoading: isLoadingProviderDetails } = useProviderDetails(address);
const { data: providerDashboard, isLoading: isLoadingProviderDashboard } = useProviderDashboard(address);

const { data: providerDashboard, isLoading: isLoadingProviderDashboard } = useQuery<ProviderDashoard | null>(
["providerDashboard", address],
async () => {
try {
return await consoleClient.get(`/internal/provider-dashboard/${address}`);
} catch (error) {
if (error.response?.status === 404) {
return null; // Return null for non-existent dashboard data
useEffect(() => {
const checkProviderStatus = async () => {
if (providerDetails) {
setIsWalletProvider(true);
setIsProviderStatusFetched(true);
try {
const isOnlineResponse: { online: boolean } = await restClient.get(`/provider/status/online?chainid=${selectedNetwork.chainId}`);
setIsProviderOnlineStatusFetched(true);
setIsWalletProviderOnline(isOnlineResponse.online);
} catch (error) {
console.error("Error fetching provider online status:", error);
} finally {
setIsProviderOnlineStatusFetched(true);
}
throw error; // Re-throw other errors
} else {
setIsWalletProvider(false);
setIsWalletProviderOnline(false);
setIsProviderOnlineStatusFetched(true);
setIsProviderStatusFetched(true);
}
},
{
refetchOnWindowFocus: false,
retry: 3,
enabled: !!address
}
);
};
checkProviderStatus();
}, [
providerDetails,
selectedNetwork.chainId,
isProviderStatusFetched,
setIsWalletProvider,
setIsProviderStatusFetched,
setIsProviderOnlineStatusFetched,
setIsWalletProviderOnline
]);

return (
<ProviderContext.Provider
Expand Down
51 changes: 10 additions & 41 deletions apps/provider-console/src/context/WalletProvider/WalletProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,9 @@ import { SnackbarKey, useSnackbar } from "notistack";
import { TransactionModal } from "@src/components/layout/TransactionModal";
import { browserEnvConfig } from "@src/config/browser-env.config";
import { useUsdcDenom } from "@src/hooks/useDenom";
import { useSelectedNetwork } from "@src/hooks/useSelectedNetwork";
import { getSelectedNetwork } from "@src/hooks/useSelectedNetwork";
import authClient from "@src/utils/authClient";
import { uAktDenom } from "@src/utils/constants";
import restClient from "@src/utils/restClient";
import { checkAndRefreshToken } from "@src/utils/tokenUtils";
import { UrlService } from "@src/utils/urlUtils";
import { LocalWalletDataType } from "@src/utils/walletUtils";
import { getNonceMessage } from "@src/utils/walletUtils";
Expand All @@ -43,10 +40,13 @@ type ContextType = {
refreshBalances: (address?: string) => Promise<Balances>;
isProvider: boolean;
isOnline: boolean;
provider: any;
isProviderStatusFetched: boolean;
isProviderOnlineStatusFetched: boolean;
handleArbitrarySigning: () => Promise<void>;
setIsWalletProvider: React.Dispatch<React.SetStateAction<boolean>>;
setIsProviderStatusFetched: React.Dispatch<React.SetStateAction<boolean>>;
setIsProviderOnlineStatusFetched: React.Dispatch<React.SetStateAction<boolean>>;
setIsWalletProviderOnline: React.Dispatch<React.SetStateAction<boolean>>;
};

const WalletProviderContext = React.createContext<ContextType>({} as ContextType);
Expand All @@ -57,7 +57,6 @@ export const WalletProvider = ({ children }) => {
const [isWalletProvider, setIsWalletProvider] = useState<boolean>(false);
const [isWalletProviderOnline, setIsWalletProviderOnline] = useState<boolean>(false);
const [isProviderOnlineStatusFetched, setIsProviderOnlineStatusFetched] = useState<boolean>(false);
const [provider, setProvider] = useState<any>(null);
const [isProviderStatusFetched, setIsProviderStatusFetched] = useState<boolean>(false);
const [isBroadcastingTx, setIsBroadcastingTx] = useState<boolean>(false);
const [isWaitingForApproval, setIsWaitingForApproval] = useState<boolean>(false);
Expand All @@ -79,7 +78,7 @@ export const WalletProvider = ({ children }) => {
signArbitrary
} = useSelectedChain();
const { addEndpoints } = useManager();
const selectedNetwork = useSelectedNetwork();

useEffect(() => {
if (!browserEnvConfig.NEXT_PUBLIC_MAINNET_API_URL || !browserEnvConfig.NEXT_PUBLIC_MAINNET_RPC_URL) return;

Expand Down Expand Up @@ -118,38 +117,6 @@ export const WalletProvider = ({ children }) => {
router.push(UrlService.home());
}, [disconnect, router]);

useEffect(() => {
async function fetchProviderStatus() {
try {
const isProviderResponse: any = await restClient.get(`/provider/status/onchain?chainid=${selectedNetwork.chainId}`);
setIsWalletProvider(isProviderResponse.provider ? true : false);
setProvider(isProviderResponse.provider);
setIsProviderStatusFetched(true);
if (isProviderResponse.provider) {
const isOnlineResponse: any = await restClient.get(`/provider/status/online?chainid=${selectedNetwork.chainId}`);
setIsProviderOnlineStatusFetched(true);
setIsWalletProviderOnline(isOnlineResponse.online);
}
} catch (error) {
console.error("Error fetching provider status:", error);
}
}

(async () => {
if (browserEnvConfig.NEXT_PUBLIC_MAINNET_RPC_URL && isWalletConnected) {
// sigingClient.current = await createStargateClient();
try {
const validAccessToken = await checkAndRefreshToken();
if (validAccessToken) {
await fetchProviderStatus();
}
} catch (error) {
logout();
}
}
})();
}, [isWalletConnected, isWalletArbitrarySigned, selectedNetwork.chainId]);

async function getStargateClient() {
if (!sigingClient.current) {
sigingClient.current = await createStargateClient();
Expand All @@ -165,7 +132,6 @@ export const WalletProvider = ({ children }) => {
setIsProviderOnlineStatusFetched(false);
setIsWalletProvider(false);
setIsWalletProviderOnline(false);
setProvider(null);
}

async function connectWallet() {
Expand Down Expand Up @@ -375,10 +341,13 @@ export const WalletProvider = ({ children }) => {
refreshBalances,
isProvider: isWalletProvider,
isOnline: isWalletProviderOnline,
provider: provider,
isProviderStatusFetched,
isProviderOnlineStatusFetched,
handleArbitrarySigning
handleArbitrarySigning,
setIsWalletProvider,
setIsProviderStatusFetched,
setIsProviderOnlineStatusFetched,
setIsWalletProviderOnline
}}
>
{children}
Expand Down
5 changes: 5 additions & 0 deletions apps/provider-console/src/pages/become-provider/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ const BecomeProvider: React.FC = () => {
}, [providerProcess.process, providerSteps]);

const handleStepComplete = useCallback(() => {
// Skip processing for wallet import step
if (providerSteps[activeStep].key === "walletImport") {
return;
}

setProviderProcess(prev => ({
...prev,
process: {
Expand Down

0 comments on commit c354e77

Please sign in to comment.