From f3e7c7f72d031d961229c64c163f6a7f4796d0e9 Mon Sep 17 00:00:00 2001 From: Satyajeet Kolhapure Date: Tue, 23 Jul 2024 19:37:23 +0100 Subject: [PATCH] feat(explorer): New Issuer page --- explorer/package.json | 2 +- .../src/constants/columns/attestation.tsx | 1 + explorer/src/constants/columns/schema.tsx | 1 + explorer/src/enums/queryParams.ts | 1 + explorer/src/pages/Attestations/index.tsx | 8 +- explorer/src/pages/Home/data.tsx | 218 ++++++++++++++++++ explorer/src/pages/Home/interface.ts | 10 + .../Issuer/components/Attestations/index.tsx | 48 ++++ .../components/Attestations/interface.ts | 5 + .../pages/Issuer/components/Banner/index.tsx | 41 ++-- .../Issuer/components/Banner/interface.ts | 1 + .../Issuer/components/Description/index.tsx | 14 +- .../components/Description/interface.ts | 1 - .../pages/Issuer/components/Portals/index.tsx | 88 +++---- .../pages/Issuer/components/Schemas/index.tsx | 57 +++++ .../Issuer/components/Schemas/interface.ts | 6 + explorer/src/pages/Issuer/index.tsx | 13 +- explorer/src/utils/amountUtils.ts | 10 + pnpm-lock.yaml | 178 +------------- 19 files changed, 448 insertions(+), 255 deletions(-) create mode 100644 explorer/src/pages/Issuer/components/Attestations/index.tsx create mode 100644 explorer/src/pages/Issuer/components/Attestations/interface.ts create mode 100644 explorer/src/pages/Issuer/components/Schemas/index.tsx create mode 100644 explorer/src/pages/Issuer/components/Schemas/interface.ts diff --git a/explorer/package.json b/explorer/package.json index 60029b4e..325c4ad2 100644 --- a/explorer/package.json +++ b/explorer/package.json @@ -26,7 +26,7 @@ "dependencies": { "@radix-ui/react-dropdown-menu": "^2.0.6", "@tanstack/react-table": "^8.10.7", - "@verax-attestation-registry/verax-sdk": "1.10.0", + "@verax-attestation-registry/verax-sdk": "1.11.0", "@wagmi/core": "^1.4.7", "abitype": "^0.10.3", "class-variance-authority": "^0.7.0", diff --git a/explorer/src/constants/columns/attestation.tsx b/explorer/src/constants/columns/attestation.tsx index 6fc4707b..48190a22 100644 --- a/explorer/src/constants/columns/attestation.tsx +++ b/explorer/src/constants/columns/attestation.tsx @@ -129,6 +129,7 @@ export const skeletonAttestations = (itemPerPage = ITEMS_PER_PAGE_DEFAULT): Arra version: 0, revoked: false, subject: EMPTY_STRING, + encodedSubject: EMPTY_STRING, attestationData: EMPTY_STRING, })), ); diff --git a/explorer/src/constants/columns/schema.tsx b/explorer/src/constants/columns/schema.tsx index c5930bf2..48b7884f 100644 --- a/explorer/src/constants/columns/schema.tsx +++ b/explorer/src/constants/columns/schema.tsx @@ -65,6 +65,7 @@ export const skeletonSchemas = (itemPerPage = ITEMS_PER_PAGE_DEFAULT): Array { network: { chain }, } = useNetworkContext(); + //TODO: implement counter logic for where clause. const { data: attestationsCount } = useSWR( `${SWRKeys.GET_ATTESTATION_COUNT}/${chain.id}`, () => sdk.attestation.getAttestationIdCounter() as Promise, @@ -34,6 +35,9 @@ export const Attestations: React.FC = () => { const page = pageBySearchParams(searchParams, totalItems); const sortByDateDirection = searchParams.get(EQueryParams.SORT_BY_DATE); const itemsPerPage = Number(searchParams.get(EQueryParams.ITEMS_PER_PAGE)) || ITEMS_PER_PAGE_DEFAULT; + const where = searchParams.get(EQueryParams.WHERE) + ? (JSON.parse(searchParams.get(EQueryParams.WHERE) ?? "") as Attestation_filter) + : undefined; const [skip, setSkip] = useState(getItemsByPage(page, itemsPerPage)); @@ -43,7 +47,7 @@ export const Attestations: React.FC = () => { sdk.attestation.findBy( itemsPerPage, skip, - undefined, + where, "attestedDate", (sortByDateDirection as OrderDirection) || ETableSorting.DESC, ), diff --git a/explorer/src/pages/Home/data.tsx b/explorer/src/pages/Home/data.tsx index 38c671c4..86b57c88 100644 --- a/explorer/src/pages/Home/data.tsx +++ b/explorer/src/pages/Home/data.tsx @@ -34,6 +34,64 @@ export const issuersData: IIssuer[] = [ "https://trustgo.trustalabs.ai/etrusta/0x085ed975a8b6b860de3c2b871da60a3f9f48a5b8/lineaverax/h?f=linea&chainId=324", CTATitle: "Go To Trusta Labs", address: "0x9e728394E55e6535BF66f913e911Ae1f572D8db0", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "Gitcoin Passport", @@ -44,6 +102,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://passport.gitcoin.co/#/dashboard/verax", CTATitle: "Get your passport", address: "0x96DB2c6D93A8a12089f7a6EdA5464e967308AdEd", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "PADO Labs", @@ -55,6 +123,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://www.padolabs.org/events", CTATitle: "Go to pado", address: "0xDB736B13E2f522dBE18B2015d0291E4b193D8eF6", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "zkPass", @@ -66,6 +144,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://verax.zkpass.org/verax", CTATitle: "Go To zkPass", address: "0x182085Ce8b0faDdc8503D9921dF6Af076281A6A9", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "Openid3", @@ -75,6 +163,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://auth.openid3.xyz", CTATitle: "Go to openid3", address: "0xdbCaf063873dC6be53c007Cf8f8447E303Cac8A3", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "Nomis", @@ -85,6 +183,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://nomis.cc/linea-voyage", CTATitle: "Go To Nomis", address: "0x8535156C75750d79ee0D9829c5D4Ae6f5D9DbCB5", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "Orange Protocol", @@ -95,6 +203,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://www.orangeprotocol.io/", CTATitle: "Go to orange", address: "0x3176383A7590D6B5c6F6268209f4c7FDeb7244Dc", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "0xScore", @@ -105,6 +223,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://0xscore.pro/linea-attestation", CTATitle: "Go To 0xScore", address: "0x04636DdD2feF7e9DB42a24821E489AD071749fEA", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "Aspecta", @@ -115,6 +243,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://aspecta.id/campaign/builders-voyage", CTATitle: "Go To Aspecta", address: "0x36933bd4288648d95a8275e663003ae7efd2199d", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "Automata Network", @@ -125,6 +263,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://pom.ata.network", CTATitle: "Go To Automata", address: "0x95d06B395F04dc1bBD0CE9fcC501D7044ea25DAd", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "Reclaim Protocol", @@ -135,6 +283,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://publish-credentials.reclaimprotocol.org/create-credential", CTATitle: "Go To Reclaim Protocol", address: "0xc15718EEC68DbCA02C4B4215B87beef46C3106d5", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "RubyScore", @@ -145,6 +303,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://rubyscore.io/attestation", CTATitle: "Go To RubyScore", address: "0xb9cc0bb020cf55197c4c3d826ac87cadba51f272", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "Zeronym by Holonym", @@ -155,6 +323,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://holonym.id/", CTATitle: "Go To Holonym", address: "0xdca2e9ae8423d7b0f94d7f9fc09e698a45f3c851", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "Hapi", @@ -165,6 +343,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://hapi.one", CTATitle: "Go To Hapi", address: "0x62773b3217e066a9a4ebd98db4360d89671453df", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "Okapi", @@ -176,6 +364,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://www.okapi.xyz", CTATitle: "Go To Okapi", address: "0xab3fa8a72eb66a128e8a84baa8c9578180806c6f", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "Index Network", @@ -187,6 +385,16 @@ export const issuersData: IIssuer[] = [ CTALink: "https://index.network/", CTATitle: "Go To Index Network", address: "0x0000000000000000000000000000000000000000", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, { name: "Privado ID", @@ -198,5 +406,15 @@ export const issuersData: IIssuer[] = [ CTALink: "https://www.privado.id/", CTATitle: "Go To Privado ID", address: "0x80203136fae3111b810106baa500231d4fd08fc6", + attestationDefinitions: [ + { + name: "OKX KYC", + logo: Trusta, + description: "Attest you have completed your KYC on OKX with a zero-knowledge proof", + portal: "0x3b30d7c4e5aa3d7da11431af23e8d1f7d25bb0b8", + schema: "0xc0980771b02c57e851f0ecca619d593de82dc84b25db9c9273bbf5b1537276ae", + url: "https://google.com", + }, + ], }, ]; diff --git a/explorer/src/pages/Home/interface.ts b/explorer/src/pages/Home/interface.ts index 04769790..d4e0d41e 100644 --- a/explorer/src/pages/Home/interface.ts +++ b/explorer/src/pages/Home/interface.ts @@ -9,4 +9,14 @@ export interface IIssuer { CTALink?: string; CTATitle: string; description: string; + attestationDefinitions: AttestationDefinition[]; +} + +export interface AttestationDefinition { + logo: React.FC>; + name: string; + description: string; + portal: Address; + schema: Address; + url: string; } diff --git a/explorer/src/pages/Issuer/components/Attestations/index.tsx b/explorer/src/pages/Issuer/components/Attestations/index.tsx new file mode 100644 index 00000000..0a4e658e --- /dev/null +++ b/explorer/src/pages/Issuer/components/Attestations/index.tsx @@ -0,0 +1,48 @@ +import { useLocation, useNavigate } from "react-router-dom"; +import useSWR from "swr"; + +import { SWRKeys } from "@/interfaces/swr/enum"; +import { useNetworkContext } from "@/providers/network-provider/context"; +import { APP_ROUTES, CHAIN_ID_ROUTE } from "@/routes/constants"; +import { formatNumber } from "@/utils/amountUtils"; + +import { IAttestationProps } from "./interface"; + +export const Attestations: React.FC = ({ address }) => { + const { + sdk, + network: { network }, + } = useNetworkContext(); + const navigate = useNavigate(); + const location = useLocation(); + + const { data: portals } = useSWR(`${SWRKeys.GET_PORTALS_BY_ISSUER}/${address}`, () => + sdk.portal.findBy(undefined, undefined, { ownerAddress: address }), + ); + + const attestationCounter = portals ? portals.reduce((total, portal) => total + portal.attestationCounter, 0) : 0; + + const handleAttestationCounterClick = () => { + const whereClauseJSON = { + portal_in: portals?.map((portal) => portal.id), + }; + const whereClause = `?where=${encodeURIComponent(JSON.stringify(whereClauseJSON))}`; + navigate(APP_ROUTES.ATTESTATIONS.replace(CHAIN_ID_ROUTE, network) + whereClause, { + state: { from: location.pathname }, + }); + }; + + return ( +
+
+ Attestations +
+ {formatNumber(attestationCounter)} +
+
+
+ ); +}; diff --git a/explorer/src/pages/Issuer/components/Attestations/interface.ts b/explorer/src/pages/Issuer/components/Attestations/interface.ts new file mode 100644 index 00000000..d2231420 --- /dev/null +++ b/explorer/src/pages/Issuer/components/Attestations/interface.ts @@ -0,0 +1,5 @@ +import { Address } from "viem"; + +export interface IAttestationProps { + address: Address; +} diff --git a/explorer/src/pages/Issuer/components/Banner/index.tsx b/explorer/src/pages/Issuer/components/Banner/index.tsx index f037de06..e98f8ad3 100644 --- a/explorer/src/pages/Issuer/components/Banner/index.tsx +++ b/explorer/src/pages/Issuer/components/Banner/index.tsx @@ -1,31 +1,38 @@ import { ArrowUpRight } from "lucide-react"; -import issuerBG from "@/assets/backgrounds/issuer-bg.jpeg"; import { Button } from "@/components/Buttons"; import { EButtonType } from "@/components/Buttons/enum"; +import { Chips } from "@/components/Chips"; import { IBannerProps } from "./interface"; -export const Banner: React.FC = ({ name, CTALink, CTATitle, logo }) => { +export const Banner: React.FC = ({ name, CTALink, CTATitle, logo, keywords }) => { const IssuerLogo = logo; - return ( -
- issuer background -
- -
- {name} +
+
+
+
+
+ +
+
{name}
+ {CTALink && ( +
+
+ {keywords.map((keyword) => ( + + ))}
- {CTALink && ( -
); }; diff --git a/explorer/src/pages/Issuer/components/Banner/interface.ts b/explorer/src/pages/Issuer/components/Banner/interface.ts index 08527188..df89a91c 100644 --- a/explorer/src/pages/Issuer/components/Banner/interface.ts +++ b/explorer/src/pages/Issuer/components/Banner/interface.ts @@ -3,4 +3,5 @@ export interface IBannerProps { logo: React.FC>; CTALink?: string; CTATitle: string; + keywords: string[]; } diff --git a/explorer/src/pages/Issuer/components/Description/index.tsx b/explorer/src/pages/Issuer/components/Description/index.tsx index 6c1a7bee..8409559a 100644 --- a/explorer/src/pages/Issuer/components/Description/index.tsx +++ b/explorer/src/pages/Issuer/components/Description/index.tsx @@ -1,15 +1,8 @@ -import { Chips } from "@/components/Chips"; - import { IDescriptionProps } from "./interface"; -export const Description: React.FC = ({ description, keywords }) => { +export const Description: React.FC = ({ description }) => { return ( -
-
- {keywords.map((keyword) => ( - - ))} -
+
{/* TODO: uncomment when data will be available */} {/*
@@ -21,7 +14,8 @@ export const Description: React.FC = ({ description, keywords
Schemas
*/} -
{description}
+
Info
+
{description}
); }; diff --git a/explorer/src/pages/Issuer/components/Description/interface.ts b/explorer/src/pages/Issuer/components/Description/interface.ts index 22b1b453..de070a7a 100644 --- a/explorer/src/pages/Issuer/components/Description/interface.ts +++ b/explorer/src/pages/Issuer/components/Description/interface.ts @@ -1,4 +1,3 @@ export interface IDescriptionProps { description: string; - keywords: string[]; } diff --git a/explorer/src/pages/Issuer/components/Portals/index.tsx b/explorer/src/pages/Issuer/components/Portals/index.tsx index 6977de55..a65ffe51 100644 --- a/explorer/src/pages/Issuer/components/Portals/index.tsx +++ b/explorer/src/pages/Issuer/components/Portals/index.tsx @@ -5,7 +5,6 @@ import useSWR from "swr"; import { Button } from "@/components/Buttons"; import { EButtonType } from "@/components/Buttons/enum"; -import { HelperIndicator } from "@/components/HelperIndicator"; import { SWRKeys } from "@/interfaces/swr/enum"; import { useNetworkContext } from "@/providers/network-provider/context"; import { CHAIN_ID_ROUTE, toPortalById } from "@/routes/constants"; @@ -27,55 +26,44 @@ export const Portals: React.FC = ({ address }) => { if (!portals) return null; return ( -
-
- {t("issuer.portals.title")} -
-
- {portals.map(({ ownerAddress, description, id, isRevocable, name }) => { - const additionalInfo = [ - { - title: t("common.id"), - value: id, - }, - { - title: t("issuer.portals.ownerAddress"), - value: ownerAddress, - }, - { - title: t("common.revocable"), - value: isRevocable ? t("common.yes") : t("common.no"), - }, - ]; - - return ( -
-
{name}
-
{description}
- {additionalInfo.map((info) => ( -
-
- {info.title} -
-
- {info.value} -
-
- ))} -
- ); - })} +
+
{t("issuer.portals.title")}
+
+ + + + + + + + + + {portals.map(({ id, name, description, attestationCounter }) => ( + + + + + + ))} + +
+ Name + + Description + + Attestations +
+ {description}{attestationCounter}
); diff --git a/explorer/src/pages/Issuer/components/Schemas/index.tsx b/explorer/src/pages/Issuer/components/Schemas/index.tsx new file mode 100644 index 00000000..84f9cd82 --- /dev/null +++ b/explorer/src/pages/Issuer/components/Schemas/index.tsx @@ -0,0 +1,57 @@ +import { ArrowRight, ArrowUpRight } from "lucide-react"; +import { useLocation, useNavigate } from "react-router-dom"; + +import { Button } from "@/components/Buttons"; +import { EButtonType } from "@/components/Buttons/enum"; +import { useNetworkContext } from "@/providers/network-provider/context"; +import { APP_ROUTES, CHAIN_ID_ROUTE } from "@/routes/constants"; + +import { ISchemasProps } from "./interface"; + +export const Schemas: React.FC = ({ issuerSchemas }) => { + const { + network: { network }, + } = useNetworkContext(); + const navigate = useNavigate(); + const location = useLocation(); + + if (issuerSchemas === undefined || issuerSchemas.length === 0) return null; + + const handleSeeAttestationsClick = (portal: string, schema: string) => { + const whereClauseJSON = { portal: portal, schemaId: schema }; + const whereClause = `?where=${encodeURIComponent(JSON.stringify(whereClauseJSON))}`; + navigate(APP_ROUTES.ATTESTATIONS.replace(CHAIN_ID_ROUTE, network) + whereClause, { + state: { from: location.pathname }, + }); + }; + + return ( +
+ {issuerSchemas.map((issuerSchema) => ( +
+
+ + {issuerSchema.name} +
+
{issuerSchema.description}
+
+
+
+ ))} +
+ ); +}; diff --git a/explorer/src/pages/Issuer/components/Schemas/interface.ts b/explorer/src/pages/Issuer/components/Schemas/interface.ts new file mode 100644 index 00000000..d02a564c --- /dev/null +++ b/explorer/src/pages/Issuer/components/Schemas/interface.ts @@ -0,0 +1,6 @@ +import { AttestationDefinition } from "@/pages/Home/interface"; + +export interface ISchemasProps { + issuerSchemas?: AttestationDefinition[]; + CTALink?: string; +} diff --git a/explorer/src/pages/Issuer/index.tsx b/explorer/src/pages/Issuer/index.tsx index 5e9b95e8..028bc6ae 100644 --- a/explorer/src/pages/Issuer/index.tsx +++ b/explorer/src/pages/Issuer/index.tsx @@ -2,9 +2,10 @@ import { useLocation, useNavigate, useParams } from "react-router-dom"; import { APP_ROUTES } from "@/routes/constants"; +import { Attestations } from "./components/Attestations"; import { Banner } from "./components/Banner"; import { Description } from "./components/Description"; -import { Portals } from "./components/Portals"; +import { Schemas } from "./components/Schemas"; import { issuersData } from "../Home/data"; export const Issuer: React.FC = () => { @@ -12,7 +13,7 @@ export const Issuer: React.FC = () => { const navigate = useNavigate(); const location = useLocation(); - const { name, description, CTALink, CTATitle, logo, keywords, address } = + const { name, description, CTALink, CTATitle, logo, keywords, address, attestationDefinitions } = issuersData.find((issuer) => issuer.address === id) || {}; if (!name || !description || !logo || !keywords || !address || !CTATitle) { @@ -22,9 +23,11 @@ export const Issuer: React.FC = () => { return (
- - - + + + + + {/* */}
); }; diff --git a/explorer/src/utils/amountUtils.ts b/explorer/src/utils/amountUtils.ts index 68317e29..d0a972e1 100644 --- a/explorer/src/utils/amountUtils.ts +++ b/explorer/src/utils/amountUtils.ts @@ -4,3 +4,13 @@ export const displayAmountWithComma = (str: string | number): string => .replace(/\B(?=(\d{3})+(?!\d))/g, ","); export const randomNumber = (min: number, max: number) => Math.floor(Math.random() * (max - min) + min); + +export const formatNumber = (num: number): string => { + if (num >= 1_000_000) { + return (num / 1_000_000).toFixed(1).replace(/\.0$/, "") + "M"; + } + if (num >= 1_000) { + return (num / 1_000).toFixed(1).replace(/\.0$/, "") + "K"; + } + return num.toString(); +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 66f16cb7..12817bbc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -90,8 +90,8 @@ importers: specifier: ^8.10.7 version: 8.17.3(react-dom@18.3.1)(react@18.3.1) '@verax-attestation-registry/verax-sdk': - specifier: 1.10.0 - version: 1.10.0(@envelop/core@5.0.1)(@graphql-mesh/types@0.95.8)(@graphql-tools/delegate@10.0.10)(@graphql-tools/merge@9.0.4)(@graphql-tools/utils@10.2.0)(@graphql-tools/wrap@10.0.5)(@types/node@20.12.12)(@types/react@18.3.2)(graphql-tag@2.12.6)(graphql-yoga@5.3.1)(react-dom@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@5.2.2) + specifier: 1.11.0 + version: 1.11.0(@graphql-mesh/types@0.95.8)(@graphql-tools/utils@10.2.0)(@types/node@20.12.12)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@5.2.2) '@wagmi/core': specifier: ^1.4.7 version: 1.4.13(@types/react@18.3.2)(react@18.3.1)(typescript@5.2.2)(viem@1.18.9) @@ -2899,25 +2899,6 @@ packages: strip-ansi: 6.0.1 dev: true - /@graphprotocol/client-add-source-name@2.0.3(@graphql-mesh/types@0.95.8)(@graphql-tools/delegate@10.0.10)(@graphql-tools/utils@10.2.0)(@graphql-tools/wrap@10.0.5)(graphql@16.8.1): - resolution: {integrity: sha512-30VxjW8yEytySAJ7S+6pC3SII8BGyzQbLTIDr7FPEdj5FHvVKq3WQxDNHwWPEoEYYEEWDlapw3+e7leDwW9MCQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@graphql-mesh/types': ^0.78.0 || ^0.79.0 || ^0.80.0 || ^0.81.0 || ^0.82.0 || ^0.83.0 || ^0.84.0 || ^0.85.0 || ^0.89.0 || ^0.90.0 || ^0.91.0 || ^0.93.0 || ^0.94.0 || ^0.97.0 || ^0.98.0 - '@graphql-tools/delegate': ^9.0.32 || ^10.0.0 - '@graphql-tools/utils': ^9.2.1 || ^10.0.0 - '@graphql-tools/wrap': ^9.4.2 || ^10.0.0 - graphql: ^15.2.0 || ^16.0.0 - dependencies: - '@graphql-mesh/types': 0.95.8(@graphql-mesh/store@0.95.8)(@graphql-tools/utils@10.2.0)(graphql@16.8.1)(tslib@2.6.2) - '@graphql-tools/delegate': 10.0.10(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - '@graphql-tools/wrap': 10.0.5(graphql@16.8.1) - graphql: 16.8.1 - lodash: 4.17.21 - tslib: 2.6.2 - dev: false - /@graphprotocol/client-add-source-name@2.0.3(@graphql-mesh/types@0.98.4)(@graphql-tools/delegate@10.0.10)(@graphql-tools/utils@10.2.0)(@graphql-tools/wrap@10.0.5)(graphql@16.8.1): resolution: {integrity: sha512-30VxjW8yEytySAJ7S+6pC3SII8BGyzQbLTIDr7FPEdj5FHvVKq3WQxDNHwWPEoEYYEEWDlapw3+e7leDwW9MCQ==} engines: {node: '>=16.0.0'} @@ -2937,25 +2918,6 @@ packages: tslib: 2.6.2 dev: false - /@graphprotocol/client-auto-pagination@2.0.3(@graphql-mesh/types@0.95.8)(@graphql-tools/delegate@10.0.10)(@graphql-tools/utils@10.2.0)(@graphql-tools/wrap@10.0.5)(graphql@16.8.1): - resolution: {integrity: sha512-ZYMO4/tQ5ndSYeaZ+uucJYFNVc1DYSC6jK5AfJYElEfRMRZrj7jXL6RViBNmsSYuOXR2EIyEqPBOAdy2oDLWdw==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@graphql-mesh/types': ^0.78.0 || ^0.79.0 || ^0.80.0 || ^0.81.0 || ^0.82.0 || ^0.83.0 || ^0.84.0 || ^0.85.0 || ^0.89.0 || ^0.90.0 || ^0.91.0 || ^0.93.0 || ^0.94.0 || ^0.97.0 || ^0.98.0 - '@graphql-tools/delegate': ^9.0.32 || ^10.0.0 - '@graphql-tools/utils': ^9.2.1 || ^10.0.0 - '@graphql-tools/wrap': ^9.4.2 || ^10.0.0 - graphql: ^15.2.0 || ^16.0.0 - dependencies: - '@graphql-mesh/types': 0.95.8(@graphql-mesh/store@0.95.8)(@graphql-tools/utils@10.2.0)(graphql@16.8.1)(tslib@2.6.2) - '@graphql-tools/delegate': 10.0.10(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - '@graphql-tools/wrap': 10.0.5(graphql@16.8.1) - graphql: 16.8.1 - lodash: 4.17.21 - tslib: 2.6.2 - dev: false - /@graphprotocol/client-auto-pagination@2.0.3(@graphql-mesh/types@0.98.4)(@graphql-tools/delegate@10.0.10)(@graphql-tools/utils@10.2.0)(@graphql-tools/wrap@10.0.5)(graphql@16.8.1): resolution: {integrity: sha512-ZYMO4/tQ5ndSYeaZ+uucJYFNVc1DYSC6jK5AfJYElEfRMRZrj7jXL6RViBNmsSYuOXR2EIyEqPBOAdy2oDLWdw==} engines: {node: '>=16.0.0'} @@ -2975,23 +2937,6 @@ packages: tslib: 2.6.2 dev: false - /@graphprotocol/client-auto-type-merging@2.0.3(@graphql-mesh/types@0.95.8)(@graphql-mesh/utils@0.95.8)(@graphql-tools/delegate@10.0.10)(graphql@16.8.1): - resolution: {integrity: sha512-vJVzvxk3FRwHc4w9+GP4QBrQ3oxNbveH1k3bEGokSo5DbGMQ2HIYFrGRZ+hICUQBIcqgK+beWa35BZtEMnBWaw==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@graphql-mesh/types': ^0.78.0 || ^0.79.0 || ^0.80.0 || ^0.81.0 || ^0.82.0 || ^0.83.0 || ^0.84.0 || ^0.85.0 || ^0.89.0 || ^0.90.0 || ^0.91.0 || ^0.93.0 || ^0.94.0 || ^0.97.0 || ^0.98.0 - '@graphql-tools/delegate': ^9.0.32 || ^10.0.0 - graphql: ^15.2.0 || ^16.0.0 - dependencies: - '@graphql-mesh/transform-type-merging': 0.98.4(@graphql-mesh/types@0.95.8)(@graphql-mesh/utils@0.95.8)(graphql@16.8.1)(tslib@2.6.2) - '@graphql-mesh/types': 0.95.8(@graphql-mesh/store@0.95.8)(@graphql-tools/utils@10.2.0)(graphql@16.8.1)(tslib@2.6.2) - '@graphql-tools/delegate': 10.0.10(graphql@16.8.1) - graphql: 16.8.1 - tslib: 2.6.2 - transitivePeerDependencies: - - '@graphql-mesh/utils' - dev: false - /@graphprotocol/client-auto-type-merging@2.0.3(@graphql-mesh/types@0.98.4)(@graphql-mesh/utils@0.95.8)(@graphql-tools/delegate@10.0.10)(graphql@16.8.1): resolution: {integrity: sha512-vJVzvxk3FRwHc4w9+GP4QBrQ3oxNbveH1k3bEGokSo5DbGMQ2HIYFrGRZ+hICUQBIcqgK+beWa35BZtEMnBWaw==} engines: {node: '>=16.0.0'} @@ -3026,48 +2971,6 @@ packages: - '@graphql-mesh/store' dev: false - /@graphprotocol/client-cli@3.0.3(@envelop/core@5.0.1)(@graphql-mesh/cross-helpers@0.4.2)(@graphql-mesh/store@0.95.8)(@graphql-mesh/types@0.95.8)(@graphql-mesh/utils@0.95.8)(@graphql-tools/delegate@10.0.10)(@graphql-tools/merge@9.0.4)(@graphql-tools/utils@10.2.0)(@graphql-tools/wrap@10.0.5)(@types/node@20.12.12)(@types/react@18.3.2)(graphql-tag@2.12.6)(graphql-yoga@5.3.1)(graphql@16.8.1)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-cFukNLDqkPLEtZYfz8xDOLbX8/Wslv30QOL8RHsqodnlpMCJYB52VSj8qzNE+KM8/AWCDMZk+7+tgmThraVbPA==} - engines: {node: '>=16.0.0'} - hasBin: true - peerDependencies: - graphql: ^15.2.0 || ^16.0.0 - dependencies: - '@graphprotocol/client-add-source-name': 2.0.3(@graphql-mesh/types@0.95.8)(@graphql-tools/delegate@10.0.10)(@graphql-tools/utils@10.2.0)(@graphql-tools/wrap@10.0.5)(graphql@16.8.1) - '@graphprotocol/client-auto-pagination': 2.0.3(@graphql-mesh/types@0.95.8)(@graphql-tools/delegate@10.0.10)(@graphql-tools/utils@10.2.0)(@graphql-tools/wrap@10.0.5)(graphql@16.8.1) - '@graphprotocol/client-auto-type-merging': 2.0.3(@graphql-mesh/types@0.95.8)(@graphql-mesh/utils@0.95.8)(@graphql-tools/delegate@10.0.10)(graphql@16.8.1) - '@graphprotocol/client-block-tracking': 2.0.2(@graphql-mesh/cross-helpers@0.4.2)(@graphql-mesh/store@0.95.8)(@graphql-tools/delegate@10.0.10)(graphql@16.8.1) - '@graphprotocol/client-polling-live': 2.0.1(@envelop/core@5.0.1)(@graphql-tools/merge@9.0.4)(graphql@16.8.1) - '@graphql-mesh/cli': 0.90.5(@types/node@20.12.12)(graphql-tag@2.12.6)(graphql-yoga@5.3.1)(graphql@16.8.1) - '@graphql-mesh/graphql': 0.98.4(@graphql-mesh/cross-helpers@0.4.2)(@graphql-mesh/store@0.95.8)(@graphql-mesh/types@0.95.8)(@graphql-mesh/utils@0.95.8)(@graphql-tools/utils@10.2.0)(@types/node@20.12.12)(@types/react@18.3.2)(graphql@16.8.1)(react-dom@18.3.1)(react@18.3.1)(tslib@2.6.2) - graphql: 16.8.1 - tslib: 2.6.2 - transitivePeerDependencies: - - '@envelop/core' - - '@graphql-mesh/cross-helpers' - - '@graphql-mesh/store' - - '@graphql-mesh/types' - - '@graphql-mesh/utils' - - '@graphql-tools/delegate' - - '@graphql-tools/merge' - - '@graphql-tools/utils' - - '@graphql-tools/wrap' - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - '@types/react' - - bufferutil - - encoding - - graphql-tag - - graphql-ws - - graphql-yoga - - react - - react-dom - - subscriptions-transport-ws - - supports-color - - utf-8-validate - dev: false - /@graphprotocol/client-cli@3.0.3(@envelop/core@5.0.1)(@graphql-mesh/cross-helpers@0.4.2)(@graphql-mesh/store@0.95.8)(@graphql-mesh/types@0.98.4)(@graphql-mesh/utils@0.95.8)(@graphql-tools/delegate@10.0.10)(@graphql-tools/merge@9.0.4)(@graphql-tools/utils@10.2.0)(@graphql-tools/wrap@10.0.5)(@types/node@20.12.12)(graphql-tag@2.12.6)(graphql-yoga@5.3.1)(graphql@16.8.1): resolution: {integrity: sha512-cFukNLDqkPLEtZYfz8xDOLbX8/Wslv30QOL8RHsqodnlpMCJYB52VSj8qzNE+KM8/AWCDMZk+7+tgmThraVbPA==} engines: {node: '>=16.0.0'} @@ -3559,7 +3462,7 @@ packages: tsconfig-paths: 4.2.0 tslib: 2.6.2 typescript: 5.4.5 - uWebSockets.js: github.com/uNetworking/uWebSockets.js/8fa05571bf6ea95be8966ad313d9d39453e381ae + uWebSockets.js: github.com/uNetworking/uWebSockets.js/6f4b450fc642abba540535f0755c990b42a16026 yargs: 17.7.2 optionalDependencies: node-libcurl: 4.0.0 @@ -3718,42 +3621,6 @@ packages: - utf-8-validate dev: false - /@graphql-mesh/graphql@0.98.4(@graphql-mesh/cross-helpers@0.4.2)(@graphql-mesh/store@0.95.8)(@graphql-mesh/types@0.95.8)(@graphql-mesh/utils@0.95.8)(@graphql-tools/utils@10.2.0)(@types/node@20.12.12)(@types/react@18.3.2)(graphql@16.8.1)(react-dom@18.3.1)(react@18.3.1)(tslib@2.6.2): - resolution: {integrity: sha512-gt3/rDylShniGsdAzq3xkULUWY4s3j8uRoxOn3C8F7Bmi7kVqH0FAfgel53MWB24qxjJe3KrxmhhDURet9t0KA==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@graphql-mesh/cross-helpers': ^0.4.2 - '@graphql-mesh/store': ^0.98.4 - '@graphql-mesh/types': ^0.98.4 - '@graphql-mesh/utils': ^0.98.4 - '@graphql-tools/utils': ^10.2.0 - graphql: '*' - tslib: ^2.4.0 - dependencies: - '@graphql-mesh/cross-helpers': 0.4.2(@graphql-tools/utils@10.2.0)(graphql@16.8.1) - '@graphql-mesh/store': 0.95.8(@graphql-mesh/cross-helpers@0.4.2)(@graphql-mesh/types@0.95.8)(@graphql-mesh/utils@0.95.8)(@graphql-tools/utils@10.2.0)(graphql@16.8.1)(tslib@2.6.2) - '@graphql-mesh/string-interpolation': 0.5.4(graphql@16.8.1)(tslib@2.6.2) - '@graphql-mesh/types': 0.95.8(@graphql-mesh/store@0.95.8)(@graphql-tools/utils@10.2.0)(graphql@16.8.1)(tslib@2.6.2) - '@graphql-mesh/utils': 0.95.8(@graphql-mesh/cross-helpers@0.4.2)(@graphql-mesh/types@0.95.8)(@graphql-tools/utils@10.2.0)(graphql@16.8.1)(tslib@2.6.2) - '@graphql-tools/delegate': 10.0.10(graphql@16.8.1) - '@graphql-tools/federation': 1.1.35(@types/node@20.12.12)(@types/react@18.3.2)(graphql@16.8.1)(react-dom@18.3.1)(react@18.3.1) - '@graphql-tools/url-loader': 8.0.2(@types/node@20.12.12)(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - graphql: 16.8.1 - lodash.get: 4.4.2 - tslib: 2.6.2 - transitivePeerDependencies: - - '@types/node' - - '@types/react' - - bufferutil - - encoding - - graphql-ws - - react - - react-dom - - subscriptions-transport-ws - - utf-8-validate - dev: false - /@graphql-mesh/graphql@0.98.4(@graphql-mesh/cross-helpers@0.4.2)(@graphql-mesh/store@0.95.8)(@graphql-mesh/types@0.98.4)(@graphql-mesh/utils@0.95.8)(@graphql-tools/utils@10.2.0)(@types/node@20.12.12)(graphql@16.8.1)(tslib@2.6.2): resolution: {integrity: sha512-gt3/rDylShniGsdAzq3xkULUWY4s3j8uRoxOn3C8F7Bmi7kVqH0FAfgel53MWB24qxjJe3KrxmhhDURet9t0KA==} engines: {node: '>=16.0.0'} @@ -4145,23 +4012,6 @@ packages: tslib: 2.6.2 dev: false - /@graphql-mesh/transform-type-merging@0.98.4(@graphql-mesh/types@0.95.8)(@graphql-mesh/utils@0.95.8)(graphql@16.8.1)(tslib@2.6.2): - resolution: {integrity: sha512-inQVZ/QjkBpuWMytLNSkimYDCKlPFwa1emQJmpq/Tp8FL/fHpsk3pNeVMtQ3hs7cV9D3qMCxA8XcyDiwt82l4w==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@graphql-mesh/types': ^0.98.4 - '@graphql-mesh/utils': ^0.98.4 - graphql: '*' - tslib: ^2.4.0 - dependencies: - '@graphql-mesh/types': 0.95.8(@graphql-mesh/store@0.95.8)(@graphql-tools/utils@10.2.0)(graphql@16.8.1)(tslib@2.6.2) - '@graphql-mesh/utils': 0.95.8(@graphql-mesh/cross-helpers@0.4.2)(@graphql-mesh/types@0.95.8)(@graphql-tools/utils@10.2.0)(graphql@16.8.1)(tslib@2.6.2) - '@graphql-tools/delegate': 10.0.10(graphql@16.8.1) - '@graphql-tools/stitching-directives': 3.0.2(graphql@16.8.1) - graphql: 16.8.1 - tslib: 2.6.2 - dev: false - /@graphql-mesh/transform-type-merging@0.98.4(@graphql-mesh/types@0.98.4)(@graphql-mesh/utils@0.95.8)(graphql@16.8.1)(tslib@2.6.2): resolution: {integrity: sha512-inQVZ/QjkBpuWMytLNSkimYDCKlPFwa1emQJmpq/Tp8FL/fHpsk3pNeVMtQ3hs7cV9D3qMCxA8XcyDiwt82l4w==} engines: {node: '>=16.0.0'} @@ -9879,10 +9729,9 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@verax-attestation-registry/verax-sdk@1.10.0(@envelop/core@5.0.1)(@graphql-mesh/types@0.95.8)(@graphql-tools/delegate@10.0.10)(@graphql-tools/merge@9.0.4)(@graphql-tools/utils@10.2.0)(@graphql-tools/wrap@10.0.5)(@types/node@20.12.12)(@types/react@18.3.2)(graphql-tag@2.12.6)(graphql-yoga@5.3.1)(react-dom@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@5.2.2): - resolution: {integrity: sha512-tzy7Gaw3Q18mA0inkT9UESvMTPVR6wKzV50D1CAqyvsshLPG+1pVKV3bRhS4WFhoIHLnoLKSpko0aHmk3xa4gg==} + /@verax-attestation-registry/verax-sdk@1.11.0(@graphql-mesh/types@0.95.8)(@graphql-tools/utils@10.2.0)(@types/node@20.12.12)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)(tslib@2.6.2)(typescript@5.2.2): + resolution: {integrity: sha512-rewR7ZvBLeKkGOAXUCfQpIKSMa7XTQPbGmy0DbA2xJs0qIf39I3BfP6GKNeire+KrNRiTGpP6E8C8JU3SrSa3w==} dependencies: - '@graphprotocol/client-cli': 3.0.3(@envelop/core@5.0.1)(@graphql-mesh/cross-helpers@0.4.2)(@graphql-mesh/store@0.95.8)(@graphql-mesh/types@0.95.8)(@graphql-mesh/utils@0.95.8)(@graphql-tools/delegate@10.0.10)(@graphql-tools/merge@9.0.4)(@graphql-tools/utils@10.2.0)(@graphql-tools/wrap@10.0.5)(@types/node@20.12.12)(@types/react@18.3.2)(graphql-tag@2.12.6)(graphql-yoga@5.3.1)(graphql@16.8.1)(react-dom@18.3.1)(react@18.3.1) '@graphql-mesh/cache-localforage': 0.95.8(@graphql-mesh/types@0.95.8)(@graphql-mesh/utils@0.95.8)(graphql@16.8.1)(tslib@2.6.2) '@graphql-mesh/cross-helpers': 0.4.2(@graphql-tools/utils@10.2.0)(graphql@16.8.1) '@graphql-mesh/graphql': 0.95.8(@graphql-mesh/cross-helpers@0.4.2)(@graphql-mesh/store@0.95.8)(@graphql-mesh/types@0.95.8)(@graphql-mesh/utils@0.95.8)(@graphql-tools/utils@10.2.0)(@types/node@20.12.12)(@types/react@18.3.2)(graphql@16.8.1)(react-dom@18.3.1)(react@18.3.1)(tslib@2.6.2) @@ -9897,26 +9746,17 @@ packages: graphql: 16.8.1 viem: 2.10.8(typescript@5.2.2) transitivePeerDependencies: - - '@envelop/core' - '@graphql-mesh/types' - - '@graphql-tools/delegate' - - '@graphql-tools/merge' - '@graphql-tools/utils' - - '@graphql-tools/wrap' - - '@swc/core' - - '@swc/wasm' - '@types/node' - '@types/react' - bufferutil - debug - encoding - - graphql-tag - graphql-ws - - graphql-yoga - react - react-dom - subscriptions-transport-ws - - supports-color - tslib - typescript - utf-8-validate @@ -18995,7 +18835,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.12.12)(typescript@4.9.5) + ts-node: 10.9.2(@types/node@20.12.12)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -26461,8 +26301,8 @@ packages: use-sync-external-store: 1.2.0(react@18.3.1) dev: false - github.com/uNetworking/uWebSockets.js/8fa05571bf6ea95be8966ad313d9d39453e381ae: - resolution: {tarball: https://codeload.github.com/uNetworking/uWebSockets.js/tar.gz/8fa05571bf6ea95be8966ad313d9d39453e381ae} + github.com/uNetworking/uWebSockets.js/6f4b450fc642abba540535f0755c990b42a16026: + resolution: {tarball: https://codeload.github.com/uNetworking/uWebSockets.js/tar.gz/6f4b450fc642abba540535f0755c990b42a16026} name: uWebSockets.js - version: 20.44.0 + version: 20.47.0 dev: false