From 9a26b517e5b718397a1fae5387f0fa07329181f8 Mon Sep 17 00:00:00 2001 From: Sebastian Gerske <13647606+H34D@users.noreply.github.com> Date: Tue, 28 Mar 2023 17:05:18 +0200 Subject: [PATCH] added rudimentary generic sbt support --- package.json | 2 +- src/provider/modules/index.ts | 1 + src/provider/modules/sbt/index.ts | 1 + src/provider/modules/sbt/sbt.ts | 70 +++++++++++++++++++++++++++++++ yarn.lock | 8 ++-- 5 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 src/provider/modules/sbt/index.ts create mode 100644 src/provider/modules/sbt/sbt.ts diff --git a/package.json b/package.json index 0081eeda..b077261b 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "author": "hide-on-bush", "dependencies": { "@babel/preset-typescript": "^7.21.0", - "@masa-finance/masa-sdk": "^1.11.4", + "@masa-finance/masa-sdk": "^1.11.5", "@metamask/providers": "^10.2.1", "babel-loader": "^9.1.2", "babel-plugin-import": "^1.13.6", diff --git a/src/provider/modules/index.ts b/src/provider/modules/index.ts index 037537a9..775ccebe 100644 --- a/src/provider/modules/index.ts +++ b/src/provider/modules/index.ts @@ -6,3 +6,4 @@ export * from './session'; export * from './soulnames'; export * from './wallet'; export * from './modal'; +export * from './sbt'; diff --git a/src/provider/modules/sbt/index.ts b/src/provider/modules/sbt/index.ts new file mode 100644 index 00000000..73d0f229 --- /dev/null +++ b/src/provider/modules/sbt/index.ts @@ -0,0 +1 @@ +export * from './sbt'; diff --git a/src/provider/modules/sbt/sbt.ts b/src/provider/modules/sbt/sbt.ts new file mode 100644 index 00000000..64ee3e61 --- /dev/null +++ b/src/provider/modules/sbt/sbt.ts @@ -0,0 +1,70 @@ +import { useMemo } from 'react'; +import { useQuery } from 'react-query'; +import { Masa, NetworkName } from '@masa-finance/masa-sdk'; +import { BigNumber } from 'ethers'; + +export const useSBT = ({ + tokenAddress, + masa, + walletAddress, +}: { + tokenAddress: string; + masa?: Masa; + walletAddress?: string; +}): { + SBTs?: { + tokenId: BigNumber; + tokenUri: string; + }[]; + status: string; + isSBTLoading: boolean; + reloadSBTs: () => void; + error: unknown; +} => { + const queryKey: (string | NetworkName | undefined)[] = useMemo(() => { + return ['sbt', tokenAddress, walletAddress, masa?.config.networkName]; + }, [masa, tokenAddress, walletAddress]); + + const { + data: SBTs, + status, + isLoading, + isFetching, + refetch: reloadSBTs, + error, + } = useQuery< + | { + tokenId: BigNumber; + tokenUri: string; + }[] + | undefined + >( + queryKey, + async () => { + const { list } = (await masa?.sbt.connect(tokenAddress)) || {}; + return list?.(walletAddress); + }, + { + enabled: !!masa, + retry: false, + onSuccess: ( + sbts?: { + tokenId: BigNumber; + tokenUri: string; + }[] + ) => { + if (masa?.config.verbose) { + console.info({ sbts, network: masa?.config.networkName }); + } + }, + } + ); + + return { + SBTs, + isSBTLoading: isLoading || isFetching, + reloadSBTs, + status, + error, + }; +}; diff --git a/yarn.lock b/yarn.lock index f46e0b52..df635d7a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2015,10 +2015,10 @@ dependencies: ethers "~5.7.2" -"@masa-finance/masa-sdk@^1.11.4": - version "1.11.4" - resolved "https://registry.yarnpkg.com/@masa-finance/masa-sdk/-/masa-sdk-1.11.4.tgz#accac2a4ffa884953353dfa35f77322a7abfac84" - integrity sha512-XADubU18F/VB11j9NT8dHoaR0xxJlPooBQAQqK8Yac0ZuSRn/L9sOZCkK6pBZ8ObczswO4ChQ0AjXjs7v5O24Q== +"@masa-finance/masa-sdk@^1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@masa-finance/masa-sdk/-/masa-sdk-1.11.5.tgz#834eae78ef887f336db8323f0e3c5f716d23beb8" + integrity sha512-oPAPQhP/5cR1vwaF8Strrjt8fY+8SkH1xxNdqVz5Ig3BjMqefrul7DyTowvnuQiB6pC8wuXipPNuAO3WmSVOGQ== dependencies: "@masa-finance/masa-contracts-identity" "^1.4.1" "@masa-finance/masa-token" "^1.0.0"