@@ -15,6 +15,7 @@ import { getAddress, isAddress } from "../../utils/memoizedEthersUtils";
1515import { useAccount } from "../../hooks/useAccount" ;
1616import { useAppDispatch } from "../redux/store" ;
1717import { impersonated } from "./impersonation.slice" ;
18+ import { useReverseResolveQuery } from "../whois/whoisApi.slice" ;
1819
1920interface ImpersonationContextValue {
2021 isImpersonated : boolean ;
@@ -34,6 +35,14 @@ export const ImpersonationProvider: FC<PropsWithChildren> = ({ children }) => {
3435 string | undefined
3536 > ( ) ;
3637
38+ // Resolve ENS/handle names from view param via whois API
39+ const viewParam = isString ( router . query . view ) ? router . query . view : undefined ;
40+ const isViewParamName = ! ! viewParam && ! isAddress ( viewParam ) ;
41+ const { data : resolvedName } = useReverseResolveQuery (
42+ isViewParamName ? viewParam : "" ,
43+ { skip : ! isViewParamName || ! router . isReady }
44+ ) ;
45+
3746 const removeImpersonatedAddressQueryParam = useCallback ( ( ) => {
3847 const { view : viewAddressQueryParam , ...queryWithoutParam } = router . query ;
3948
@@ -106,6 +115,13 @@ export const ImpersonationProvider: FC<PropsWithChildren> = ({ children }) => {
106115 }
107116 } , [ router . isReady ] ) ;
108117
118+ // Resolve ENS/handle name from view param and impersonate
119+ useEffect ( ( ) => {
120+ if ( ! impersonatedAddress && resolvedName ?. address ) {
121+ impersonate ( resolvedName . address ) ;
122+ }
123+ } , [ resolvedName , impersonatedAddress , impersonate ] ) ;
124+
109125 // Actively keep impersonated address in query string
110126 useEffect ( ( ) => {
111127 const { view : viewAddressQueryParam } = router . query ;
0 commit comments