Radish alpha
r
Radicle web interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
Further optimize profile requests
Alexis Sellier committed 4 years ago
commit b343cbba12d09dda94e2a1a63d14f05876677695
parent 0f124e83c1f2b3f5fc9f9c77cb4a2a6cde3df299
2 files changed +38 -32
modified 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<IProfile> {
-
    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 };
+
      }
+
      throw new Error(`No address set for ${addressOrName}`);
+

+
    } 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 };
      }
-
    } catch (error) {
-
      console.error(error);
    }
-

-
    return profile;
+
    throw new Error(`Name ${addressOrName} was not found`);
  }

  static async getMulti(addresses: string[], config: Config): Promise<Profile[]> {
modified 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;