diff --git a/package.json b/package.json index eb631c21a..25d9ed648 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,8 @@ "@subql/contract-sdk": "0.112.0", "@subql/network-clients": "^0.112.1-1", "@subql/network-config": "^0.112.0", - "@subql/network-query": "0.112.0", - "@subql/react-hooks": "^0.112.1-1", + "@subql/network-query": "0.112.1-0", + "@subql/react-hooks": "^0.112.1-2", "@testing-library/jest-dom": "^5.11.4", "@testing-library/react": "^11.1.0", "@testing-library/user-event": "^12.1.10", diff --git a/src/components/DeploymentInfo/DeploymentInfo.tsx b/src/components/DeploymentInfo/DeploymentInfo.tsx index 2c968e3da..6556f2495 100644 --- a/src/components/DeploymentInfo/DeploymentInfo.tsx +++ b/src/components/DeploymentInfo/DeploymentInfo.tsx @@ -6,13 +6,14 @@ import { useTranslation } from 'react-i18next'; import UnsafeWarn from '@components/UnsafeWarn'; import { useGetIfUnsafeDeployment } from '@hooks/useGetIfUnsafeDeployment'; import { Spinner, Typography } from '@subql/components'; +import { ProjectType } from '@subql/contract-sdk/types'; import { Tooltip } from 'antd'; import { useProjectMetadata } from '../../containers'; import { useAsyncMemo } from '../../hooks'; import { useDeploymentMetadata } from '../../hooks/useDeploymentMetadata'; import { ProjectMetadata } from '../../models'; -import { parseError, renderAsync } from '../../utils'; +import { isUndefined, parseError, renderAsync } from '../../utils'; import Copy from '../Copy'; import IPFSImage from '../IPFSImage'; import styles from './DeploymentInfo.module.css'; @@ -21,9 +22,10 @@ type Props = { project?: ProjectMetadata; deploymentId?: string; deploymentVersion?: string; + type?: ProjectType; }; -export const DeploymentInfo: React.FC = ({ project, deploymentId }) => { +export const DeploymentInfo: React.FC = ({ project, deploymentId, type }) => { const { t } = useTranslation(); const deploymentMeta = useDeploymentMetadata(deploymentId); @@ -46,6 +48,15 @@ export const DeploymentInfo: React.FC = ({ project, deploymentId }) => { )} {isUnsafe && } + {isUndefined(type) ? ( + '' + ) : ( +
+ + Type: {type === ProjectType.RPC ? 'RPC Endpoint' : 'Data Indexer'} + +
+ )}
{versionHeader} diff --git a/src/components/IndexerDetails/Row.tsx b/src/components/IndexerDetails/Row.tsx index e3504d9b5..1ed089111 100644 --- a/src/components/IndexerDetails/Row.tsx +++ b/src/components/IndexerDetails/Row.tsx @@ -125,8 +125,6 @@ const ConnectedRow: React.FC<{ setProjectMaxTargetHeightInfo(deploymentId, maxTargetHeight); } - console.warn(meta); - return { startBlock: meta?.startHeight ?? 0, targetBlock: maxTargetHeight, diff --git a/src/components/ProjectCard/ProjectCard.tsx b/src/components/ProjectCard/ProjectCard.tsx index 52c96000e..4f6476d8e 100644 --- a/src/components/ProjectCard/ProjectCard.tsx +++ b/src/components/ProjectCard/ProjectCard.tsx @@ -2,8 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 import * as React from 'react'; +import { Manifest } from '@hooks/useGetDeploymentManifest'; import { Address, Typography } from '@subql/components'; -import { ProjectFieldsFragment } from '@subql/network-query'; +import { ProjectFieldsFragment, ProjectType } from '@subql/network-query'; import dayjs from 'dayjs'; import { ProjectMetadata } from 'src/models'; @@ -12,7 +13,9 @@ import IPFSImage from '../IPFSImage'; import styles from './ProjectCard.module.css'; type Props = { - project: { metadata: ProjectMetadata | undefined } & Omit; + project: { metadata: ProjectMetadata | undefined } & Omit & { + manifest?: Manifest; + }; onClick?: () => void; }; @@ -40,7 +43,15 @@ const ProjectCard: React.FC = ({ project, onClick }) => {
-
+ {project.type === ProjectType.SUBQUERY ? ( +
+ ) : ( + + {project.manifest?.rpcFamily?.[0]} + {project.manifest?.rpcFamily?.[0] && project.manifest?.nodeType && ' - '} + {project.manifest?.nodeType} + + )}
diff --git a/src/components/ProjectHeader/ProjectHeader.module.less b/src/components/ProjectHeader/ProjectHeader.module.less index 6abcbc7cf..9b819e639 100644 --- a/src/components/ProjectHeader/ProjectHeader.module.less +++ b/src/components/ProjectHeader/ProjectHeader.module.less @@ -14,6 +14,7 @@ justify-content: center; flex-direction: column; padding-left: 32px; + flex: 1; } .upper { diff --git a/src/components/ProjectHeader/ProjectHeader.tsx b/src/components/ProjectHeader/ProjectHeader.tsx index 08aeb9758..25cc62b09 100644 --- a/src/components/ProjectHeader/ProjectHeader.tsx +++ b/src/components/ProjectHeader/ProjectHeader.tsx @@ -4,8 +4,10 @@ import * as React from 'react'; import { useTranslation } from 'react-i18next'; import UnsafeWarn from '@components/UnsafeWarn'; +import { Manifest } from '@hooks/useGetDeploymentManifest'; import { ProjectDetailsQuery } from '@hooks/useProjectFromQuery'; import { Address, Typography } from '@subql/components'; +import { ProjectType } from '@subql/network-query'; import { Button } from 'antd'; import dayjs from 'dayjs'; @@ -20,9 +22,17 @@ type Props = { currentVersion?: string; onChangeVersion?: (key: string) => void; isUnsafeDeployment?: boolean; + manifest?: Manifest; }; -const ProjectHeader: React.FC = ({ project, versions, currentVersion, isUnsafeDeployment, onChangeVersion }) => { +const ProjectHeader: React.FC = ({ + project, + versions, + currentVersion, + isUnsafeDeployment, + onChangeVersion, + manifest, +}) => { const { t } = useTranslation(); const createdAtStr = React.useMemo(() => dayjs(project.createdTimestamp).fromNow(), [project]); @@ -60,6 +70,10 @@ const ProjectHeader: React.FC = ({ project, versions, currentVersion, isU {isUnsafeDeployment && } + +
@@ -75,6 +89,12 @@ const ProjectHeader: React.FC = ({ project, versions, currentVersion, isU
+ {project.type === ProjectType.RPC && manifest?.rpcFamily ? ( + + ) : ( + '' + )} + {currentVersion && } diff --git a/src/components/ProjectOverview/ProjectOverview.module.less b/src/components/ProjectOverview/ProjectOverview.module.less index 6d111a246..c32f6378b 100644 --- a/src/components/ProjectOverview/ProjectOverview.module.less +++ b/src/components/ProjectOverview/ProjectOverview.module.less @@ -15,6 +15,11 @@ } } +.line { + display: flex; + gap: 8px; +} + .left { display: flex; flex-direction: row; diff --git a/src/components/ProjectOverview/ProjectOverview.tsx b/src/components/ProjectOverview/ProjectOverview.tsx index db3fdfbbc..d1fd66f01 100644 --- a/src/components/ProjectOverview/ProjectOverview.tsx +++ b/src/components/ProjectOverview/ProjectOverview.tsx @@ -7,9 +7,11 @@ import { BsGithub, BsGlobe } from 'react-icons/bs'; import Expand from '@components/Expand/Expand'; import NewCard from '@components/NewCard'; import { useRouteQuery } from '@hooks'; +import { Manifest } from '@hooks/useGetDeploymentManifest'; import { ProjectDetailsQuery } from '@hooks/useProjectFromQuery'; import { BalanceLayout } from '@pages/dashboard'; import { Markdown, Typography } from '@subql/components'; +import { ProjectType } from '@subql/network-query'; import { formatSQT, useGetOfferCountByDeploymentIdLazyQuery } from '@subql/react-hooks'; import { ProjectMetadata } from '../../models'; @@ -19,6 +21,7 @@ type Props = { project: ProjectDetailsQuery; metadata: ProjectMetadata; deploymentDescription?: string; + manifest?: Manifest; }; export const ExternalLink: React.FC<{ link?: string; icon: 'globe' | 'github' }> = ({ link, icon }) => { @@ -34,7 +37,7 @@ export const ExternalLink: React.FC<{ link?: string; icon: 'globe' | 'github' }> ); }; -const ProjectOverview: React.FC = ({ project, metadata, deploymentDescription }) => { +const ProjectOverview: React.FC = ({ project, metadata, deploymentDescription, manifest }) => { const { t } = useTranslation(); const query = useRouteQuery(); @@ -82,6 +85,49 @@ const ProjectOverview: React.FC = ({ project, metadata, deploymentDescrip
+ + {project.type === ProjectType.RPC && ( + <> +
+
+ + RPC Endpoint Details + + {manifest?.chain?.chainId && ( +
+ + Chain ID:{' '} + + {manifest?.chain?.chainId} +
+ )} + {manifest?.rpcFamily && ( +
+ + Family:{' '} + + {manifest?.rpcFamily?.join(' ')} +
+ )} + {manifest?.client?.name && ( +
+ + Client:{' '} + + {manifest?.client?.name} +
+ )} + {manifest?.nodeType && ( +
+ + Node type:{' '} + + {manifest?.nodeType} +
+ )} +
+ + )}
@@ -95,7 +141,7 @@ const ProjectOverview: React.FC = ({ project, metadata, deploymentDescrip
- Total Indexers + Total {project.type === ProjectType.RPC ? 'RPC Providers' : 'Indexers'} {project.deployments.nodes.find((i) => i?.id === deploymentId)?.indexers.totalCount || 0} diff --git a/src/hooks/useGetDeploymentManifest.tsx b/src/hooks/useGetDeploymentManifest.tsx new file mode 100644 index 000000000..0e5b7d41e --- /dev/null +++ b/src/hooks/useGetDeploymentManifest.tsx @@ -0,0 +1,51 @@ +// Copyright 2020-2022 SubQuery Pte Ltd authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { useEffect, useState } from 'react'; +import { useIPFS } from '@containers'; +import yaml from 'js-yaml'; + +export type Manifest = { + nodeType?: string; + network?: string; + rpcFamily?: string[]; + client?: { + name: string; + }; + chain?: { + chainId: string; + }; +}; + +export const useGetDeploymentManifest = (currentDeploymentId?: string) => { + const { catSingle } = useIPFS(); + + const [manifest, setManifest] = useState(); + + const getManifest = async (deploymentId: string) => { + try { + const res = await catSingle(deploymentId); + + const result = Buffer.from(res).toString('utf8'); + + return yaml.load(result) as Manifest; + } catch (e) { + return {}; + } + }; + + useEffect(() => { + const inner = async () => { + if (currentDeploymentId) { + const result = await getManifest(currentDeploymentId); + setManifest(result); + } + }; + inner(); + }, [currentDeploymentId]); + + return { + getManifest, + manifest, + }; +}; diff --git a/src/hooks/useLocalProjects.ts b/src/hooks/useLocalProjects.ts index 8dfd99783..ae70c5ab5 100644 --- a/src/hooks/useLocalProjects.ts +++ b/src/hooks/useLocalProjects.ts @@ -3,7 +3,7 @@ import { useRef, useState } from 'react'; import { useProjectMetadata } from '@containers'; -import { ProjectFieldsFragment, ProjectsOrderBy } from '@subql/network-query'; +import { ProjectFieldsFragment, ProjectsOrderBy, ProjectType } from '@subql/network-query'; import { useGetProjectsLazyQuery } from '@subql/react-hooks'; import { notEmpty } from '@utils'; import { makeCacheKey } from '@utils/limitation'; @@ -13,6 +13,8 @@ import localforage from 'localforage'; import { uniqWith } from 'lodash-es'; import { cloneDeep } from 'lodash-es'; +import { Manifest, useGetDeploymentManifest } from './useGetDeploymentManifest'; + const cacheKey = makeCacheKey('localProjectWithMetadata'); type ProjectWithMetadata = { @@ -20,7 +22,9 @@ type ProjectWithMetadata = { versionDescription: string; name: string; categories?: string[]; -} & ProjectFieldsFragment; +} & ProjectFieldsFragment & { + manifest?: Manifest; + }; export const useLocalProjects = () => { // this hooks want to do these things: @@ -41,6 +45,7 @@ export const useLocalProjects = () => { variables: { offset: 0 }, }); const { getMetadataFromCid } = useProjectMetadata(); + const { getManifest } = useGetDeploymentManifest(); const projects = useRef([]); @@ -69,15 +74,27 @@ export const useLocalProjects = () => { if (res.data?.projects?.nodes) { const nonEmptyProjects = res.data.projects?.nodes.filter(notEmpty); const allMetadata = await Promise.allSettled(nonEmptyProjects.map((i) => getMetadataFromCid(i.metadata))); + const allManifest = await Promise.allSettled( + nonEmptyProjects.map((i) => { + if (i.type === ProjectType.RPC) { + return getManifest(i.deploymentId); + } + + return Promise.resolve({}); + }), + ); const projectsWithMetadata = nonEmptyProjects.map((project, index) => { const rawMetadata = allMetadata[index]; + const rawManifest = allManifest[index]; const metadata = rawMetadata.status === 'fulfilled' ? rawMetadata.value : { name: '', description: '', versionDescription: '', categories: [] }; + const manifest = rawManifest.status === 'fulfilled' ? rawManifest.value : {}; return { ...project, ...metadata, + manifest, }; }); const mergered = uniqWith([...tempProjects, ...projectsWithMetadata], (x, y) => x.id === y.id); @@ -126,7 +143,12 @@ export const useLocalProjects = () => { fetchAllProjects(); }; - const getProjectBySearch = async (params: { offset: number; keywords: string; categories?: string[] }) => { + const getProjectBySearch = async (params: { + offset: number; + keywords: string; + categories?: string[]; + projectType: ProjectType; + }) => { await waitForSomething({ func: () => !loading.current, }); @@ -142,6 +164,12 @@ export const useLocalProjects = () => { }); } + if (params.projectType) { + total = total.filter((i) => { + return i.type === params.projectType; + }); + } + return { data: { projects: { @@ -153,7 +181,7 @@ export const useLocalProjects = () => { }; }; - useMount(() => { + useMount(async () => { window.requestIdleCallback(() => init()); }); diff --git a/src/hooks/useProject.tsx b/src/hooks/useProject.tsx index 41b3164b0..b1d624a18 100644 --- a/src/hooks/useProject.tsx +++ b/src/hooks/useProject.tsx @@ -58,7 +58,6 @@ export function useProject(id: string): AsyncData { } const metadata = await getMetadataFromCid(query.metadata); - return { id, owner: query.owner, diff --git a/src/hooks/useProjectList.module.less b/src/hooks/useProjectList.module.less index af98b2c0a..4c8539db9 100644 --- a/src/hooks/useProjectList.module.less +++ b/src/hooks/useProjectList.module.less @@ -6,6 +6,42 @@ margin: 0 auto; } +.typeFilter { + display: flex; + justify-content: center; + margin-bottom: 40px; + + :global { + .ant-radio-group { + background: var(--sq-gray200); + border-radius: 28px; + border: 2px solid var(--sq-gray200); + .ant-radio-button-wrapper { + border-radius: 28px; + border: none; + background: var(--sq-gray200); + color: var(--sq-gray600); + font-family: var(--sq-font-family); + &:not(:first-child)::before { + display: none; + } + + &-checked { + background: var(--sq-blue600); + box-shadow: 0px 2px 8px 0px rgba(0, 0, 0, 0.05); + color: #fff; + + &:hover { + background: var(--sq-blue600); + box-shadow: 0px 2px 8px 0px rgba(0, 0, 0, 0.05); + color: #fff; + } + } + } + } + } +} + @media screen and (max-width: 4825px) { .list { width: 4412px; diff --git a/src/hooks/useProjectList.tsx b/src/hooks/useProjectList.tsx index a9f4fbacb..4accda27b 100644 --- a/src/hooks/useProjectList.tsx +++ b/src/hooks/useProjectList.tsx @@ -6,17 +6,19 @@ import SearchOutlined from '@ant-design/icons/SearchOutlined'; import { ProjectCard } from '@components'; import { useProjectMetadata } from '@containers'; import { SubqlCheckbox } from '@subql/components'; -import { ProjectFieldsFragment, ProjectsOrderBy } from '@subql/network-query'; +import { ProjectFieldsFragment, ProjectsOrderBy, ProjectType } from '@subql/network-query'; import { useAsyncMemo, useGetProjectLazyQuery, useGetProjectsLazyQuery } from '@subql/react-hooks'; -import { categoriesOptions, notEmpty } from '@utils'; +import { categoriesOptions, notEmpty, rpcCategoriesOptions } from '@utils'; import { useInfiniteScroll, useMount } from 'ahooks'; -import { Input, Skeleton, Typography } from 'antd'; +import { Input, Radio, Skeleton, Typography } from 'antd'; +import { useGetDeploymentManifest } from './useGetDeploymentManifest'; import { useLocalProjects } from './useLocalProjects'; import styles from './useProjectList.module.less'; const ProjectItem: React.FC<{ project: ProjectFieldsFragment; onClick?: () => void }> = ({ project, onClick }) => { const { getMetadataFromCid } = useProjectMetadata(); + const { manifest } = useGetDeploymentManifest(project.type === ProjectType.RPC ? project.deploymentId : ''); const { data: metadata } = useAsyncMemo(() => getMetadataFromCid(project.metadata), [project]); @@ -26,6 +28,7 @@ const ProjectItem: React.FC<{ project: ProjectFieldsFragment; onClick?: () => vo project={{ ...project, metadata, + manifest, }} /> ); @@ -40,13 +43,14 @@ export interface UseProjectListProps { export const useProjectList = (props: UseProjectListProps = {}) => { const { account, showTopProject, onProjectClick } = props; const [getProjects, { error }] = useGetProjectsLazyQuery({ - variables: { offset: 0 }, + variables: { offset: 0, type: [ProjectType.SUBQUERY] }, }); const [getProject, { error: topError, loading: topLoading }] = useGetProjectLazyQuery(); const [searchKeywords, setSearchKeywords] = React.useState(''); const [filterCategories, setFilterCategories] = useState([]); + const [filterProjectType, setFilterProjectType] = useState(ProjectType.SUBQUERY); const [topProject, setTopProject] = React.useState(); const [projects, setProjects] = React.useState([]); // ref for fetch, state for render. @@ -62,22 +66,22 @@ export const useProjectList = (props: UseProjectListProps = {}) => { const { getProjectBySearch } = useLocalProjects(); - const loadTopProject = async () => { - // this is a hard code, for kepler-network project. - // we want to top it. - const res = await getProject({ - variables: { - id: '0x06', - }, - }); - if (res.data?.project) { - setTopProject(res.data?.project); - } - }; + // const loadTopProject = async () => { + // // this is a hard code, for kepler-network project. + // // we want to top it. + // const res = await getProject({ + // variables: { + // id: '0x06', + // }, + // }); + // if (res.data?.project) { + // setTopProject(res.data?.project); + // } + // }; const loadMore = async (options?: { refresh?: boolean; - searchParams?: { categories?: string[]; keywords?: string }; + searchParams?: { categories?: string[]; keywords?: string; projectType?: ProjectType }; }) => { try { setLoading(true); @@ -86,6 +90,7 @@ export const useProjectList = (props: UseProjectListProps = {}) => { const searchParams = { keywords: searchKeywords, categories: filterCategories, + projectType: filterProjectType, ...options?.searchParams, }; const isSearch = searchParams.categories.length || searchParams.keywords.length; @@ -106,6 +111,7 @@ export const useProjectList = (props: UseProjectListProps = {}) => { offset: options?.refresh ? 0 : fetchedProejcts.current.length, orderBy: [ProjectsOrderBy.TOTAL_REWARD_DESC, ProjectsOrderBy.UPDATED_TIMESTAMP_DESC], ids: showTopProject ? ['0x06'] : [], + type: searchParams.projectType, }, defaultOptions: { fetchPolicy: 'network-only' }, }; @@ -207,11 +213,35 @@ export const useProjectList = (props: UseProjectListProps = {}) => { const listsWithSearch = useMemo(() => { return ( <> +
+ { + setFilterProjectType(val.target.value); + setFilterCategories([]); + const res = await loadMore({ + refresh: true, + searchParams: { + projectType: val.target.value, + categories: [], + }, + }); + mutate(res); + }} + value={filterProjectType} + optionType="button" + buttonStyle="solid" + size="large" + /> +
{ setFilterCategories(val as string[]); setProjects([]); @@ -256,12 +286,6 @@ export const useProjectList = (props: UseProjectListProps = {}) => { ); }, [error, inSearchMode, topError, loading, projects, onProjectClick]); - useMount(() => { - if (showTopProject) { - loadTopProject(); - } - }); - return { listsWithSearch, loading, diff --git a/src/pages/consumer/MyOffers/CreateOffer/SelectDeployment/SelectDeployment.tsx b/src/pages/consumer/MyOffers/CreateOffer/SelectDeployment/SelectDeployment.tsx index ea1c580bd..4edec38d7 100644 --- a/src/pages/consumer/MyOffers/CreateOffer/SelectDeployment/SelectDeployment.tsx +++ b/src/pages/consumer/MyOffers/CreateOffer/SelectDeployment/SelectDeployment.tsx @@ -34,6 +34,7 @@ export const DeploymentProject: React.FC<{ return (
{ const sortedTabList = React.useMemo(() => { const tabList = [ { link: `${OVERVIEW}${location.search}`, label: t('explorer.project.tab1') }, - { link: `${INDEXERS}${location.search}`, label: t('explorer.project.tab2') }, + { + link: `${INDEXERS}${location.search}`, + label: asyncProject.data?.type === ProjectType.RPC ? 'RPC Endpoints' : t('explorer.project.tab2'), + }, { link: `${SERVICE_AGREEMENTS}${location.search}`, label: t('explorer.project.tab3') }, ]; const flexPlanTab = [{ link: `${FLEX_PLANS}${location.search}`, label: t('explorer.project.tab4') }]; return import.meta.env.VITE_FLEXPLAN_ENABLED === 'true' ? [...tabList, ...flexPlanTab] : tabList; - }, [location.search]); + }, [location.search, asyncProject.data?.type]); const deploymentId = React.useMemo(() => { return query.get('deploymentId') || asyncProject.data?.deploymentId; @@ -54,6 +59,7 @@ const ProjectInner: React.FC = () => { const asyncDeploymentMetadata = useDeploymentMetadata(deploymentId); const { isUnsafe } = useGetIfUnsafeDeployment(deploymentId); + const { manifest } = useGetDeploymentManifest(asyncProject.data?.type === ProjectType.RPC ? deploymentId : ''); const handleChangeVersion = (value: string) => { navigate(`${location.pathname}?deploymentId=${value}`); @@ -148,6 +154,7 @@ const ProjectInner: React.FC = () => { project={project} metadata={project.metadata} deploymentDescription={asyncDeploymentMetadata?.data?.description} + manifest={manifest} /> } /> diff --git a/src/utils/constants.ts b/src/utils/constants.ts index a8e15dab1..63629ece1 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -65,3 +65,30 @@ export const categoriesOptions = [ value: 'Privacy', }, ]; + +export const rpcCategoriesOptions = [ + { + label: 'Light Node', + value: 'Light Node', + }, + { + label: 'Full Node', + value: 'Full Node', + }, + { + label: 'Archive Node', + value: 'Archive Node', + }, + { + label: 'EVM', + value: 'EVM', + }, + { + label: 'Polkdot', + value: 'Polkdot', + }, + { + label: 'Cosmos', + value: 'Cosmos', + }, +]; diff --git a/yarn.lock b/yarn.lock index 00cdc9d42..059b0e0d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4671,6 +4671,13 @@ dependencies: graphql "^16.5.0" +"@subql/network-query@0.112.1-0": + version "0.112.1-0" + resolved "https://registry.npmjs.org/@subql/network-query/-/network-query-0.112.1-0.tgz#ea131b32022c5ef387d515049086b09472762044" + integrity sha512-lYKsDLSq4mYCHFVeaSzwWNauvFu5jsEHOi55GotjhyI8kspOmYKCg1TPJPhD0AZViI8HjPbjNdRlj11bZRlTMw== + dependencies: + graphql "^16.5.0" + "@subql/network-support@0.1.0": version "0.1.0" resolved "https://registry.npmjs.org/@subql/network-support/-/network-support-0.1.0.tgz#80ce4a9f52878e9b84ba7faa4c0c77edd70eed24" @@ -4682,15 +4689,15 @@ jwt-decode "^3.1.2" lru-cache "^10.0.1" -"@subql/react-hooks@^0.112.1-1": - version "0.112.1-1" - resolved "https://registry.npmjs.org/@subql/react-hooks/-/react-hooks-0.112.1-1.tgz#147f05f79cb1a2a0f177fc3b8c1d5858ff065a59" - integrity sha512-nolP6HuN82PMGT0zcmO3dLno9rZjiUKUleDWxRPd1ttCkI5Qyr8nWOGhiYijlsXx4Y+1pa4Aan/sZCQCUASxZQ== +"@subql/react-hooks@^0.112.1-2": + version "0.112.1-2" + resolved "https://registry.npmjs.org/@subql/react-hooks/-/react-hooks-0.112.1-2.tgz#9a0d576f12b2a707c47d80825e675b2c3ec0475e" + integrity sha512-r5d1n7zz4MoGz877lbINON3S7HSxJgsIKoH4uZvglxRhnG5oLaanNQa8hzk6xnWDylyyQktb+hKQdh36nAVTmA== dependencies: "@graphql-tools/code-file-loader" "^7.3.6" "@graphql-tools/graphql-tag-pluck" "^7.3.6" "@graphql-tools/load" "^7.7.7" - "@subql/network-query" "0.112.0" + "@subql/network-query" "0.112.1-0" ahooks "^3.7.8" bignumber.js "^9.1.2" class-transformer "^0.5.1" @@ -10612,7 +10619,7 @@ js-yaml@^3.13.1, js-yaml@^3.14.1: js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1"