client.ts 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
  2. import { createSolanaClient, type SolanaClient } from "gill";
  3. import { GILL_HOOK_CLIENT_KEY } from "../const.js";
  4. /**
  5. * Get the current Solana client (including `rpc` and `rpcSubscriptions`)
  6. */
  7. export function useSolanaClient(): SolanaClient {
  8. const { data: config } = useQuery<SolanaClient>({
  9. // fallback data should not be reached if used within `SolanaProvider`
  10. // since we set the initial value. but just in case => devnet
  11. initialData: createSolanaClient({
  12. urlOrMoniker: "devnet",
  13. }),
  14. queryKey: [GILL_HOOK_CLIENT_KEY],
  15. staleTime: Infinity,
  16. });
  17. return config;
  18. }
  19. /**
  20. * Update your Solana client (including `rpc` and `rpcSubscriptions`)
  21. */
  22. export function useUpdateSolanaClient() {
  23. const queryClient = useQueryClient();
  24. return useMutation({
  25. mutationFn: async (newClient: SolanaClient): Promise<void> => {
  26. queryClient.setQueryData([GILL_HOOK_CLIENT_KEY], newClient);
  27. return await Promise.resolve();
  28. },
  29. });
  30. }