From b343cbba12d09dda94e2a1a63d14f05876677695 Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Wed, 22 Sep 2021 15:03:31 +0200 Subject: [PATCH] Further optimize profile requests Signed-off-by: Alexis Sellier --- src/profile.ts | 33 ++++++++++++++++++++------------- src/utils.ts | 37 ++++++++++++++++++------------------- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/profile.ts b/src/profile.ts index 994a04295..edccf03bb 100644 --- a/src/profile.ts +++ b/src/profile.ts @@ -1,9 +1,9 @@ import type { EnsProfile } from "@app/base/registrations/registrar"; import type { BasicProfile } from "@ceramicstudio/idx-constants"; import { - formatCAIP10Address, formatIpfsFile, resolveEnsProfile, resolveIdxProfile, parseUsername, + isAddress, formatCAIP10Address, formatIpfsFile, resolveEnsProfile, resolveIdxProfile, parseUsername, } from "@app/utils"; -import type { Config } from "./config"; +import type { Config } from "@app/config"; export interface IProfile { address: string; @@ -99,20 +99,27 @@ export class Profile { profileType: ProfileType, config: Config ): Promise { - const address = await config.provider.resolveName(addressOrName); - const profile: IProfile = { address, ens: null, idx: null }; + const ens = await resolveEnsProfile(addressOrName, profileType, config); - try { - profile.ens = await resolveEnsProfile(addressOrName, profileType, config); - - if (! profile.ens) { - profile.idx = await resolveIdxProfile(formatCAIP10Address(address, "eip155", config.network.chainId), config); + if (ens) { + if (ens.address) { + return { address: ens.address, ens, idx: null }; } - } catch (error) { - console.error(error); - } + throw new Error(`No address set for ${addressOrName}`); - return profile; + } else if (isAddress(addressOrName)) { + const address = addressOrName; + + try { + const idx = await resolveIdxProfile( + formatCAIP10Address(address, "eip155", config.network.chainId), config + ); + return { address, ens: null, idx }; + } catch { + return { address, ens: null, idx: null }; + } + } + throw new Error(`Name ${addressOrName} was not found`); } static async getMulti(addresses: string[], config: Config): Promise { diff --git a/src/utils.ts b/src/utils.ts index 77f89b536..d277f41de 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -270,38 +270,37 @@ export async function resolveEnsProfile(addressOrName: string, profileType: Prof if (registration) { return registration.profile; } - } else if (profileType === ProfileType.Project) { - const project = await Promise.allSettled([ + } else { + const promises = [ getAvatar(name, config, resolver), - getSeed(name, config, resolver) - ]); + ]; - const [avatar, seedHost] = + if (addressOrName === name) { + promises.push(resolver.getAddress()); + } else { + promises.push(Promise.resolve(addressOrName)); + } + + if (profileType === ProfileType.Project) { + promises.push(getSeed(name, config, resolver)); + } else if (profileType === ProfileType.Minimal) { + promises.push(Promise.resolve(null)); + } + + const project = await Promise.allSettled(promises); + const [avatar, address, seedHost] = project.map(r => r.status == "fulfilled" ? r.value : null); return { name, avatar, - address: null, + address, seedHost, url: null, seedId: null, twitter: null, github: null, }; - } else if (profileType === ProfileType.Minimal) { - const avatar = await getAvatar(name, config, resolver); - - return { - name, - avatar, - address: null, - url: null, - seedId: null, - seedHost: null, - twitter: null, - github: null, - }; } } return null;