hybrid 0.4.3 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,
|
|
1
|
+
import{jsx as t,Fragment as e,jsxs as n}from"react/jsx-runtime";import{configureChains as r,createClient as o,WagmiConfig as c,useProvider as a,useAccount as i,useConnect as s,useNetwork as l,useSigner as u,useContract as d,useSwitchNetwork as h,useBlockNumber as m}from"wagmi";import{mainnet as f,goerli as p,arbitrum as b,arbitrumGoerli as B,localhost as v}from"wagmi/chains";import w,{useContext as D,useState as g,useEffect as y,useCallback as N}from"react";import{alchemyProvider as _}from"wagmi/providers/alchemy";import{infuraProvider as k}from"wagmi/providers/infura";import{publicProvider as I}from"wagmi/providers/public";import{etherscanAddressURL as x,truncateEthAddress as C}from"@hybrd/utils";export*from"@hybrd/utils";import P from"clsx";import{BigNumber as S,Wallet as E,utils as K}from"ethers";export*from"@hybrd/types";function M(n){const{provider:c,webSocketProvider:a}=r(n.chains,n.providers);return{client:o({autoConnect:!0,provider:c,webSocketProvider:a}),Provider:({children:n})=>t(e,{children:n})}}function L(){return D(O)}const O=w.createContext({client:void 0,chains:void 0}),j=[f,p,b,B,v];function A(e){console.log({props:e});const{children:n,wallet:r=M}=e,o=j,a=function(t){const{alchemyKey:e,infuraKey:n}=t,r=[];return e&&r.push(_({apiKey:e})),n&&r.push(k({apiKey:n})),r.push(I()),r}(e),{client:i,Provider:s}=r({chains:o,providers:a}),l={client:i,chains:o};return t(O.Provider,{value:l,children:t(c,{client:i,children:t(s,{children:n})})})}function G(e){const{className:r,chainId:o}=e,{address:c,isConnected:u}=i(),{connect:d,connectors:h}=s(),{chain:m}=l(),f=function(t){const[e,n]=g(),r=a({chainId:1});return y((()=>{t&&r.lookupAddress(t).then(n)}),[name,r]),e}(c);return n("p",{className:P(r,"text-sm text-center flex space-x-3 items-center justify-center text-gray"),children:[!u&&t("button",{onClick:()=>d({connector:h[0]}),children:"Connect Wallet"}),u&&n("span",{className:"",children:["connected as"," ",t("a",{href:x(c,o||m.id),className:P(r,"underline"),target:"_blank",rel:"noreferrer",children:f||C(c)})]})]})}const R=t=>{const{contract:e}=t,n=e?.chainId,{data:r}=u({chainId:n}),[o,c]=g(!1),[a,i]=g(!1),[s,l]=g(!1),h=d({address:e?.address,abi:e?.abi});return{isMinting:o,isSuccess:a,isError:s,mint:N((async(t,e={})=>{if(!h)return;c(!0);const{value:n=S.from("0"),gasPrice:o}=e;return h.connect(r).mint(t,{value:n,gasPrice:o}).then((t=>t.wait())).then((t=>(i(!0),setTimeout((()=>i(!1)),3e3),t))).catch((t=>{console.error(t),l(!0),setTimeout((()=>l(!1)),1e3)})).finally((()=>c(!1)))}),[r,h,n])}};var T={DefaultButton:"DefaultButton-module_DefaultButton__Px-Zc",DefaultButtonBase:"DefaultButton-module_DefaultButtonBase__KRytO",DefaultButtonSuccess:"DefaultButton-module_DefaultButtonSuccess__eaosU",DefaultButtonError:"DefaultButton-module_DefaultButtonError__B7CKv",DefaultButtonDisabled:"DefaultButton-module_DefaultButtonDisabled__-PIdK"};const U={default:T.DefaultButtonBase,success:T.DefaultButtonSuccess,error:T.DefaultButtonError},W=e=>{const{className:n=T.DefaultButton,intent:r="default",onClick:o,children:c,disabled:a}=e;return t("button",{className:P(n,U[r],a&&T.DefaultButtonDisabled),onClick:o,children:c})},F=e=>{const{amount:n=1,button:r=W,className:o,contract:c}=e,{data:a}=u(),{connect:i,connectors:d}=s(),{chain:m}=l(),{switchNetwork:f}=h(),{isMinting:p,isSuccess:b,isError:B,mint:v}=R({contract:c});if(p)return t(r,{disabled:!0,className:o,children:"Minting"});if(b)return t(r,{disabled:!0,className:o,intent:"success",children:"Minted"});if(B)return t(r,{disabled:!0,className:o,intent:"error",children:"Error Occurred"});if(!a){const e=d[0];return t(r,{className:o,onClick:()=>i({connector:e}),children:"Connect Wallet"})}return t(r,m?.id!==c?.chainId&&f?{onClick:()=>f(c?.chainId),className:o,intent:"error",children:"Switch Network"}:{className:o,onClick:()=>v(n),children:"Mint Now"})};function Y(t){const{address:e,contract:n}=t,r=n?.chainId,o=a({chainId:r}),[c,i]=g(!0),[s,l]=g(),[u,h]=g(),m=d({address:n?.address,abi:n?.abi});return y((()=>{n||(i(!1),l(!1),h(!0)),m&&m.connect(o).balanceOf(e).then((t=>t.toNumber())).then((t=>{console.log({allow:t}),l(t),h(!t)})).catch((t=>{console.error(t),l(!1),h(!0)})).finally((()=>i(!1)))}),[e,n]),{isLoading:c,address:e,allow:s,deny:u}}const Z=({children:n,contract:r,loading:o=t("p",{children:"Loading"}),deny:c=t("p",{children:"You must own a token to view this content."})})=>{const{address:a}=i(),{isLoading:s,allow:l}=Y({address:a,contract:r});return t(e,{children:s?o:l?n:c})},$=e=>{const{className:n,contract:r}=e,o=r?.chainId,c=a({chainId:o}),{data:i}=m(),s=d({address:r?.address,abi:r?.abi}),l=function(t,e,n){const[r,o]=g(n);return y((()=>{let e=!1;const n=t();if(null!=n)return n.then((t=>{e||o(t)})).catch((t=>{console.error(`Error in useAsyncMemo: ${t}`)})),()=>{e=!0}}),e),r}((()=>{if(s)return s.connect(c).totalSupply().then((t=>t.toNumber()))}),[s,i]);return t("span",{className:n,children:l})},q=()=>{const[t,e]=g();return m({watch:!0,onBlock:e}),t};function z(t){const{deployData:e,chainId:n}=t,r=a({chainId:n}),o=q(),[c,i]=g({gas:void 0,gasPrice:void 0,wei:void 0,eth:void 0}),s=N((t=>"function"==typeof e?e(t):e),[e]);return y((()=>{const{address:t}=E.createRandom(),e=s(r);e&&async function(t,e){const n=await t.estimateGas(e),r=await t.getGasPrice(),o=n.mul(r),c=parseFloat(K.formatUnits(o,"ether"));return{gas:n,gasPrice:r,wei:o,eth:c}}(r,{data:e,from:t}).then(i).catch((t=>{console.error("useEstimation",t)}))}),[o,r,n,s]),c}export{G as ConnectedAs,F as MintButton,Z as TokenGate,$ as TotalSupply,A as Web3Provider,z as useEstimation,L as useHybrid,R as useMinting,Y as useTokenGating};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/providers/Web3Provider.tsx","../src/components/ConnectedAs.tsx","../src/hooks/internal/useEnsName.tsx","../src/hooks/useMinting.ts","../src/components/DefaultButton.tsx","../src/components/MintButton.tsx","../src/hooks/useTokenGating.ts","../src/components/TokenGate.tsx","../src/components/TotalSupply.tsx","../src/hooks/internal/useAsyncMemo.ts","../src/hooks/useEstimation.ts"],"sourcesContent":["import { WagmiConfig, Client } from \"wagmi\"\nimport {\n mainnet,\n goerli,\n localhost,\n arbitrum,\n arbitrumGoerli\n} from \"wagmi/chains\"\n\nimport React, { useContext, useMemo } from \"react\"\n// import { Provider } from \"@ethersproject/providers\"\nimport { WalletConnector } from \"@hybrd/types\"\nimport createDefaultWalletConnector from \"./DefaultWalletConnector\"\n\nexport type Config = {\n // appName?: string\n // alchemyKey?: string\n // infuraKey?: string\n // publicProvider?: boolean\n}\n\n// export const withHybrid = (InputComponent, config: Config = {}) => {\n// return function WithHybrid(props) {\n// return (\n// <Web3Provider {...config}>\n// <InputComponent {...props} />\n// </Web3Provider>\n// )\n// }\n// }\n\nexport function useHybrid() {\n return useContext(Web3Context)\n}\n\nexport const Web3Context = React.createContext<{\n client: Client\n chains: any[]\n // provider: ({ chainId }: { chainId?: number }) => Provider\n // webSocketProvider: ({ chainId }: { chainId?: number }) => Provider\n}>({\n client: undefined,\n chains: undefined\n // provider: undefined,\n // webSocketProvider: undefined\n})\n\nconst SUPPORTED_CHAINS = [mainnet, goerli, arbitrum, arbitrumGoerli, localhost]\n\nexport function Web3Provider(props: {\n children: React.ReactNode\n wallet: WalletConnector\n}) {\n console.log({ props })\n\n const { children, wallet: createDefaultWalletConnector } = props\n const chains = SUPPORTED_CHAINS\n\n // const { chains, provider, webSocketProvider } = useMemo(() => {\n // const { chains, provider, webSocketProvider } = configureChains(\n // SUPPORTED_CHAINS,\n // buildProviders(keys)\n // )\n // return { chains, provider, webSocketProvider }\n // }, [keys])\n\n const { client, Provider } = createDefaultWalletConnector({\n chains\n })\n\n // const { client, Provider } = useMemo(\n // () =>\n // createDefaultWalletConnector({\n // chains\n // }),\n // []\n // )\n\n const contextValue = {\n client,\n chains\n // provider,\n // webSocketProvider\n }\n\n return (\n <Web3Context.Provider value={contextValue}>\n <WagmiConfig client={client}>\n <Provider>{children}</Provider>\n </WagmiConfig>\n </Web3Context.Provider>\n )\n}\n","import { etherscanAddressURL, truncateEthAddress } from \"@hybrd/utils\"\nimport clsx from \"clsx\"\nimport { useEnsName } from \"../hooks/internal\"\nimport { useAccount, useConnect, useNetwork } from \"wagmi\"\n\nexport default function ConnectedAs(props: {\n className?: string\n chainId?: number\n}) {\n const { className, chainId } = props\n const { address, isConnected } = useAccount()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const ens = useEnsName(address)\n\n return (\n <p\n className={clsx(\n className,\n \"text-sm text-center flex space-x-3 items-center justify-center text-gray\"\n )}\n >\n {!isConnected && (\n <button onClick={() => connect({ connector: connectors[0] })}>\n Connect Wallet\n </button>\n )}\n\n {isConnected && (\n <span className=\"\">\n connected as{\" \"}\n <a\n href={etherscanAddressURL(address, chainId || network.id)}\n className={clsx(className, \"underline\")}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {ens || truncateEthAddress(address as string)}\n </a>\n </span>\n )}\n </p>\n )\n}\n","import { useProvider } from \"wagmi\"\nimport { useEffect, useState } from \"react\"\n\n/**\n * The wagmi useEnsName does not respect the chainId property.\n */\nexport function useEnsName(address: `0x${string}`) {\n const [ens, setENS] = useState<string | null>()\n const provider = useProvider({ chainId: 1 })\n\n useEffect(() => {\n if (!address) return\n provider.lookupAddress(address).then(setENS)\n }, [name, provider])\n\n return ens\n}\n","import type {\n TransactionReceipt,\n TransactionResponse\n} from \"@ethersproject/providers\"\nimport { BigNumber } from \"ethers\"\nimport { useCallback, useState } from \"react\"\nimport { useContract, useSigner } from \"wagmi\"\n\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype UseMinting = {\n isMinting: boolean\n isSuccess: boolean\n isError: boolean\n mint: (amount: number) => Promise<TransactionReceipt | undefined>\n}\n\ntype MintOpts = {\n value?: BigNumber | string\n gasPrice?: BigNumber | number\n}\n\ntype Props = {\n contract: DeployedContract\n}\n\nexport const useMinting = (props: Props): UseMinting => {\n const { contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const { data: signer } = useSigner({ chainId })\n\n const [isMinting, setMinting] = useState<boolean>(false)\n const [isSuccess, setSuccess] = useState<boolean>(false)\n const [isError, setError] = useState<boolean>(false)\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const mint = useCallback(\n async (amount: number, opts: MintOpts = {}) => {\n if (!contract) return\n setMinting(true)\n\n // For localhost, we need to set the gas price manually\n // const gasPrice = chainId === 1337 ? await signer.getGasPrice() : null\n const { value = BigNumber.from(\"0\"), gasPrice } = opts\n\n return contract\n .connect(signer)\n .mint(amount, {\n value,\n gasPrice\n })\n .then((tx: TransactionResponse) => tx.wait())\n .then((reciept: TransactionReceipt) => {\n setSuccess(true)\n setTimeout(() => setSuccess(false), 3000)\n return reciept\n })\n .catch((err: Error) => {\n console.error(err)\n setError(true)\n setTimeout(() => setError(false), 1000)\n })\n .finally(() => setMinting(false))\n },\n [signer, contract, chainId]\n )\n\n return {\n isMinting,\n isSuccess,\n isError,\n mint\n }\n}\n","import clsx from \"clsx\"\nimport styles from \"./DefaultButton.module.css\"\n\nexport type DefaultButtonProps = {\n className?: string\n intent?: \"default\" | \"success\" | \"error\"\n onClick?: () => void\n children: React.ReactNode\n disabled?: boolean\n}\n\nconst INTENTS = {\n default: styles.DefaultButtonBase,\n success: styles.DefaultButtonSuccess,\n error: styles.DefaultButtonError\n}\n\nconst DefaultButton = (props: DefaultButtonProps) => {\n const {\n // className = \"px-8 py-3 transition-all cursor-pointer duration-250 hover:scale-[1.05] rounded-xl font-bold\",\n className = styles.DefaultButton,\n intent = \"default\",\n onClick,\n children,\n disabled\n } = props\n\n return (\n <button\n className={clsx(\n className,\n INTENTS[intent],\n disabled && styles.DefaultButtonDisabled\n )}\n onClick={onClick}\n >\n {children}\n </button>\n )\n}\n\nexport default DefaultButton\n","import { useMinting } from \"../hooks/useMinting\"\nimport { useConnect, useNetwork, useSigner, useSwitchNetwork } from \"wagmi\"\nimport DefaultButton, { DefaultButtonProps } from \"./DefaultButton\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype MintButtonProps = {\n className?: string\n contract: DeployedContract\n button?: React.FC<DefaultButtonProps>\n amount?: number\n}\n\nconst MintButton = (props: MintButtonProps) => {\n const {\n amount = 1,\n button: Button = DefaultButton,\n className,\n contract\n } = props\n const { data: signer } = useSigner()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const { switchNetwork } = useSwitchNetwork()\n\n const { isMinting, isSuccess, isError, mint } = useMinting({ contract })\n\n if (isMinting) {\n return (\n <Button disabled className={className}>\n Minting\n </Button>\n )\n }\n\n if (isSuccess) {\n return (\n <Button disabled className={className} intent=\"success\">\n Minted\n </Button>\n )\n }\n\n if (isError) {\n return (\n <Button disabled className={className} intent=\"error\">\n Error Occurred\n </Button>\n )\n }\n\n if (!signer) {\n const connector = connectors[0]\n return (\n <Button className={className} onClick={() => connect({ connector })}>\n Connect Wallet\n </Button>\n )\n }\n\n if (network?.id !== contract?.chainId && switchNetwork) {\n return (\n <Button\n onClick={() => switchNetwork(contract?.chainId)}\n className={className}\n intent=\"error\"\n >\n Switch Network\n </Button>\n )\n }\n\n return (\n <Button className={className} onClick={() => mint(amount)}>\n Mint Now\n </Button>\n )\n}\n\nexport default MintButton\n","import { DeployedContract } from \"@hybrd/types\"\nimport { BigNumber } from \"ethers\"\nimport { useEffect, useState } from \"react\"\nimport { useContract, useProvider } from \"wagmi\"\n\ntype UseTokenGating = {\n isLoading: boolean\n address: string\n allow: boolean\n deny: boolean\n}\n\nexport function useTokenGating(props: {\n contract: DeployedContract\n address: `0x${string}`\n}): UseTokenGating {\n const { address, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n\n const [isLoading, setLoading] = useState(true)\n const [allow, setAllow] = useState<boolean>()\n const [deny, setDeny] = useState<boolean>()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n useEffect(() => {\n if (!deployedContract) {\n setLoading(false)\n setAllow(false)\n setDeny(true)\n }\n\n if (!contract) return\n contract\n .connect(provider)\n .balanceOf(address)\n .then((res: BigNumber) => res.toNumber())\n // .then((bal) => bal > 0)\n .then((allow) => {\n console.log({ allow })\n setAllow(allow)\n setDeny(!allow)\n })\n .catch((err: Error) => {\n console.error(err)\n setAllow(false)\n setDeny(true)\n })\n .finally(() => setLoading(false))\n }, [address, deployedContract])\n\n return {\n isLoading: isLoading,\n address,\n allow,\n deny\n }\n}\n","import React from \"react\"\nimport { useAccount } from \"wagmi\"\nimport { useTokenGating } from \"../hooks/useTokenGating\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype Props = {\n children: React.ReactNode\n contract: DeployedContract\n loading?: React.ReactNode\n deny?: React.ReactNode\n}\n\nconst TokenGate: React.FC<Props> = ({\n children,\n contract,\n loading: loadingComponent = <p>Loading</p>,\n deny: denyComponent = <p>You must own a token to view this content.</p>\n}: Props) => {\n const { address } = useAccount()\n const { isLoading, allow } = useTokenGating({ address, contract })\n\n return <>{isLoading ? loadingComponent : allow ? children : denyComponent}</>\n}\n\nexport default TokenGate\n","import { DeployedContract } from \"@hybrd/types\"\nimport { useBlockNumber, useContract, useProvider } from \"wagmi\"\nimport { useAsyncMemo } from \"../hooks/internal/useAsyncMemo\"\nimport { BigNumber } from \"ethers\"\n\ntype TotalSupplyProps = {\n className?: string\n contract: DeployedContract\n}\n\nconst TotalSupply = (props: TotalSupplyProps) => {\n const { className, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n const { data: block } = useBlockNumber()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const totalSupply: number = useAsyncMemo(() => {\n if (!contract) return\n return contract\n .connect(provider)\n .totalSupply()\n .then((res: BigNumber) => res.toNumber())\n }, [contract, block])\n\n return <span className={className}>{totalSupply}</span>\n}\n\nexport default TotalSupply\n","import { DependencyList, useEffect, useState } from \"react\"\n\ntype Factory<T> = () => Promise<T | undefined | null>\n\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList\n): T | undefined\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial: T\n): T\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial?: T\n) {\n const [val, setVal] = useState<T | undefined>(initial)\n\n useEffect(() => {\n let cancel = false\n const promise = factory()\n if (promise === undefined || promise === null) return\n\n promise\n .then((val) => {\n if (!cancel) {\n setVal(val)\n }\n })\n .catch((error) => {\n console.error(`Error in useAsyncMemo: ${error}`)\n })\n\n return () => {\n cancel = true\n }\n }, deps)\n\n return val\n}\n","import { BigNumber, ethers, Signer, utils, Wallet } from \"ethers\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { useBlockNumber, useProvider, useWebSocketProvider } from \"wagmi\"\nimport type { BytesLike, Deferrable } from \"ethers/lib/utils\"\n\ntype DataOrFn = BytesLike | ((signer: Signer) => BytesLike) | null\n\ntype Estimate = {\n gas?: number\n gasPrice?: number\n wei?: number\n eth?: number\n}\n\nconst useBlockBeat = () => {\n const [block, setBlock] = useState<number>()\n useBlockNumber({ watch: true, onBlock: setBlock })\n\n return block\n}\n\ntype Opts = {\n deployData: DataOrFn\n chainId?: number\n}\n\nexport function useEstimation(opts: Opts) {\n const { deployData, chainId } = opts\n const provider = useProvider({ chainId })\n const block = useBlockBeat()\n\n const [estimate, setEstimate] = useState<Estimate>({\n gas: undefined,\n gasPrice: undefined,\n wei: undefined,\n eth: undefined\n })\n\n const buildData = useCallback(\n (provider) => {\n return typeof deployData === \"function\"\n ? deployData(provider)\n : deployData\n },\n [deployData]\n )\n\n useEffect(() => {\n const { address: from } = Wallet.createRandom()\n const data = buildData(provider)\n if (!data) return\n\n getEstimate(provider, {\n data,\n from\n })\n .then(setEstimate)\n .catch((err) => {\n console.error(\"useEstimation\", err)\n })\n }, [block, provider, chainId, buildData])\n\n return estimate\n}\n\nasync function getEstimate(\n provider: any,\n tx: Deferrable<ethers.providers.TransactionRequest>\n) {\n const gas = await provider.estimateGas(tx)\n const gasPrice = await provider.getGasPrice()\n const wei = gas.mul(gasPrice)\n const eth = parseFloat(utils.formatUnits(wei, \"ether\"))\n\n return {\n gas,\n gasPrice,\n wei,\n eth\n }\n}\n"],"names":["useHybrid","useContext","Web3Context","React","createContext","client","undefined","chains","SUPPORTED_CHAINS","mainnet","goerli","arbitrum","arbitrumGoerli","localhost","Web3Provider","props","console","log","children","wallet","createDefaultWalletConnector","Provider","contextValue","_jsx","value","WagmiConfig","ConnectedAs","className","chainId","address","isConnected","useAccount","connect","connectors","useConnect","chain","network","useNetwork","ens","setENS","useState","provider","useProvider","useEffect","lookupAddress","then","name","useEnsName","_jsxs","clsx","onClick","connector","href","etherscanAddressURL","id","target","rel","truncateEthAddress","useMinting","contract","deployedContract","data","signer","useSigner","isMinting","setMinting","isSuccess","setSuccess","isError","setError","useContract","abi","mint","useCallback","async","amount","opts","BigNumber","from","gasPrice","tx","wait","reciept","setTimeout","catch","err","error","finally","INTENTS","default","styles","DefaultButtonBase","success","DefaultButtonSuccess","DefaultButtonError","DefaultButton","intent","disabled","DefaultButtonDisabled","MintButton","button","Button","switchNetwork","useSwitchNetwork","useTokenGating","isLoading","setLoading","allow","setAllow","deny","setDeny","balanceOf","res","toNumber","TokenGate","loading","loadingComponent","denyComponent","TotalSupply","block","useBlockNumber","totalSupply","factory","deps","initial","val","setVal","cancel","promise","useAsyncMemo","useBlockBeat","setBlock","watch","onBlock","useEstimation","deployData","estimate","setEstimate","gas","wei","eth","buildData","Wallet","createRandom","estimateGas","getGasPrice","mul","parseFloat","utils","formatUnits","getEstimate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/providers/DefaultWalletConnector.tsx","../src/providers/Web3Provider.tsx","../src/providers/helpers.ts","../src/components/ConnectedAs.tsx","../src/hooks/internal/useEnsName.tsx","../src/hooks/useMinting.ts","../src/components/DefaultButton.tsx","../src/components/MintButton.tsx","../src/hooks/useTokenGating.ts","../src/components/TokenGate.tsx","../src/components/TotalSupply.tsx","../src/hooks/internal/useAsyncMemo.ts","../src/hooks/useEstimation.ts"],"sourcesContent":["import React from \"react\"\nimport { configureChains, createClient, Client } from \"wagmi\"\nimport type { WalletConnection } from \"@hybrd/types\"\n\nexport default function DefaultWalletConnector(config) {\n const { provider, webSocketProvider } = configureChains(\n config.chains,\n config.providers\n )\n\n const client = createClient({\n autoConnect: true,\n // connectors,\n provider,\n webSocketProvider\n })\n\n return {\n client: client as Client,\n Provider: ({ children }: { children: React.ReactNode }) => <>{children}</>\n } as WalletConnection\n}\n","import { WagmiConfig, Client } from \"wagmi\"\nimport {\n mainnet,\n goerli,\n localhost,\n arbitrum,\n arbitrumGoerli\n} from \"wagmi/chains\"\n\nimport React, { useContext, useMemo } from \"react\"\n// import { Provider } from \"@ethersproject/providers\"\nimport { ProviderKeys, WalletConnector } from \"@hybrd/types\"\nimport createDefaultWalletConnector from \"./DefaultWalletConnector\"\nimport { buildProviders } from \"./helpers\"\n\nexport type Config = {\n // appName?: string\n // alchemyKey?: string\n // infuraKey?: string\n // publicProvider?: boolean\n}\n\n// export const withHybrid = (InputComponent, config: Config = {}) => {\n// return function WithHybrid(props) {\n// return (\n// <Web3Provider {...config}>\n// <InputComponent {...props} />\n// </Web3Provider>\n// )\n// }\n// }\n\nexport function useHybrid() {\n return useContext(Web3Context)\n}\n\nexport const Web3Context = React.createContext<{\n client: Client\n chains: any[]\n // provider: ({ chainId }: { chainId?: number }) => Provider\n // webSocketProvider: ({ chainId }: { chainId?: number }) => Provider\n}>({\n client: undefined,\n chains: undefined\n // provider: undefined,\n // webSocketProvider: undefined\n})\n\nconst SUPPORTED_CHAINS = [mainnet, goerli, arbitrum, arbitrumGoerli, localhost]\n\nexport function Web3Provider(\n props: {\n children: React.ReactNode\n wallet: WalletConnector\n } & ProviderKeys\n) {\n console.log({ props })\n\n const {\n children,\n wallet: createWalletConnector = createDefaultWalletConnector\n } = props\n const chains = SUPPORTED_CHAINS\n const providers = buildProviders(props)\n\n const { client, Provider } = createWalletConnector({\n chains,\n providers\n })\n\n const contextValue = {\n client,\n chains\n // provider,\n // webSocketProvider\n }\n\n return (\n <Web3Context.Provider value={contextValue}>\n <WagmiConfig client={client}>\n <Provider>{children}</Provider>\n </WagmiConfig>\n </Web3Context.Provider>\n )\n}\n","import { alchemyProvider } from \"wagmi/providers/alchemy\"\nimport { infuraProvider } from \"wagmi/providers/infura\"\nimport { publicProvider } from \"wagmi/providers/public\"\nimport type { ProviderKeys } from \"@hybrd/types\"\n\nexport function buildProviders(config: ProviderKeys) {\n const { alchemyKey, infuraKey } = config\n const providers = []\n\n if (alchemyKey) {\n providers.push(\n alchemyProvider({\n apiKey: alchemyKey\n })\n )\n }\n\n if (infuraKey) {\n providers.push(\n infuraProvider({\n apiKey: infuraKey\n })\n )\n }\n\n // TODO - add hybrid provider\n // providers.push(hybridProvider())\n\n providers.push(publicProvider())\n\n return providers\n}\n","import { etherscanAddressURL, truncateEthAddress } from \"@hybrd/utils\"\nimport clsx from \"clsx\"\nimport { useEnsName } from \"../hooks/internal\"\nimport { useAccount, useConnect, useNetwork } from \"wagmi\"\n\nexport default function ConnectedAs(props: {\n className?: string\n chainId?: number\n}) {\n const { className, chainId } = props\n const { address, isConnected } = useAccount()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const ens = useEnsName(address)\n\n return (\n <p\n className={clsx(\n className,\n \"text-sm text-center flex space-x-3 items-center justify-center text-gray\"\n )}\n >\n {!isConnected && (\n <button onClick={() => connect({ connector: connectors[0] })}>\n Connect Wallet\n </button>\n )}\n\n {isConnected && (\n <span className=\"\">\n connected as{\" \"}\n <a\n href={etherscanAddressURL(address, chainId || network.id)}\n className={clsx(className, \"underline\")}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {ens || truncateEthAddress(address as string)}\n </a>\n </span>\n )}\n </p>\n )\n}\n","import { useProvider } from \"wagmi\"\nimport { useEffect, useState } from \"react\"\n\n/**\n * The wagmi useEnsName does not respect the chainId property.\n */\nexport function useEnsName(address: `0x${string}`) {\n const [ens, setENS] = useState<string | null>()\n const provider = useProvider({ chainId: 1 })\n\n useEffect(() => {\n if (!address) return\n provider.lookupAddress(address).then(setENS)\n }, [name, provider])\n\n return ens\n}\n","import type {\n TransactionReceipt,\n TransactionResponse\n} from \"@ethersproject/providers\"\nimport { BigNumber } from \"ethers\"\nimport { useCallback, useState } from \"react\"\nimport { useContract, useSigner } from \"wagmi\"\n\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype UseMinting = {\n isMinting: boolean\n isSuccess: boolean\n isError: boolean\n mint: (amount: number) => Promise<TransactionReceipt | undefined>\n}\n\ntype MintOpts = {\n value?: BigNumber | string\n gasPrice?: BigNumber | number\n}\n\ntype Props = {\n contract: DeployedContract\n}\n\nexport const useMinting = (props: Props): UseMinting => {\n const { contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const { data: signer } = useSigner({ chainId })\n\n const [isMinting, setMinting] = useState<boolean>(false)\n const [isSuccess, setSuccess] = useState<boolean>(false)\n const [isError, setError] = useState<boolean>(false)\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const mint = useCallback(\n async (amount: number, opts: MintOpts = {}) => {\n if (!contract) return\n setMinting(true)\n\n // For localhost, we need to set the gas price manually\n // const gasPrice = chainId === 1337 ? await signer.getGasPrice() : null\n const { value = BigNumber.from(\"0\"), gasPrice } = opts\n\n return contract\n .connect(signer)\n .mint(amount, {\n value,\n gasPrice\n })\n .then((tx: TransactionResponse) => tx.wait())\n .then((reciept: TransactionReceipt) => {\n setSuccess(true)\n setTimeout(() => setSuccess(false), 3000)\n return reciept\n })\n .catch((err: Error) => {\n console.error(err)\n setError(true)\n setTimeout(() => setError(false), 1000)\n })\n .finally(() => setMinting(false))\n },\n [signer, contract, chainId]\n )\n\n return {\n isMinting,\n isSuccess,\n isError,\n mint\n }\n}\n","import clsx from \"clsx\"\nimport styles from \"./DefaultButton.module.css\"\n\nexport type DefaultButtonProps = {\n className?: string\n intent?: \"default\" | \"success\" | \"error\"\n onClick?: () => void\n children: React.ReactNode\n disabled?: boolean\n}\n\nconst INTENTS = {\n default: styles.DefaultButtonBase,\n success: styles.DefaultButtonSuccess,\n error: styles.DefaultButtonError\n}\n\nconst DefaultButton = (props: DefaultButtonProps) => {\n const {\n // className = \"px-8 py-3 transition-all cursor-pointer duration-250 hover:scale-[1.05] rounded-xl font-bold\",\n className = styles.DefaultButton,\n intent = \"default\",\n onClick,\n children,\n disabled\n } = props\n\n return (\n <button\n className={clsx(\n className,\n INTENTS[intent],\n disabled && styles.DefaultButtonDisabled\n )}\n onClick={onClick}\n >\n {children}\n </button>\n )\n}\n\nexport default DefaultButton\n","import { useMinting } from \"../hooks/useMinting\"\nimport { useConnect, useNetwork, useSigner, useSwitchNetwork } from \"wagmi\"\nimport DefaultButton, { DefaultButtonProps } from \"./DefaultButton\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype MintButtonProps = {\n className?: string\n contract: DeployedContract\n button?: React.FC<DefaultButtonProps>\n amount?: number\n}\n\nconst MintButton = (props: MintButtonProps) => {\n const {\n amount = 1,\n button: Button = DefaultButton,\n className,\n contract\n } = props\n const { data: signer } = useSigner()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const { switchNetwork } = useSwitchNetwork()\n\n const { isMinting, isSuccess, isError, mint } = useMinting({ contract })\n\n if (isMinting) {\n return (\n <Button disabled className={className}>\n Minting\n </Button>\n )\n }\n\n if (isSuccess) {\n return (\n <Button disabled className={className} intent=\"success\">\n Minted\n </Button>\n )\n }\n\n if (isError) {\n return (\n <Button disabled className={className} intent=\"error\">\n Error Occurred\n </Button>\n )\n }\n\n if (!signer) {\n const connector = connectors[0]\n return (\n <Button className={className} onClick={() => connect({ connector })}>\n Connect Wallet\n </Button>\n )\n }\n\n if (network?.id !== contract?.chainId && switchNetwork) {\n return (\n <Button\n onClick={() => switchNetwork(contract?.chainId)}\n className={className}\n intent=\"error\"\n >\n Switch Network\n </Button>\n )\n }\n\n return (\n <Button className={className} onClick={() => mint(amount)}>\n Mint Now\n </Button>\n )\n}\n\nexport default MintButton\n","import { DeployedContract } from \"@hybrd/types\"\nimport { BigNumber } from \"ethers\"\nimport { useEffect, useState } from \"react\"\nimport { useContract, useProvider } from \"wagmi\"\n\ntype UseTokenGating = {\n isLoading: boolean\n address: string\n allow: boolean\n deny: boolean\n}\n\nexport function useTokenGating(props: {\n contract: DeployedContract\n address: `0x${string}`\n}): UseTokenGating {\n const { address, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n\n const [isLoading, setLoading] = useState(true)\n const [allow, setAllow] = useState<boolean>()\n const [deny, setDeny] = useState<boolean>()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n useEffect(() => {\n if (!deployedContract) {\n setLoading(false)\n setAllow(false)\n setDeny(true)\n }\n\n if (!contract) return\n contract\n .connect(provider)\n .balanceOf(address)\n .then((res: BigNumber) => res.toNumber())\n // .then((bal) => bal > 0)\n .then((allow) => {\n console.log({ allow })\n setAllow(allow)\n setDeny(!allow)\n })\n .catch((err: Error) => {\n console.error(err)\n setAllow(false)\n setDeny(true)\n })\n .finally(() => setLoading(false))\n }, [address, deployedContract])\n\n return {\n isLoading: isLoading,\n address,\n allow,\n deny\n }\n}\n","import React from \"react\"\nimport { useAccount } from \"wagmi\"\nimport { useTokenGating } from \"../hooks/useTokenGating\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype Props = {\n children: React.ReactNode\n contract: DeployedContract\n loading?: React.ReactNode\n deny?: React.ReactNode\n}\n\nconst TokenGate: React.FC<Props> = ({\n children,\n contract,\n loading: loadingComponent = <p>Loading</p>,\n deny: denyComponent = <p>You must own a token to view this content.</p>\n}: Props) => {\n const { address } = useAccount()\n const { isLoading, allow } = useTokenGating({ address, contract })\n\n return <>{isLoading ? loadingComponent : allow ? children : denyComponent}</>\n}\n\nexport default TokenGate\n","import { DeployedContract } from \"@hybrd/types\"\nimport { useBlockNumber, useContract, useProvider } from \"wagmi\"\nimport { useAsyncMemo } from \"../hooks/internal/useAsyncMemo\"\nimport { BigNumber } from \"ethers\"\n\ntype TotalSupplyProps = {\n className?: string\n contract: DeployedContract\n}\n\nconst TotalSupply = (props: TotalSupplyProps) => {\n const { className, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n const { data: block } = useBlockNumber()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const totalSupply: number = useAsyncMemo(() => {\n if (!contract) return\n return contract\n .connect(provider)\n .totalSupply()\n .then((res: BigNumber) => res.toNumber())\n }, [contract, block])\n\n return <span className={className}>{totalSupply}</span>\n}\n\nexport default TotalSupply\n","import { DependencyList, useEffect, useState } from \"react\"\n\ntype Factory<T> = () => Promise<T | undefined | null>\n\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList\n): T | undefined\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial: T\n): T\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial?: T\n) {\n const [val, setVal] = useState<T | undefined>(initial)\n\n useEffect(() => {\n let cancel = false\n const promise = factory()\n if (promise === undefined || promise === null) return\n\n promise\n .then((val) => {\n if (!cancel) {\n setVal(val)\n }\n })\n .catch((error) => {\n console.error(`Error in useAsyncMemo: ${error}`)\n })\n\n return () => {\n cancel = true\n }\n }, deps)\n\n return val\n}\n","import { BigNumber, ethers, Signer, utils, Wallet } from \"ethers\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { useBlockNumber, useProvider, useWebSocketProvider } from \"wagmi\"\nimport type { BytesLike, Deferrable } from \"ethers/lib/utils\"\n\ntype DataOrFn = BytesLike | ((signer: Signer) => BytesLike) | null\n\ntype Estimate = {\n gas?: number\n gasPrice?: number\n wei?: number\n eth?: number\n}\n\nconst useBlockBeat = () => {\n const [block, setBlock] = useState<number>()\n useBlockNumber({ watch: true, onBlock: setBlock })\n\n return block\n}\n\ntype Opts = {\n deployData: DataOrFn\n chainId?: number\n}\n\nexport function useEstimation(opts: Opts) {\n const { deployData, chainId } = opts\n const provider = useProvider({ chainId })\n const block = useBlockBeat()\n\n const [estimate, setEstimate] = useState<Estimate>({\n gas: undefined,\n gasPrice: undefined,\n wei: undefined,\n eth: undefined\n })\n\n const buildData = useCallback(\n (provider) => {\n return typeof deployData === \"function\"\n ? deployData(provider)\n : deployData\n },\n [deployData]\n )\n\n useEffect(() => {\n const { address: from } = Wallet.createRandom()\n const data = buildData(provider)\n if (!data) return\n\n getEstimate(provider, {\n data,\n from\n })\n .then(setEstimate)\n .catch((err) => {\n console.error(\"useEstimation\", err)\n })\n }, [block, provider, chainId, buildData])\n\n return estimate\n}\n\nasync function getEstimate(\n provider: any,\n tx: Deferrable<ethers.providers.TransactionRequest>\n) {\n const gas = await provider.estimateGas(tx)\n const gasPrice = await provider.getGasPrice()\n const wei = gas.mul(gasPrice)\n const eth = parseFloat(utils.formatUnits(wei, \"ether\"))\n\n return {\n gas,\n gasPrice,\n wei,\n eth\n }\n}\n"],"names":["DefaultWalletConnector","config","provider","webSocketProvider","configureChains","chains","providers","client","createClient","autoConnect","Provider","children","_jsx","_Fragment","useHybrid","useContext","Web3Context","React","createContext","undefined","SUPPORTED_CHAINS","mainnet","goerli","arbitrum","arbitrumGoerli","localhost","Web3Provider","props","console","log","wallet","createWalletConnector","createDefaultWalletConnector","alchemyKey","infuraKey","push","alchemyProvider","apiKey","infuraProvider","publicProvider","buildProviders","contextValue","value","WagmiConfig","ConnectedAs","className","chainId","address","isConnected","useAccount","connect","connectors","useConnect","chain","network","useNetwork","ens","setENS","useState","useProvider","useEffect","lookupAddress","then","name","useEnsName","_jsxs","clsx","onClick","connector","href","etherscanAddressURL","id","target","rel","truncateEthAddress","useMinting","contract","deployedContract","data","signer","useSigner","isMinting","setMinting","isSuccess","setSuccess","isError","setError","useContract","abi","mint","useCallback","async","amount","opts","BigNumber","from","gasPrice","tx","wait","reciept","setTimeout","catch","err","error","finally","INTENTS","default","styles","DefaultButtonBase","success","DefaultButtonSuccess","DefaultButtonError","DefaultButton","intent","disabled","DefaultButtonDisabled","MintButton","button","Button","switchNetwork","useSwitchNetwork","useTokenGating","isLoading","setLoading","allow","setAllow","deny","setDeny","balanceOf","res","toNumber","TokenGate","loading","loadingComponent","denyComponent","TotalSupply","block","useBlockNumber","totalSupply","factory","deps","initial","val","setVal","cancel","promise","useAsyncMemo","useBlockBeat","setBlock","watch","onBlock","useEstimation","deployData","estimate","setEstimate","gas","wei","eth","buildData","Wallet","createRandom","estimateGas","getGasPrice","mul","parseFloat","utils","formatUnits","getEstimate"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t,
|
|
1
|
+
import{jsx as t,Fragment as e,jsxs as n}from"react/jsx-runtime";import{configureChains as r,createClient as o,WagmiConfig as c,useProvider as a,useAccount as i,useConnect as s,useNetwork as l,useSigner as u,useContract as d,useSwitchNetwork as h,useBlockNumber as m}from"wagmi";import{mainnet as f,goerli as p,arbitrum as b,arbitrumGoerli as B,localhost as v}from"wagmi/chains";import w,{useContext as D,useState as g,useEffect as y,useCallback as N}from"react";import{alchemyProvider as _}from"wagmi/providers/alchemy";import{infuraProvider as k}from"wagmi/providers/infura";import{publicProvider as I}from"wagmi/providers/public";import{etherscanAddressURL as x,truncateEthAddress as C}from"@hybrd/utils";export*from"@hybrd/utils";import P from"clsx";import{BigNumber as S,Wallet as E,utils as K}from"ethers";export*from"@hybrd/types";function M(n){const{provider:c,webSocketProvider:a}=r(n.chains,n.providers);return{client:o({autoConnect:!0,provider:c,webSocketProvider:a}),Provider:({children:n})=>t(e,{children:n})}}function L(){return D(O)}const O=w.createContext({client:void 0,chains:void 0}),j=[f,p,b,B,v];function A(e){console.log({props:e});const{children:n,wallet:r=M}=e,o=j,a=function(t){const{alchemyKey:e,infuraKey:n}=t,r=[];return e&&r.push(_({apiKey:e})),n&&r.push(k({apiKey:n})),r.push(I()),r}(e),{client:i,Provider:s}=r({chains:o,providers:a}),l={client:i,chains:o};return t(O.Provider,{value:l,children:t(c,{client:i,children:t(s,{children:n})})})}function G(e){const{className:r,chainId:o}=e,{address:c,isConnected:u}=i(),{connect:d,connectors:h}=s(),{chain:m}=l(),f=function(t){const[e,n]=g(),r=a({chainId:1});return y((()=>{t&&r.lookupAddress(t).then(n)}),[name,r]),e}(c);return n("p",{className:P(r,"text-sm text-center flex space-x-3 items-center justify-center text-gray"),children:[!u&&t("button",{onClick:()=>d({connector:h[0]}),children:"Connect Wallet"}),u&&n("span",{className:"",children:["connected as"," ",t("a",{href:x(c,o||m.id),className:P(r,"underline"),target:"_blank",rel:"noreferrer",children:f||C(c)})]})]})}const R=t=>{const{contract:e}=t,n=e?.chainId,{data:r}=u({chainId:n}),[o,c]=g(!1),[a,i]=g(!1),[s,l]=g(!1),h=d({address:e?.address,abi:e?.abi});return{isMinting:o,isSuccess:a,isError:s,mint:N((async(t,e={})=>{if(!h)return;c(!0);const{value:n=S.from("0"),gasPrice:o}=e;return h.connect(r).mint(t,{value:n,gasPrice:o}).then((t=>t.wait())).then((t=>(i(!0),setTimeout((()=>i(!1)),3e3),t))).catch((t=>{console.error(t),l(!0),setTimeout((()=>l(!1)),1e3)})).finally((()=>c(!1)))}),[r,h,n])}};var T={DefaultButton:"DefaultButton-module_DefaultButton__Px-Zc",DefaultButtonBase:"DefaultButton-module_DefaultButtonBase__KRytO",DefaultButtonSuccess:"DefaultButton-module_DefaultButtonSuccess__eaosU",DefaultButtonError:"DefaultButton-module_DefaultButtonError__B7CKv",DefaultButtonDisabled:"DefaultButton-module_DefaultButtonDisabled__-PIdK"};const U={default:T.DefaultButtonBase,success:T.DefaultButtonSuccess,error:T.DefaultButtonError},W=e=>{const{className:n=T.DefaultButton,intent:r="default",onClick:o,children:c,disabled:a}=e;return t("button",{className:P(n,U[r],a&&T.DefaultButtonDisabled),onClick:o,children:c})},F=e=>{const{amount:n=1,button:r=W,className:o,contract:c}=e,{data:a}=u(),{connect:i,connectors:d}=s(),{chain:m}=l(),{switchNetwork:f}=h(),{isMinting:p,isSuccess:b,isError:B,mint:v}=R({contract:c});if(p)return t(r,{disabled:!0,className:o,children:"Minting"});if(b)return t(r,{disabled:!0,className:o,intent:"success",children:"Minted"});if(B)return t(r,{disabled:!0,className:o,intent:"error",children:"Error Occurred"});if(!a){const e=d[0];return t(r,{className:o,onClick:()=>i({connector:e}),children:"Connect Wallet"})}return t(r,m?.id!==c?.chainId&&f?{onClick:()=>f(c?.chainId),className:o,intent:"error",children:"Switch Network"}:{className:o,onClick:()=>v(n),children:"Mint Now"})};function Y(t){const{address:e,contract:n}=t,r=n?.chainId,o=a({chainId:r}),[c,i]=g(!0),[s,l]=g(),[u,h]=g(),m=d({address:n?.address,abi:n?.abi});return y((()=>{n||(i(!1),l(!1),h(!0)),m&&m.connect(o).balanceOf(e).then((t=>t.toNumber())).then((t=>{console.log({allow:t}),l(t),h(!t)})).catch((t=>{console.error(t),l(!1),h(!0)})).finally((()=>i(!1)))}),[e,n]),{isLoading:c,address:e,allow:s,deny:u}}const Z=({children:n,contract:r,loading:o=t("p",{children:"Loading"}),deny:c=t("p",{children:"You must own a token to view this content."})})=>{const{address:a}=i(),{isLoading:s,allow:l}=Y({address:a,contract:r});return t(e,{children:s?o:l?n:c})},$=e=>{const{className:n,contract:r}=e,o=r?.chainId,c=a({chainId:o}),{data:i}=m(),s=d({address:r?.address,abi:r?.abi}),l=function(t,e,n){const[r,o]=g(n);return y((()=>{let e=!1;const n=t();if(null!=n)return n.then((t=>{e||o(t)})).catch((t=>{console.error(`Error in useAsyncMemo: ${t}`)})),()=>{e=!0}}),e),r}((()=>{if(s)return s.connect(c).totalSupply().then((t=>t.toNumber()))}),[s,i]);return t("span",{className:n,children:l})},q=()=>{const[t,e]=g();return m({watch:!0,onBlock:e}),t};function z(t){const{deployData:e,chainId:n}=t,r=a({chainId:n}),o=q(),[c,i]=g({gas:void 0,gasPrice:void 0,wei:void 0,eth:void 0}),s=N((t=>"function"==typeof e?e(t):e),[e]);return y((()=>{const{address:t}=E.createRandom(),e=s(r);e&&async function(t,e){const n=await t.estimateGas(e),r=await t.getGasPrice(),o=n.mul(r),c=parseFloat(K.formatUnits(o,"ether"));return{gas:n,gasPrice:r,wei:o,eth:c}}(r,{data:e,from:t}).then(i).catch((t=>{console.error("useEstimation",t)}))}),[o,r,n,s]),c}export{G as ConnectedAs,F as MintButton,Z as TokenGate,$ as TotalSupply,A as Web3Provider,z as useEstimation,L as useHybrid,R as useMinting,Y as useTokenGating};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/providers/Web3Provider.tsx","../src/components/ConnectedAs.tsx","../src/hooks/internal/useEnsName.tsx","../src/hooks/useMinting.ts","../src/components/DefaultButton.tsx","../src/components/MintButton.tsx","../src/hooks/useTokenGating.ts","../src/components/TokenGate.tsx","../src/components/TotalSupply.tsx","../src/hooks/internal/useAsyncMemo.ts","../src/hooks/useEstimation.ts"],"sourcesContent":["import { WagmiConfig, Client } from \"wagmi\"\nimport {\n mainnet,\n goerli,\n localhost,\n arbitrum,\n arbitrumGoerli\n} from \"wagmi/chains\"\n\nimport React, { useContext, useMemo } from \"react\"\n// import { Provider } from \"@ethersproject/providers\"\nimport { WalletConnector } from \"@hybrd/types\"\nimport createDefaultWalletConnector from \"./DefaultWalletConnector\"\n\nexport type Config = {\n // appName?: string\n // alchemyKey?: string\n // infuraKey?: string\n // publicProvider?: boolean\n}\n\n// export const withHybrid = (InputComponent, config: Config = {}) => {\n// return function WithHybrid(props) {\n// return (\n// <Web3Provider {...config}>\n// <InputComponent {...props} />\n// </Web3Provider>\n// )\n// }\n// }\n\nexport function useHybrid() {\n return useContext(Web3Context)\n}\n\nexport const Web3Context = React.createContext<{\n client: Client\n chains: any[]\n // provider: ({ chainId }: { chainId?: number }) => Provider\n // webSocketProvider: ({ chainId }: { chainId?: number }) => Provider\n}>({\n client: undefined,\n chains: undefined\n // provider: undefined,\n // webSocketProvider: undefined\n})\n\nconst SUPPORTED_CHAINS = [mainnet, goerli, arbitrum, arbitrumGoerli, localhost]\n\nexport function Web3Provider(props: {\n children: React.ReactNode\n wallet: WalletConnector\n}) {\n console.log({ props })\n\n const { children, wallet: createDefaultWalletConnector } = props\n const chains = SUPPORTED_CHAINS\n\n // const { chains, provider, webSocketProvider } = useMemo(() => {\n // const { chains, provider, webSocketProvider } = configureChains(\n // SUPPORTED_CHAINS,\n // buildProviders(keys)\n // )\n // return { chains, provider, webSocketProvider }\n // }, [keys])\n\n const { client, Provider } = createDefaultWalletConnector({\n chains\n })\n\n // const { client, Provider } = useMemo(\n // () =>\n // createDefaultWalletConnector({\n // chains\n // }),\n // []\n // )\n\n const contextValue = {\n client,\n chains\n // provider,\n // webSocketProvider\n }\n\n return (\n <Web3Context.Provider value={contextValue}>\n <WagmiConfig client={client}>\n <Provider>{children}</Provider>\n </WagmiConfig>\n </Web3Context.Provider>\n )\n}\n","import { etherscanAddressURL, truncateEthAddress } from \"@hybrd/utils\"\nimport clsx from \"clsx\"\nimport { useEnsName } from \"../hooks/internal\"\nimport { useAccount, useConnect, useNetwork } from \"wagmi\"\n\nexport default function ConnectedAs(props: {\n className?: string\n chainId?: number\n}) {\n const { className, chainId } = props\n const { address, isConnected } = useAccount()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const ens = useEnsName(address)\n\n return (\n <p\n className={clsx(\n className,\n \"text-sm text-center flex space-x-3 items-center justify-center text-gray\"\n )}\n >\n {!isConnected && (\n <button onClick={() => connect({ connector: connectors[0] })}>\n Connect Wallet\n </button>\n )}\n\n {isConnected && (\n <span className=\"\">\n connected as{\" \"}\n <a\n href={etherscanAddressURL(address, chainId || network.id)}\n className={clsx(className, \"underline\")}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {ens || truncateEthAddress(address as string)}\n </a>\n </span>\n )}\n </p>\n )\n}\n","import { useProvider } from \"wagmi\"\nimport { useEffect, useState } from \"react\"\n\n/**\n * The wagmi useEnsName does not respect the chainId property.\n */\nexport function useEnsName(address: `0x${string}`) {\n const [ens, setENS] = useState<string | null>()\n const provider = useProvider({ chainId: 1 })\n\n useEffect(() => {\n if (!address) return\n provider.lookupAddress(address).then(setENS)\n }, [name, provider])\n\n return ens\n}\n","import type {\n TransactionReceipt,\n TransactionResponse\n} from \"@ethersproject/providers\"\nimport { BigNumber } from \"ethers\"\nimport { useCallback, useState } from \"react\"\nimport { useContract, useSigner } from \"wagmi\"\n\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype UseMinting = {\n isMinting: boolean\n isSuccess: boolean\n isError: boolean\n mint: (amount: number) => Promise<TransactionReceipt | undefined>\n}\n\ntype MintOpts = {\n value?: BigNumber | string\n gasPrice?: BigNumber | number\n}\n\ntype Props = {\n contract: DeployedContract\n}\n\nexport const useMinting = (props: Props): UseMinting => {\n const { contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const { data: signer } = useSigner({ chainId })\n\n const [isMinting, setMinting] = useState<boolean>(false)\n const [isSuccess, setSuccess] = useState<boolean>(false)\n const [isError, setError] = useState<boolean>(false)\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const mint = useCallback(\n async (amount: number, opts: MintOpts = {}) => {\n if (!contract) return\n setMinting(true)\n\n // For localhost, we need to set the gas price manually\n // const gasPrice = chainId === 1337 ? await signer.getGasPrice() : null\n const { value = BigNumber.from(\"0\"), gasPrice } = opts\n\n return contract\n .connect(signer)\n .mint(amount, {\n value,\n gasPrice\n })\n .then((tx: TransactionResponse) => tx.wait())\n .then((reciept: TransactionReceipt) => {\n setSuccess(true)\n setTimeout(() => setSuccess(false), 3000)\n return reciept\n })\n .catch((err: Error) => {\n console.error(err)\n setError(true)\n setTimeout(() => setError(false), 1000)\n })\n .finally(() => setMinting(false))\n },\n [signer, contract, chainId]\n )\n\n return {\n isMinting,\n isSuccess,\n isError,\n mint\n }\n}\n","import clsx from \"clsx\"\nimport styles from \"./DefaultButton.module.css\"\n\nexport type DefaultButtonProps = {\n className?: string\n intent?: \"default\" | \"success\" | \"error\"\n onClick?: () => void\n children: React.ReactNode\n disabled?: boolean\n}\n\nconst INTENTS = {\n default: styles.DefaultButtonBase,\n success: styles.DefaultButtonSuccess,\n error: styles.DefaultButtonError\n}\n\nconst DefaultButton = (props: DefaultButtonProps) => {\n const {\n // className = \"px-8 py-3 transition-all cursor-pointer duration-250 hover:scale-[1.05] rounded-xl font-bold\",\n className = styles.DefaultButton,\n intent = \"default\",\n onClick,\n children,\n disabled\n } = props\n\n return (\n <button\n className={clsx(\n className,\n INTENTS[intent],\n disabled && styles.DefaultButtonDisabled\n )}\n onClick={onClick}\n >\n {children}\n </button>\n )\n}\n\nexport default DefaultButton\n","import { useMinting } from \"../hooks/useMinting\"\nimport { useConnect, useNetwork, useSigner, useSwitchNetwork } from \"wagmi\"\nimport DefaultButton, { DefaultButtonProps } from \"./DefaultButton\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype MintButtonProps = {\n className?: string\n contract: DeployedContract\n button?: React.FC<DefaultButtonProps>\n amount?: number\n}\n\nconst MintButton = (props: MintButtonProps) => {\n const {\n amount = 1,\n button: Button = DefaultButton,\n className,\n contract\n } = props\n const { data: signer } = useSigner()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const { switchNetwork } = useSwitchNetwork()\n\n const { isMinting, isSuccess, isError, mint } = useMinting({ contract })\n\n if (isMinting) {\n return (\n <Button disabled className={className}>\n Minting\n </Button>\n )\n }\n\n if (isSuccess) {\n return (\n <Button disabled className={className} intent=\"success\">\n Minted\n </Button>\n )\n }\n\n if (isError) {\n return (\n <Button disabled className={className} intent=\"error\">\n Error Occurred\n </Button>\n )\n }\n\n if (!signer) {\n const connector = connectors[0]\n return (\n <Button className={className} onClick={() => connect({ connector })}>\n Connect Wallet\n </Button>\n )\n }\n\n if (network?.id !== contract?.chainId && switchNetwork) {\n return (\n <Button\n onClick={() => switchNetwork(contract?.chainId)}\n className={className}\n intent=\"error\"\n >\n Switch Network\n </Button>\n )\n }\n\n return (\n <Button className={className} onClick={() => mint(amount)}>\n Mint Now\n </Button>\n )\n}\n\nexport default MintButton\n","import { DeployedContract } from \"@hybrd/types\"\nimport { BigNumber } from \"ethers\"\nimport { useEffect, useState } from \"react\"\nimport { useContract, useProvider } from \"wagmi\"\n\ntype UseTokenGating = {\n isLoading: boolean\n address: string\n allow: boolean\n deny: boolean\n}\n\nexport function useTokenGating(props: {\n contract: DeployedContract\n address: `0x${string}`\n}): UseTokenGating {\n const { address, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n\n const [isLoading, setLoading] = useState(true)\n const [allow, setAllow] = useState<boolean>()\n const [deny, setDeny] = useState<boolean>()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n useEffect(() => {\n if (!deployedContract) {\n setLoading(false)\n setAllow(false)\n setDeny(true)\n }\n\n if (!contract) return\n contract\n .connect(provider)\n .balanceOf(address)\n .then((res: BigNumber) => res.toNumber())\n // .then((bal) => bal > 0)\n .then((allow) => {\n console.log({ allow })\n setAllow(allow)\n setDeny(!allow)\n })\n .catch((err: Error) => {\n console.error(err)\n setAllow(false)\n setDeny(true)\n })\n .finally(() => setLoading(false))\n }, [address, deployedContract])\n\n return {\n isLoading: isLoading,\n address,\n allow,\n deny\n }\n}\n","import React from \"react\"\nimport { useAccount } from \"wagmi\"\nimport { useTokenGating } from \"../hooks/useTokenGating\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype Props = {\n children: React.ReactNode\n contract: DeployedContract\n loading?: React.ReactNode\n deny?: React.ReactNode\n}\n\nconst TokenGate: React.FC<Props> = ({\n children,\n contract,\n loading: loadingComponent = <p>Loading</p>,\n deny: denyComponent = <p>You must own a token to view this content.</p>\n}: Props) => {\n const { address } = useAccount()\n const { isLoading, allow } = useTokenGating({ address, contract })\n\n return <>{isLoading ? loadingComponent : allow ? children : denyComponent}</>\n}\n\nexport default TokenGate\n","import { DeployedContract } from \"@hybrd/types\"\nimport { useBlockNumber, useContract, useProvider } from \"wagmi\"\nimport { useAsyncMemo } from \"../hooks/internal/useAsyncMemo\"\nimport { BigNumber } from \"ethers\"\n\ntype TotalSupplyProps = {\n className?: string\n contract: DeployedContract\n}\n\nconst TotalSupply = (props: TotalSupplyProps) => {\n const { className, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n const { data: block } = useBlockNumber()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const totalSupply: number = useAsyncMemo(() => {\n if (!contract) return\n return contract\n .connect(provider)\n .totalSupply()\n .then((res: BigNumber) => res.toNumber())\n }, [contract, block])\n\n return <span className={className}>{totalSupply}</span>\n}\n\nexport default TotalSupply\n","import { DependencyList, useEffect, useState } from \"react\"\n\ntype Factory<T> = () => Promise<T | undefined | null>\n\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList\n): T | undefined\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial: T\n): T\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial?: T\n) {\n const [val, setVal] = useState<T | undefined>(initial)\n\n useEffect(() => {\n let cancel = false\n const promise = factory()\n if (promise === undefined || promise === null) return\n\n promise\n .then((val) => {\n if (!cancel) {\n setVal(val)\n }\n })\n .catch((error) => {\n console.error(`Error in useAsyncMemo: ${error}`)\n })\n\n return () => {\n cancel = true\n }\n }, deps)\n\n return val\n}\n","import { BigNumber, ethers, Signer, utils, Wallet } from \"ethers\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { useBlockNumber, useProvider, useWebSocketProvider } from \"wagmi\"\nimport type { BytesLike, Deferrable } from \"ethers/lib/utils\"\n\ntype DataOrFn = BytesLike | ((signer: Signer) => BytesLike) | null\n\ntype Estimate = {\n gas?: number\n gasPrice?: number\n wei?: number\n eth?: number\n}\n\nconst useBlockBeat = () => {\n const [block, setBlock] = useState<number>()\n useBlockNumber({ watch: true, onBlock: setBlock })\n\n return block\n}\n\ntype Opts = {\n deployData: DataOrFn\n chainId?: number\n}\n\nexport function useEstimation(opts: Opts) {\n const { deployData, chainId } = opts\n const provider = useProvider({ chainId })\n const block = useBlockBeat()\n\n const [estimate, setEstimate] = useState<Estimate>({\n gas: undefined,\n gasPrice: undefined,\n wei: undefined,\n eth: undefined\n })\n\n const buildData = useCallback(\n (provider) => {\n return typeof deployData === \"function\"\n ? deployData(provider)\n : deployData\n },\n [deployData]\n )\n\n useEffect(() => {\n const { address: from } = Wallet.createRandom()\n const data = buildData(provider)\n if (!data) return\n\n getEstimate(provider, {\n data,\n from\n })\n .then(setEstimate)\n .catch((err) => {\n console.error(\"useEstimation\", err)\n })\n }, [block, provider, chainId, buildData])\n\n return estimate\n}\n\nasync function getEstimate(\n provider: any,\n tx: Deferrable<ethers.providers.TransactionRequest>\n) {\n const gas = await provider.estimateGas(tx)\n const gasPrice = await provider.getGasPrice()\n const wei = gas.mul(gasPrice)\n const eth = parseFloat(utils.formatUnits(wei, \"ether\"))\n\n return {\n gas,\n gasPrice,\n wei,\n eth\n }\n}\n"],"names":["useHybrid","useContext","Web3Context","React","createContext","client","undefined","chains","SUPPORTED_CHAINS","mainnet","goerli","arbitrum","arbitrumGoerli","localhost","Web3Provider","props","console","log","children","wallet","createDefaultWalletConnector","Provider","contextValue","_jsx","value","WagmiConfig","ConnectedAs","className","chainId","address","isConnected","useAccount","connect","connectors","useConnect","chain","network","useNetwork","ens","setENS","useState","provider","useProvider","useEffect","lookupAddress","then","name","useEnsName","_jsxs","clsx","onClick","connector","href","etherscanAddressURL","id","target","rel","truncateEthAddress","useMinting","contract","deployedContract","data","signer","useSigner","isMinting","setMinting","isSuccess","setSuccess","isError","setError","useContract","abi","mint","useCallback","async","amount","opts","BigNumber","from","gasPrice","tx","wait","reciept","setTimeout","catch","err","error","finally","INTENTS","default","styles","DefaultButtonBase","success","DefaultButtonSuccess","DefaultButtonError","DefaultButton","intent","disabled","DefaultButtonDisabled","MintButton","button","Button","switchNetwork","useSwitchNetwork","useTokenGating","isLoading","setLoading","allow","setAllow","deny","setDeny","balanceOf","res","toNumber","TokenGate","loading","loadingComponent","denyComponent","TotalSupply","block","useBlockNumber","totalSupply","factory","deps","initial","val","setVal","cancel","promise","useAsyncMemo","useBlockBeat","setBlock","watch","onBlock","useEstimation","deployData","estimate","setEstimate","gas","wei","eth","buildData","Wallet","createRandom","estimateGas","getGasPrice","mul","parseFloat","utils","formatUnits","getEstimate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/providers/DefaultWalletConnector.tsx","../src/providers/Web3Provider.tsx","../src/providers/helpers.ts","../src/components/ConnectedAs.tsx","../src/hooks/internal/useEnsName.tsx","../src/hooks/useMinting.ts","../src/components/DefaultButton.tsx","../src/components/MintButton.tsx","../src/hooks/useTokenGating.ts","../src/components/TokenGate.tsx","../src/components/TotalSupply.tsx","../src/hooks/internal/useAsyncMemo.ts","../src/hooks/useEstimation.ts"],"sourcesContent":["import React from \"react\"\nimport { configureChains, createClient, Client } from \"wagmi\"\nimport type { WalletConnection } from \"@hybrd/types\"\n\nexport default function DefaultWalletConnector(config) {\n const { provider, webSocketProvider } = configureChains(\n config.chains,\n config.providers\n )\n\n const client = createClient({\n autoConnect: true,\n // connectors,\n provider,\n webSocketProvider\n })\n\n return {\n client: client as Client,\n Provider: ({ children }: { children: React.ReactNode }) => <>{children}</>\n } as WalletConnection\n}\n","import { WagmiConfig, Client } from \"wagmi\"\nimport {\n mainnet,\n goerli,\n localhost,\n arbitrum,\n arbitrumGoerli\n} from \"wagmi/chains\"\n\nimport React, { useContext, useMemo } from \"react\"\n// import { Provider } from \"@ethersproject/providers\"\nimport { ProviderKeys, WalletConnector } from \"@hybrd/types\"\nimport createDefaultWalletConnector from \"./DefaultWalletConnector\"\nimport { buildProviders } from \"./helpers\"\n\nexport type Config = {\n // appName?: string\n // alchemyKey?: string\n // infuraKey?: string\n // publicProvider?: boolean\n}\n\n// export const withHybrid = (InputComponent, config: Config = {}) => {\n// return function WithHybrid(props) {\n// return (\n// <Web3Provider {...config}>\n// <InputComponent {...props} />\n// </Web3Provider>\n// )\n// }\n// }\n\nexport function useHybrid() {\n return useContext(Web3Context)\n}\n\nexport const Web3Context = React.createContext<{\n client: Client\n chains: any[]\n // provider: ({ chainId }: { chainId?: number }) => Provider\n // webSocketProvider: ({ chainId }: { chainId?: number }) => Provider\n}>({\n client: undefined,\n chains: undefined\n // provider: undefined,\n // webSocketProvider: undefined\n})\n\nconst SUPPORTED_CHAINS = [mainnet, goerli, arbitrum, arbitrumGoerli, localhost]\n\nexport function Web3Provider(\n props: {\n children: React.ReactNode\n wallet: WalletConnector\n } & ProviderKeys\n) {\n console.log({ props })\n\n const {\n children,\n wallet: createWalletConnector = createDefaultWalletConnector\n } = props\n const chains = SUPPORTED_CHAINS\n const providers = buildProviders(props)\n\n const { client, Provider } = createWalletConnector({\n chains,\n providers\n })\n\n const contextValue = {\n client,\n chains\n // provider,\n // webSocketProvider\n }\n\n return (\n <Web3Context.Provider value={contextValue}>\n <WagmiConfig client={client}>\n <Provider>{children}</Provider>\n </WagmiConfig>\n </Web3Context.Provider>\n )\n}\n","import { alchemyProvider } from \"wagmi/providers/alchemy\"\nimport { infuraProvider } from \"wagmi/providers/infura\"\nimport { publicProvider } from \"wagmi/providers/public\"\nimport type { ProviderKeys } from \"@hybrd/types\"\n\nexport function buildProviders(config: ProviderKeys) {\n const { alchemyKey, infuraKey } = config\n const providers = []\n\n if (alchemyKey) {\n providers.push(\n alchemyProvider({\n apiKey: alchemyKey\n })\n )\n }\n\n if (infuraKey) {\n providers.push(\n infuraProvider({\n apiKey: infuraKey\n })\n )\n }\n\n // TODO - add hybrid provider\n // providers.push(hybridProvider())\n\n providers.push(publicProvider())\n\n return providers\n}\n","import { etherscanAddressURL, truncateEthAddress } from \"@hybrd/utils\"\nimport clsx from \"clsx\"\nimport { useEnsName } from \"../hooks/internal\"\nimport { useAccount, useConnect, useNetwork } from \"wagmi\"\n\nexport default function ConnectedAs(props: {\n className?: string\n chainId?: number\n}) {\n const { className, chainId } = props\n const { address, isConnected } = useAccount()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const ens = useEnsName(address)\n\n return (\n <p\n className={clsx(\n className,\n \"text-sm text-center flex space-x-3 items-center justify-center text-gray\"\n )}\n >\n {!isConnected && (\n <button onClick={() => connect({ connector: connectors[0] })}>\n Connect Wallet\n </button>\n )}\n\n {isConnected && (\n <span className=\"\">\n connected as{\" \"}\n <a\n href={etherscanAddressURL(address, chainId || network.id)}\n className={clsx(className, \"underline\")}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {ens || truncateEthAddress(address as string)}\n </a>\n </span>\n )}\n </p>\n )\n}\n","import { useProvider } from \"wagmi\"\nimport { useEffect, useState } from \"react\"\n\n/**\n * The wagmi useEnsName does not respect the chainId property.\n */\nexport function useEnsName(address: `0x${string}`) {\n const [ens, setENS] = useState<string | null>()\n const provider = useProvider({ chainId: 1 })\n\n useEffect(() => {\n if (!address) return\n provider.lookupAddress(address).then(setENS)\n }, [name, provider])\n\n return ens\n}\n","import type {\n TransactionReceipt,\n TransactionResponse\n} from \"@ethersproject/providers\"\nimport { BigNumber } from \"ethers\"\nimport { useCallback, useState } from \"react\"\nimport { useContract, useSigner } from \"wagmi\"\n\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype UseMinting = {\n isMinting: boolean\n isSuccess: boolean\n isError: boolean\n mint: (amount: number) => Promise<TransactionReceipt | undefined>\n}\n\ntype MintOpts = {\n value?: BigNumber | string\n gasPrice?: BigNumber | number\n}\n\ntype Props = {\n contract: DeployedContract\n}\n\nexport const useMinting = (props: Props): UseMinting => {\n const { contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const { data: signer } = useSigner({ chainId })\n\n const [isMinting, setMinting] = useState<boolean>(false)\n const [isSuccess, setSuccess] = useState<boolean>(false)\n const [isError, setError] = useState<boolean>(false)\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const mint = useCallback(\n async (amount: number, opts: MintOpts = {}) => {\n if (!contract) return\n setMinting(true)\n\n // For localhost, we need to set the gas price manually\n // const gasPrice = chainId === 1337 ? await signer.getGasPrice() : null\n const { value = BigNumber.from(\"0\"), gasPrice } = opts\n\n return contract\n .connect(signer)\n .mint(amount, {\n value,\n gasPrice\n })\n .then((tx: TransactionResponse) => tx.wait())\n .then((reciept: TransactionReceipt) => {\n setSuccess(true)\n setTimeout(() => setSuccess(false), 3000)\n return reciept\n })\n .catch((err: Error) => {\n console.error(err)\n setError(true)\n setTimeout(() => setError(false), 1000)\n })\n .finally(() => setMinting(false))\n },\n [signer, contract, chainId]\n )\n\n return {\n isMinting,\n isSuccess,\n isError,\n mint\n }\n}\n","import clsx from \"clsx\"\nimport styles from \"./DefaultButton.module.css\"\n\nexport type DefaultButtonProps = {\n className?: string\n intent?: \"default\" | \"success\" | \"error\"\n onClick?: () => void\n children: React.ReactNode\n disabled?: boolean\n}\n\nconst INTENTS = {\n default: styles.DefaultButtonBase,\n success: styles.DefaultButtonSuccess,\n error: styles.DefaultButtonError\n}\n\nconst DefaultButton = (props: DefaultButtonProps) => {\n const {\n // className = \"px-8 py-3 transition-all cursor-pointer duration-250 hover:scale-[1.05] rounded-xl font-bold\",\n className = styles.DefaultButton,\n intent = \"default\",\n onClick,\n children,\n disabled\n } = props\n\n return (\n <button\n className={clsx(\n className,\n INTENTS[intent],\n disabled && styles.DefaultButtonDisabled\n )}\n onClick={onClick}\n >\n {children}\n </button>\n )\n}\n\nexport default DefaultButton\n","import { useMinting } from \"../hooks/useMinting\"\nimport { useConnect, useNetwork, useSigner, useSwitchNetwork } from \"wagmi\"\nimport DefaultButton, { DefaultButtonProps } from \"./DefaultButton\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype MintButtonProps = {\n className?: string\n contract: DeployedContract\n button?: React.FC<DefaultButtonProps>\n amount?: number\n}\n\nconst MintButton = (props: MintButtonProps) => {\n const {\n amount = 1,\n button: Button = DefaultButton,\n className,\n contract\n } = props\n const { data: signer } = useSigner()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const { switchNetwork } = useSwitchNetwork()\n\n const { isMinting, isSuccess, isError, mint } = useMinting({ contract })\n\n if (isMinting) {\n return (\n <Button disabled className={className}>\n Minting\n </Button>\n )\n }\n\n if (isSuccess) {\n return (\n <Button disabled className={className} intent=\"success\">\n Minted\n </Button>\n )\n }\n\n if (isError) {\n return (\n <Button disabled className={className} intent=\"error\">\n Error Occurred\n </Button>\n )\n }\n\n if (!signer) {\n const connector = connectors[0]\n return (\n <Button className={className} onClick={() => connect({ connector })}>\n Connect Wallet\n </Button>\n )\n }\n\n if (network?.id !== contract?.chainId && switchNetwork) {\n return (\n <Button\n onClick={() => switchNetwork(contract?.chainId)}\n className={className}\n intent=\"error\"\n >\n Switch Network\n </Button>\n )\n }\n\n return (\n <Button className={className} onClick={() => mint(amount)}>\n Mint Now\n </Button>\n )\n}\n\nexport default MintButton\n","import { DeployedContract } from \"@hybrd/types\"\nimport { BigNumber } from \"ethers\"\nimport { useEffect, useState } from \"react\"\nimport { useContract, useProvider } from \"wagmi\"\n\ntype UseTokenGating = {\n isLoading: boolean\n address: string\n allow: boolean\n deny: boolean\n}\n\nexport function useTokenGating(props: {\n contract: DeployedContract\n address: `0x${string}`\n}): UseTokenGating {\n const { address, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n\n const [isLoading, setLoading] = useState(true)\n const [allow, setAllow] = useState<boolean>()\n const [deny, setDeny] = useState<boolean>()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n useEffect(() => {\n if (!deployedContract) {\n setLoading(false)\n setAllow(false)\n setDeny(true)\n }\n\n if (!contract) return\n contract\n .connect(provider)\n .balanceOf(address)\n .then((res: BigNumber) => res.toNumber())\n // .then((bal) => bal > 0)\n .then((allow) => {\n console.log({ allow })\n setAllow(allow)\n setDeny(!allow)\n })\n .catch((err: Error) => {\n console.error(err)\n setAllow(false)\n setDeny(true)\n })\n .finally(() => setLoading(false))\n }, [address, deployedContract])\n\n return {\n isLoading: isLoading,\n address,\n allow,\n deny\n }\n}\n","import React from \"react\"\nimport { useAccount } from \"wagmi\"\nimport { useTokenGating } from \"../hooks/useTokenGating\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype Props = {\n children: React.ReactNode\n contract: DeployedContract\n loading?: React.ReactNode\n deny?: React.ReactNode\n}\n\nconst TokenGate: React.FC<Props> = ({\n children,\n contract,\n loading: loadingComponent = <p>Loading</p>,\n deny: denyComponent = <p>You must own a token to view this content.</p>\n}: Props) => {\n const { address } = useAccount()\n const { isLoading, allow } = useTokenGating({ address, contract })\n\n return <>{isLoading ? loadingComponent : allow ? children : denyComponent}</>\n}\n\nexport default TokenGate\n","import { DeployedContract } from \"@hybrd/types\"\nimport { useBlockNumber, useContract, useProvider } from \"wagmi\"\nimport { useAsyncMemo } from \"../hooks/internal/useAsyncMemo\"\nimport { BigNumber } from \"ethers\"\n\ntype TotalSupplyProps = {\n className?: string\n contract: DeployedContract\n}\n\nconst TotalSupply = (props: TotalSupplyProps) => {\n const { className, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n const { data: block } = useBlockNumber()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const totalSupply: number = useAsyncMemo(() => {\n if (!contract) return\n return contract\n .connect(provider)\n .totalSupply()\n .then((res: BigNumber) => res.toNumber())\n }, [contract, block])\n\n return <span className={className}>{totalSupply}</span>\n}\n\nexport default TotalSupply\n","import { DependencyList, useEffect, useState } from \"react\"\n\ntype Factory<T> = () => Promise<T | undefined | null>\n\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList\n): T | undefined\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial: T\n): T\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial?: T\n) {\n const [val, setVal] = useState<T | undefined>(initial)\n\n useEffect(() => {\n let cancel = false\n const promise = factory()\n if (promise === undefined || promise === null) return\n\n promise\n .then((val) => {\n if (!cancel) {\n setVal(val)\n }\n })\n .catch((error) => {\n console.error(`Error in useAsyncMemo: ${error}`)\n })\n\n return () => {\n cancel = true\n }\n }, deps)\n\n return val\n}\n","import { BigNumber, ethers, Signer, utils, Wallet } from \"ethers\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { useBlockNumber, useProvider, useWebSocketProvider } from \"wagmi\"\nimport type { BytesLike, Deferrable } from \"ethers/lib/utils\"\n\ntype DataOrFn = BytesLike | ((signer: Signer) => BytesLike) | null\n\ntype Estimate = {\n gas?: number\n gasPrice?: number\n wei?: number\n eth?: number\n}\n\nconst useBlockBeat = () => {\n const [block, setBlock] = useState<number>()\n useBlockNumber({ watch: true, onBlock: setBlock })\n\n return block\n}\n\ntype Opts = {\n deployData: DataOrFn\n chainId?: number\n}\n\nexport function useEstimation(opts: Opts) {\n const { deployData, chainId } = opts\n const provider = useProvider({ chainId })\n const block = useBlockBeat()\n\n const [estimate, setEstimate] = useState<Estimate>({\n gas: undefined,\n gasPrice: undefined,\n wei: undefined,\n eth: undefined\n })\n\n const buildData = useCallback(\n (provider) => {\n return typeof deployData === \"function\"\n ? deployData(provider)\n : deployData\n },\n [deployData]\n )\n\n useEffect(() => {\n const { address: from } = Wallet.createRandom()\n const data = buildData(provider)\n if (!data) return\n\n getEstimate(provider, {\n data,\n from\n })\n .then(setEstimate)\n .catch((err) => {\n console.error(\"useEstimation\", err)\n })\n }, [block, provider, chainId, buildData])\n\n return estimate\n}\n\nasync function getEstimate(\n provider: any,\n tx: Deferrable<ethers.providers.TransactionRequest>\n) {\n const gas = await provider.estimateGas(tx)\n const gasPrice = await provider.getGasPrice()\n const wei = gas.mul(gasPrice)\n const eth = parseFloat(utils.formatUnits(wei, \"ether\"))\n\n return {\n gas,\n gasPrice,\n wei,\n eth\n }\n}\n"],"names":["DefaultWalletConnector","config","provider","webSocketProvider","configureChains","chains","providers","client","createClient","autoConnect","Provider","children","_jsx","_Fragment","useHybrid","useContext","Web3Context","React","createContext","undefined","SUPPORTED_CHAINS","mainnet","goerli","arbitrum","arbitrumGoerli","localhost","Web3Provider","props","console","log","wallet","createWalletConnector","createDefaultWalletConnector","alchemyKey","infuraKey","push","alchemyProvider","apiKey","infuraProvider","publicProvider","buildProviders","contextValue","value","WagmiConfig","ConnectedAs","className","chainId","address","isConnected","useAccount","connect","connectors","useConnect","chain","network","useNetwork","ens","setENS","useState","useProvider","useEffect","lookupAddress","then","name","useEnsName","_jsxs","clsx","onClick","connector","href","etherscanAddressURL","id","target","rel","truncateEthAddress","useMinting","contract","deployedContract","data","signer","useSigner","isMinting","setMinting","isSuccess","setSuccess","isError","setError","useContract","abi","mint","useCallback","async","amount","opts","BigNumber","from","gasPrice","tx","wait","reciept","setTimeout","catch","err","error","finally","INTENTS","default","styles","DefaultButtonBase","success","DefaultButtonSuccess","DefaultButtonError","DefaultButton","intent","disabled","DefaultButtonDisabled","MintButton","button","Button","switchNetwork","useSwitchNetwork","useTokenGating","isLoading","setLoading","allow","setAllow","deny","setDeny","balanceOf","res","toNumber","TokenGate","loading","loadingComponent","denyComponent","TotalSupply","block","useBlockNumber","totalSupply","factory","deps","initial","val","setVal","cancel","promise","useAsyncMemo","useBlockBeat","setBlock","watch","onBlock","useEstimation","deployData","estimate","setEstimate","gas","wei","eth","buildData","Wallet","createRandom","estimateGas","getGasPrice","mul","parseFloat","utils","formatUnits","getEstimate"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Client } from "wagmi";
|
|
2
2
|
import React from "react";
|
|
3
|
-
import { WalletConnector } from "@hybrd/types";
|
|
3
|
+
import { ProviderKeys, WalletConnector } from "@hybrd/types";
|
|
4
4
|
export type Config = {};
|
|
5
5
|
export declare function useHybrid(): {
|
|
6
6
|
client: Client<import("@wagmi/core/dist/index-35b6525c").P, import("@wagmi/core/dist/index-35b6525c").W>;
|
|
@@ -13,4 +13,4 @@ export declare const Web3Context: React.Context<{
|
|
|
13
13
|
export declare function Web3Provider(props: {
|
|
14
14
|
children: React.ReactNode;
|
|
15
15
|
wallet: WalletConnector;
|
|
16
|
-
}): JSX.Element;
|
|
16
|
+
} & ProviderKeys): JSX.Element;
|
package/dist/stats.html
CHANGED
|
@@ -6157,7 +6157,7 @@ var drawChart = (function (exports) {
|
|
|
6157
6157
|
</script>
|
|
6158
6158
|
<script>
|
|
6159
6159
|
/*<!--*/
|
|
6160
|
-
const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.
|
|
6160
|
+
const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.js","children":[{"name":"src","children":[{"name":"providers","children":[{"uid":"767e-44","name":"DefaultWalletConnector.tsx"},{"uid":"767e-46","name":"Web3Provider.tsx"},{"uid":"767e-48","name":"helpers.ts"}]},{"name":"components","children":[{"uid":"767e-50","name":"ConnectedAs.tsx"},{"uid":"767e-56","name":"DefaultButton.tsx"},{"uid":"767e-58","name":"MintButton.tsx"},{"uid":"767e-62","name":"TokenGate.tsx"},{"uid":"767e-64","name":"TotalSupply.tsx"}]},{"name":"hooks","children":[{"name":"internal","children":[{"uid":"767e-52","name":"useEnsName.tsx"},{"uid":"767e-66","name":"useAsyncMemo.ts"}]},{"uid":"767e-54","name":"useMinting.ts"},{"uid":"767e-60","name":"useTokenGating.ts"},{"uid":"767e-68","name":"useEstimation.ts"}]}]}]}],"isRoot":true},"nodeParts":{"767e-44":{"renderedLength":391,"gzipLength":0,"brotliLength":0,"metaUid":"767e-43"},"767e-46":{"renderedLength":1155,"gzipLength":0,"brotliLength":0,"metaUid":"767e-45"},"767e-48":{"renderedLength":464,"gzipLength":0,"brotliLength":0,"metaUid":"767e-47"},"767e-50":{"renderedLength":799,"gzipLength":0,"brotliLength":0,"metaUid":"767e-49"},"767e-52":{"renderedLength":351,"gzipLength":0,"brotliLength":0,"metaUid":"767e-51"},"767e-54":{"renderedLength":1451,"gzipLength":0,"brotliLength":0,"metaUid":"767e-53"},"767e-56":{"renderedLength":558,"gzipLength":0,"brotliLength":0,"metaUid":"767e-55"},"767e-58":{"renderedLength":1296,"gzipLength":0,"brotliLength":0,"metaUid":"767e-57"},"767e-60":{"renderedLength":1244,"gzipLength":0,"brotliLength":0,"metaUid":"767e-59"},"767e-62":{"renderedLength":420,"gzipLength":0,"brotliLength":0,"metaUid":"767e-61"},"767e-64":{"renderedLength":672,"gzipLength":0,"brotliLength":0,"metaUid":"767e-63"},"767e-66":{"renderedLength":577,"gzipLength":0,"brotliLength":0,"metaUid":"767e-65"},"767e-68":{"renderedLength":1385,"gzipLength":0,"brotliLength":0,"metaUid":"767e-67"}},"nodeMetas":{"767e-43":{"id":"/src/providers/DefaultWalletConnector.tsx","moduleParts":{"index.js":"767e-44"},"imported":[{"uid":"767e-74"},{"uid":"767e-75"}],"importedBy":[{"uid":"767e-45"}]},"767e-45":{"id":"/src/providers/Web3Provider.tsx","moduleParts":{"index.js":"767e-46"},"imported":[{"uid":"767e-74"},{"uid":"767e-75"},{"uid":"767e-76"},{"uid":"767e-77"},{"uid":"767e-43"},{"uid":"767e-47"}],"importedBy":[{"uid":"767e-69"},{"uid":"767e-84"}]},"767e-47":{"id":"/src/providers/helpers.ts","moduleParts":{"index.js":"767e-48"},"imported":[{"uid":"767e-78"},{"uid":"767e-79"},{"uid":"767e-80"}],"importedBy":[{"uid":"767e-45"}]},"767e-49":{"id":"/src/components/ConnectedAs.tsx","moduleParts":{"index.js":"767e-50"},"imported":[{"uid":"767e-74"},{"uid":"767e-73"},{"uid":"767e-81"},{"uid":"767e-82"},{"uid":"767e-75"}],"importedBy":[{"uid":"767e-70"}]},"767e-51":{"id":"/src/hooks/internal/useEnsName.tsx","moduleParts":{"index.js":"767e-52"},"imported":[{"uid":"767e-75"},{"uid":"767e-77"}],"importedBy":[{"uid":"767e-82"}]},"767e-53":{"id":"/src/hooks/useMinting.ts","moduleParts":{"index.js":"767e-54"},"imported":[{"uid":"767e-83"},{"uid":"767e-77"},{"uid":"767e-75"}],"importedBy":[{"uid":"767e-71"},{"uid":"767e-57"}]},"767e-55":{"id":"/src/components/DefaultButton.tsx","moduleParts":{"index.js":"767e-56"},"imported":[{"uid":"767e-74"},{"uid":"767e-81"},{"uid":"767e-85"}],"importedBy":[{"uid":"767e-57"}]},"767e-57":{"id":"/src/components/MintButton.tsx","moduleParts":{"index.js":"767e-58"},"imported":[{"uid":"767e-74"},{"uid":"767e-53"},{"uid":"767e-75"},{"uid":"767e-55"}],"importedBy":[{"uid":"767e-70"}]},"767e-59":{"id":"/src/hooks/useTokenGating.ts","moduleParts":{"index.js":"767e-60"},"imported":[{"uid":"767e-77"},{"uid":"767e-75"}],"importedBy":[{"uid":"767e-71"},{"uid":"767e-61"}]},"767e-61":{"id":"/src/components/TokenGate.tsx","moduleParts":{"index.js":"767e-62"},"imported":[{"uid":"767e-74"},{"uid":"767e-75"},{"uid":"767e-59"}],"importedBy":[{"uid":"767e-70"}]},"767e-63":{"id":"/src/components/TotalSupply.tsx","moduleParts":{"index.js":"767e-64"},"imported":[{"uid":"767e-74"},{"uid":"767e-75"},{"uid":"767e-65"}],"importedBy":[{"uid":"767e-70"}]},"767e-65":{"id":"/src/hooks/internal/useAsyncMemo.ts","moduleParts":{"index.js":"767e-66"},"imported":[{"uid":"767e-77"}],"importedBy":[{"uid":"767e-63"},{"uid":"767e-82"}]},"767e-67":{"id":"/src/hooks/useEstimation.ts","moduleParts":{"index.js":"767e-68"},"imported":[{"uid":"767e-83"},{"uid":"767e-77"},{"uid":"767e-75"}],"importedBy":[{"uid":"767e-71"}]},"767e-69":{"id":"/src/index.ts","moduleParts":{},"imported":[{"uid":"767e-45"},{"uid":"767e-70"},{"uid":"767e-71"},{"uid":"767e-72"},{"uid":"767e-73"}],"importedBy":[],"isEntry":true},"767e-70":{"id":"/src/components/index.ts","moduleParts":{},"imported":[{"uid":"767e-49"},{"uid":"767e-57"},{"uid":"767e-61"},{"uid":"767e-63"}],"importedBy":[{"uid":"767e-69"}]},"767e-71":{"id":"/src/hooks/index.ts","moduleParts":{},"imported":[{"uid":"767e-67"},{"uid":"767e-53"},{"uid":"767e-59"}],"importedBy":[{"uid":"767e-69"}]},"767e-72":{"id":"@hybrd/types","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-69"}],"isExternal":true},"767e-73":{"id":"@hybrd/utils","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-69"},{"uid":"767e-49"}],"isExternal":true},"767e-74":{"id":"react/jsx-runtime","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-45"},{"uid":"767e-43"},{"uid":"767e-49"},{"uid":"767e-57"},{"uid":"767e-61"},{"uid":"767e-63"},{"uid":"767e-55"}],"isExternal":true},"767e-75":{"id":"wagmi","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-45"},{"uid":"767e-43"},{"uid":"767e-49"},{"uid":"767e-57"},{"uid":"767e-61"},{"uid":"767e-63"},{"uid":"767e-67"},{"uid":"767e-53"},{"uid":"767e-59"},{"uid":"767e-51"}],"isExternal":true},"767e-76":{"id":"wagmi/chains","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-45"}],"isExternal":true},"767e-77":{"id":"react","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-45"},{"uid":"767e-67"},{"uid":"767e-53"},{"uid":"767e-59"},{"uid":"767e-65"},{"uid":"767e-84"},{"uid":"767e-51"}],"isExternal":true},"767e-78":{"id":"wagmi/providers/alchemy","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-47"}],"isExternal":true},"767e-79":{"id":"wagmi/providers/infura","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-47"}],"isExternal":true},"767e-80":{"id":"wagmi/providers/public","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-47"}],"isExternal":true},"767e-81":{"id":"clsx","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-49"},{"uid":"767e-55"}],"isExternal":true},"767e-82":{"id":"/src/hooks/internal/index.ts","moduleParts":{},"imported":[{"uid":"767e-65"},{"uid":"767e-84"},{"uid":"767e-51"}],"importedBy":[{"uid":"767e-49"}]},"767e-83":{"id":"ethers","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-67"},{"uid":"767e-53"}],"isExternal":true},"767e-84":{"id":"/src/hooks/internal/useContext.ts","moduleParts":{},"imported":[{"uid":"767e-77"},{"uid":"767e-45"}],"importedBy":[{"uid":"767e-82"}]},"767e-85":{"id":"/src/components/DefaultButton.module.css","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-55"}]}},"env":{"rollup":"3.19.1"},"options":{"gzip":false,"brotli":false,"sourcemap":true}};
|
|
6161
6161
|
|
|
6162
6162
|
const run = () => {
|
|
6163
6163
|
const width = window.innerWidth;
|
|
@@ -6175,8 +6175,3 @@ var drawChart = (function (exports) {
|
|
|
6175
6175
|
</body>
|
|
6176
6176
|
</html>
|
|
6177
6177
|
|
|
6178
|
-
/*-->*/
|
|
6179
|
-
</script>
|
|
6180
|
-
</body>
|
|
6181
|
-
</html>
|
|
6182
|
-
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hybrid",
|
|
3
3
|
"author": "IanH <ian@ianh.xyz>",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.4",
|
|
5
5
|
"description": "Solidity + TypeScript Framework for Web3 Development",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"hybrid",
|
|
@@ -60,10 +60,10 @@
|
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
62
|
"@ethersproject/providers": "^5.7.1",
|
|
63
|
-
"@hybrd/cli": "^0.4.
|
|
64
|
-
"@hybrd/contracts": "^0.4.
|
|
65
|
-
"@hybrd/types": "^0.4.
|
|
66
|
-
"@hybrd/utils": "^0.4.
|
|
63
|
+
"@hybrd/cli": "^0.4.4",
|
|
64
|
+
"@hybrd/contracts": "^0.4.4",
|
|
65
|
+
"@hybrd/types": "^0.4.4",
|
|
66
|
+
"@hybrd/utils": "^0.4.4",
|
|
67
67
|
"abitype": "^0.7.1",
|
|
68
68
|
"axios": "^1.2.2",
|
|
69
69
|
"clsx": "^1.2.1",
|
|
@@ -117,5 +117,5 @@
|
|
|
117
117
|
"react-dom": ">=17",
|
|
118
118
|
"wagmi": "^0.12.1"
|
|
119
119
|
},
|
|
120
|
-
"gitHead": "
|
|
120
|
+
"gitHead": "8c7849690283595e5c90abc9ff4f3a48bfffca12"
|
|
121
121
|
}
|