hybrid 0.3.9 → 0.3.11
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 +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/stats.html +1 -7
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as t}from"react/jsx-runtime";import{configureChains as e,createClient as r,WagmiConfig as
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{configureChains as e,createClient as r,WagmiConfig as o,useBlockNumber as n,useProvider as i,useSigner as c,useContract as a,useConnect as s,useNetwork as u,useSwitchNetwork as l}from"wagmi";import{mainnet as d,goerli as m,localhost as f}from"wagmi/chains";import{alchemyProvider as h}from"wagmi/providers/alchemy";import{publicProvider as p}from"wagmi/providers/public";import v,{useMemo as B,useState as D,useEffect as b,useCallback as w}from"react";import{BigNumber as y,Wallet as P,utils as _}from"ethers";import g from"clsx";export*from"@hybrd/types";export*from"@hybrd/utils";const k=v.createContext({client:void 0,chains:void 0,provider:void 0,webSocketProvider:void 0}),N=[d,m,f];function S(n){const{appName:i,children:c,...a}=n,{chains:s,provider:u,webSocketProvider:l}=B((()=>{const{chains:t,provider:r,webSocketProvider:o}=e(N,function(t){const{alchemyKey:e,publicProvider:r=!0}=t,o=[];e&&o.push(h({apiKey:e}));r&&o.push(p());return o}(a));return{chains:t,provider:r,webSocketProvider:o}}),[a]),d=r({autoConnect:!0,provider:u,webSocketProvider:l}),m={client:d,chains:s,provider:u,webSocketProvider:l};return t(k.Provider,{value:m,children:t(o,{client:d,children:c})})}const C=t=>{const e=t?.address,r=t?.chainId,{data:o}=n(),s=i({chainId:r}),{data:u}=c({chainId:r}),[l,d]=D(!1),[m,f]=D(!1),[h,p]=D(!1),v=a({address:e,abi:t?.abi});return{isMinting:l,isSuccess:m,isError:h,totalSupply:function(t,e,r){const[o,n]=D(r);return b((()=>{let e=!1;const r=t();if(null!=r)return r.then((t=>{e||n(t)})).catch((t=>{console.error(`Error in useAsyncMemo: ${t}`)})),()=>{e=!0}}),e),o}((()=>{if(v)return v.connect(s).totalSupply().then((t=>t.toNumber()))}),[v,o]),mint:w((async(t,e={})=>{if(!v)return;d(!0);const{value:r=y.from("0"),gasPrice:o}=e;return v.connect(u).mint(t,{value:r,gasPrice:o}).then((t=>t.wait())).then((t=>(f(!0),setTimeout((()=>f(!1)),3e3),t))).catch((t=>{console.error(t),p(!0),setTimeout((()=>p(!1)),1e3)})).finally((()=>d(!1)))}),[u,v,r])}};var E={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 I={default:E.DefaultButtonBase,success:E.DefaultButtonSuccess,error:E.DefaultButtonError},x=e=>{const{className:r=E.DefaultButton,intent:o="default",onClick:n,children:i,disabled:c}=e;return t("button",{className:g(r,I[o],c&&E.DefaultButtonDisabled),onClick:n,children:i})},M=e=>{const{amount:r=1,button:o=x,className:n,contract:i}=e,{data:a}=c(),{connect:d,connectors:m}=s(),{chain:f}=u(),{switchNetwork:h}=l(),{isMinting:p,isSuccess:v,isError:B,mint:D}=C(i);if(p)return t(o,{disabled:!0,className:n,children:"Minting"});if(v)return t(o,{disabled:!0,className:n,intent:"success",children:"Minted"});if(B)return t(o,{disabled:!0,className:n,intent:"error",children:"Error Occurred"});if(!a){const e=m[0];return t(o,{className:n,onClick:()=>d({connector:e}),children:"Connect Wallet"})}return t(o,f?.id!==i?.chainId&&h?{onClick:()=>h(i?.chainId),className:n,intent:"error",children:"Switch Network"}:{className:n,onClick:()=>D(r),children:"Mint Now"})},K=()=>{const[t,e]=D();return n({watch:!0,onBlock:e}),t};function G(t){const{deployData:e,chainId:r}=t,o=i({chainId:r}),n=K(),[c,a]=D({gas:void 0,gasPrice:void 0,wei:void 0,eth:void 0}),s=w((t=>"function"==typeof e?e(t):e),[e]);return b((()=>{const{address:t}=P.createRandom(),e=s(o);e&&async function(t,e){const r=await t.estimateGas(e),o=await t.getGasPrice(),n=r.mul(o),i=parseFloat(_.formatUnits(n,"ether"));return{gas:r,gasPrice:o,wei:n,eth:i}}(o,{data:e,from:t}).then(a).catch((t=>{console.error("useEstimation",t)}))}),[n,o,r,s]),c}export{M as MintButton,S as Web3Provider,G as useEstimation,C as useMinting};
|
|
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/hooks/useMinting.ts","../src/hooks/internal/useAsyncMemo.ts","../src/components/DefaultButton.tsx","../src/components/MintButton.tsx","../src/hooks/useEstimation.ts"],"sourcesContent":["import { configureChains, createClient, WagmiConfig, Client } from \"wagmi\"\nimport { mainnet, goerli, localhost } from \"wagmi/chains\"\n\nimport { alchemyProvider } from \"wagmi/providers/alchemy\"\nimport { infuraProvider } from \"wagmi/providers/infura\"\nimport { publicProvider } from \"wagmi/providers/public\"\nimport { jsonRpcProvider } from \"wagmi/providers/jsonRpc\"\n\nimport React, { useMemo } from \"react\"\nimport { Provider } from \"@ethersproject/providers\"\n\ntype Config = {\n appName?: string\n alchemyKey?: string\n // infuraKey?: string\n publicProvider?: boolean\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, localhost]\n\nexport function Web3Provider(props: { children: React.ReactNode } & Config) {\n const { appName, children, ...keys } = props\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 { connectors } = getDefaultWallets({\n // appName: appName || \"Hybrid App\",\n // chains\n // })\n\n const client = createClient({\n autoConnect: true,\n // connectors,\n provider,\n webSocketProvider\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}>{children}</WagmiConfig>\n </Web3Context.Provider>\n )\n}\n\nfunction buildProviders(config: Config) {\n const {\n alchemyKey,\n // infuraKey,\n publicProvider: usePublic = true\n } = 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 if (usePublic) {\n providers.push(publicProvider())\n }\n\n // providers.push(\n // jsonRpcProvider({\n // rpc: () => ({\n // http: \"http://localhost:8545\",\n // ws: \"ws://localhost:8545\"\n // })\n // })\n // )\n\n return providers\n}\n","import type {\n TransactionReceipt,\n TransactionResponse\n} from \"@ethersproject/providers\"\nimport { BigNumber } from \"ethers\"\nimport { useCallback, useState } from \"react\"\nimport { useBlockNumber, useContract, useProvider, useSigner } from \"wagmi\"\n\nimport { DeployedContract } from \"@hybrd/types\"\nimport { useAsyncMemo } from \"./internal/useAsyncMemo\"\n\ntype UseMinting = {\n isMinting: boolean\n isSuccess: boolean\n isError: boolean\n totalSupply: number | undefined\n mint: (amount: number) => Promise<TransactionReceipt | undefined>\n}\n\nexport const useMinting = (config: DeployedContract): UseMinting => {\n const address = config?.address\n const chainId = config?.chainId\n\n const { data: block } = useBlockNumber()\n const provider = useProvider({ 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,\n abi: config?.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 const mint = useCallback(\n (amount: number) => {\n if (!contract) return\n\n setMinting(true)\n return contract\n .connect(signer)\n .mint(amount)\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]\n )\n\n return {\n isMinting,\n isSuccess,\n isError,\n totalSupply,\n mint\n }\n}\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 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 console.log({ 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 { 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\n .estimateGas(tx)\n .then((res) => res.toString())\n .then(Number)\n\n const gasPrice = await provider\n .getFeeData()\n .then((res) => res.maxFeePerGas.toString())\n .then(Number)\n\n const wei = gas * gasPrice\n const eth = parseFloat(utils.formatUnits(wei, \"ether\"))\n\n return {\n gas,\n gasPrice,\n wei,\n eth\n }\n}\n"],"names":["Web3Context","React","createContext","client","undefined","chains","provider","webSocketProvider","SUPPORTED_CHAINS","mainnet","goerli","localhost","Web3Provider","props","appName","children","keys","useMemo","configureChains","config","alchemyKey","publicProvider","usePublic","providers","push","alchemyProvider","apiKey","buildProviders","createClient","autoConnect","contextValue","_jsx","Provider","value","WagmiConfig","useMinting","address","chainId","data","block","useBlockNumber","useProvider","signer","useSigner","isMinting","setMinting","useState","isSuccess","setSuccess","isError","setError","contract","useContract","abi","totalSupply","factory","deps","initial","val","setVal","useEffect","cancel","promise","then","catch","error","console","useAsyncMemo","connect","res","toNumber","mint","useCallback","amount","tx","wait","reciept","setTimeout","err","finally","INTENTS","default","styles","DefaultButtonBase","success","DefaultButtonSuccess","DefaultButtonError","DefaultButton","className","intent","onClick","disabled","clsx","DefaultButtonDisabled","MintButton","button","Button","connectors","useConnect","chain","network","useNetwork","switchNetwork","useSwitchNetwork","log","connector","id","useBlockBeat","setBlock","watch","onBlock","useEstimation","opts","deployData","estimate","setEstimate","gas","gasPrice","wei","eth","buildData","from","Wallet","createRandom","async","estimateGas","toString","Number","getFeeData","maxFeePerGas","parseFloat","utils","formatUnits","getEstimate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/providers/Web3Provider.tsx","../src/hooks/useMinting.ts","../src/hooks/internal/useAsyncMemo.ts","../src/components/DefaultButton.tsx","../src/components/MintButton.tsx","../src/hooks/useEstimation.ts"],"sourcesContent":["import { configureChains, createClient, WagmiConfig, Client } from \"wagmi\"\nimport { mainnet, goerli, localhost } from \"wagmi/chains\"\n\nimport { alchemyProvider } from \"wagmi/providers/alchemy\"\nimport { infuraProvider } from \"wagmi/providers/infura\"\nimport { publicProvider } from \"wagmi/providers/public\"\nimport { jsonRpcProvider } from \"wagmi/providers/jsonRpc\"\n\nimport React, { useMemo } from \"react\"\nimport { Provider } from \"@ethersproject/providers\"\n\ntype Config = {\n appName?: string\n alchemyKey?: string\n // infuraKey?: string\n publicProvider?: boolean\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, localhost]\n\nexport function Web3Provider(props: { children: React.ReactNode } & Config) {\n const { appName, children, ...keys } = props\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 { connectors } = getDefaultWallets({\n // appName: appName || \"Hybrid App\",\n // chains\n // })\n\n const client = createClient({\n autoConnect: true,\n // connectors,\n provider,\n webSocketProvider\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}>{children}</WagmiConfig>\n </Web3Context.Provider>\n )\n}\n\nfunction buildProviders(config: Config) {\n const {\n alchemyKey,\n // infuraKey,\n publicProvider: usePublic = true\n } = 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 if (usePublic) {\n providers.push(publicProvider())\n }\n\n // providers.push(\n // jsonRpcProvider({\n // rpc: () => ({\n // http: \"http://localhost:8545\",\n // ws: \"ws://localhost:8545\"\n // })\n // })\n // )\n\n return providers\n}\n","import type {\n TransactionReceipt,\n TransactionResponse\n} from \"@ethersproject/providers\"\nimport { BigNumber } from \"ethers\"\nimport { useCallback, useState } from \"react\"\nimport { useBlockNumber, useContract, useProvider, useSigner } from \"wagmi\"\n\nimport { DeployedContract } from \"@hybrd/types\"\nimport { useAsyncMemo } from \"./internal/useAsyncMemo\"\n\ntype UseMinting = {\n isMinting: boolean\n isSuccess: boolean\n isError: boolean\n totalSupply: number | undefined\n mint: (amount: number) => Promise<TransactionReceipt | undefined>\n}\n\ntype MintOpts = {\n value?: BigNumber | string\n gasPrice?: BigNumber | number\n}\n\nexport const useMinting = (config: DeployedContract): UseMinting => {\n const address = config?.address\n const chainId = config?.chainId\n\n const { data: block } = useBlockNumber()\n const provider = useProvider({ 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,\n abi: config?.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 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 totalSupply,\n mint\n }\n}\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 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 { 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":["Web3Context","React","createContext","client","undefined","chains","provider","webSocketProvider","SUPPORTED_CHAINS","mainnet","goerli","localhost","Web3Provider","props","appName","children","keys","useMemo","configureChains","config","alchemyKey","publicProvider","usePublic","providers","push","alchemyProvider","apiKey","buildProviders","createClient","autoConnect","contextValue","_jsx","Provider","value","WagmiConfig","useMinting","address","chainId","data","block","useBlockNumber","useProvider","signer","useSigner","isMinting","setMinting","useState","isSuccess","setSuccess","isError","setError","contract","useContract","abi","totalSupply","factory","deps","initial","val","setVal","useEffect","cancel","promise","then","catch","error","console","useAsyncMemo","connect","res","toNumber","mint","useCallback","async","amount","opts","BigNumber","from","gasPrice","tx","wait","reciept","setTimeout","err","finally","INTENTS","default","styles","DefaultButtonBase","success","DefaultButtonSuccess","DefaultButtonError","DefaultButton","className","intent","onClick","disabled","clsx","DefaultButtonDisabled","MintButton","button","Button","connectors","useConnect","chain","network","useNetwork","switchNetwork","useSwitchNetwork","connector","id","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}from"react/jsx-runtime";import{configureChains as e,createClient as r,WagmiConfig as
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{configureChains as e,createClient as r,WagmiConfig as o,useBlockNumber as n,useProvider as i,useSigner as c,useContract as a,useConnect as s,useNetwork as u,useSwitchNetwork as l}from"wagmi";import{mainnet as d,goerli as m,localhost as f}from"wagmi/chains";import{alchemyProvider as h}from"wagmi/providers/alchemy";import{publicProvider as p}from"wagmi/providers/public";import v,{useMemo as B,useState as D,useEffect as b,useCallback as w}from"react";import{BigNumber as y,Wallet as P,utils as _}from"ethers";import g from"clsx";export*from"@hybrd/types";export*from"@hybrd/utils";const k=v.createContext({client:void 0,chains:void 0,provider:void 0,webSocketProvider:void 0}),N=[d,m,f];function S(n){const{appName:i,children:c,...a}=n,{chains:s,provider:u,webSocketProvider:l}=B((()=>{const{chains:t,provider:r,webSocketProvider:o}=e(N,function(t){const{alchemyKey:e,publicProvider:r=!0}=t,o=[];e&&o.push(h({apiKey:e}));r&&o.push(p());return o}(a));return{chains:t,provider:r,webSocketProvider:o}}),[a]),d=r({autoConnect:!0,provider:u,webSocketProvider:l}),m={client:d,chains:s,provider:u,webSocketProvider:l};return t(k.Provider,{value:m,children:t(o,{client:d,children:c})})}const C=t=>{const e=t?.address,r=t?.chainId,{data:o}=n(),s=i({chainId:r}),{data:u}=c({chainId:r}),[l,d]=D(!1),[m,f]=D(!1),[h,p]=D(!1),v=a({address:e,abi:t?.abi});return{isMinting:l,isSuccess:m,isError:h,totalSupply:function(t,e,r){const[o,n]=D(r);return b((()=>{let e=!1;const r=t();if(null!=r)return r.then((t=>{e||n(t)})).catch((t=>{console.error(`Error in useAsyncMemo: ${t}`)})),()=>{e=!0}}),e),o}((()=>{if(v)return v.connect(s).totalSupply().then((t=>t.toNumber()))}),[v,o]),mint:w((async(t,e={})=>{if(!v)return;d(!0);const{value:r=y.from("0"),gasPrice:o}=e;return v.connect(u).mint(t,{value:r,gasPrice:o}).then((t=>t.wait())).then((t=>(f(!0),setTimeout((()=>f(!1)),3e3),t))).catch((t=>{console.error(t),p(!0),setTimeout((()=>p(!1)),1e3)})).finally((()=>d(!1)))}),[u,v,r])}};var E={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 I={default:E.DefaultButtonBase,success:E.DefaultButtonSuccess,error:E.DefaultButtonError},x=e=>{const{className:r=E.DefaultButton,intent:o="default",onClick:n,children:i,disabled:c}=e;return t("button",{className:g(r,I[o],c&&E.DefaultButtonDisabled),onClick:n,children:i})},M=e=>{const{amount:r=1,button:o=x,className:n,contract:i}=e,{data:a}=c(),{connect:d,connectors:m}=s(),{chain:f}=u(),{switchNetwork:h}=l(),{isMinting:p,isSuccess:v,isError:B,mint:D}=C(i);if(p)return t(o,{disabled:!0,className:n,children:"Minting"});if(v)return t(o,{disabled:!0,className:n,intent:"success",children:"Minted"});if(B)return t(o,{disabled:!0,className:n,intent:"error",children:"Error Occurred"});if(!a){const e=m[0];return t(o,{className:n,onClick:()=>d({connector:e}),children:"Connect Wallet"})}return t(o,f?.id!==i?.chainId&&h?{onClick:()=>h(i?.chainId),className:n,intent:"error",children:"Switch Network"}:{className:n,onClick:()=>D(r),children:"Mint Now"})},K=()=>{const[t,e]=D();return n({watch:!0,onBlock:e}),t};function G(t){const{deployData:e,chainId:r}=t,o=i({chainId:r}),n=K(),[c,a]=D({gas:void 0,gasPrice:void 0,wei:void 0,eth:void 0}),s=w((t=>"function"==typeof e?e(t):e),[e]);return b((()=>{const{address:t}=P.createRandom(),e=s(o);e&&async function(t,e){const r=await t.estimateGas(e),o=await t.getGasPrice(),n=r.mul(o),i=parseFloat(_.formatUnits(n,"ether"));return{gas:r,gasPrice:o,wei:n,eth:i}}(o,{data:e,from:t}).then(a).catch((t=>{console.error("useEstimation",t)}))}),[n,o,r,s]),c}export{M as MintButton,S as Web3Provider,G as useEstimation,C as useMinting};
|
|
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/hooks/useMinting.ts","../src/hooks/internal/useAsyncMemo.ts","../src/components/DefaultButton.tsx","../src/components/MintButton.tsx","../src/hooks/useEstimation.ts"],"sourcesContent":["import { configureChains, createClient, WagmiConfig, Client } from \"wagmi\"\nimport { mainnet, goerli, localhost } from \"wagmi/chains\"\n\nimport { alchemyProvider } from \"wagmi/providers/alchemy\"\nimport { infuraProvider } from \"wagmi/providers/infura\"\nimport { publicProvider } from \"wagmi/providers/public\"\nimport { jsonRpcProvider } from \"wagmi/providers/jsonRpc\"\n\nimport React, { useMemo } from \"react\"\nimport { Provider } from \"@ethersproject/providers\"\n\ntype Config = {\n appName?: string\n alchemyKey?: string\n // infuraKey?: string\n publicProvider?: boolean\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, localhost]\n\nexport function Web3Provider(props: { children: React.ReactNode } & Config) {\n const { appName, children, ...keys } = props\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 { connectors } = getDefaultWallets({\n // appName: appName || \"Hybrid App\",\n // chains\n // })\n\n const client = createClient({\n autoConnect: true,\n // connectors,\n provider,\n webSocketProvider\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}>{children}</WagmiConfig>\n </Web3Context.Provider>\n )\n}\n\nfunction buildProviders(config: Config) {\n const {\n alchemyKey,\n // infuraKey,\n publicProvider: usePublic = true\n } = 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 if (usePublic) {\n providers.push(publicProvider())\n }\n\n // providers.push(\n // jsonRpcProvider({\n // rpc: () => ({\n // http: \"http://localhost:8545\",\n // ws: \"ws://localhost:8545\"\n // })\n // })\n // )\n\n return providers\n}\n","import type {\n TransactionReceipt,\n TransactionResponse\n} from \"@ethersproject/providers\"\nimport { BigNumber } from \"ethers\"\nimport { useCallback, useState } from \"react\"\nimport { useBlockNumber, useContract, useProvider, useSigner } from \"wagmi\"\n\nimport { DeployedContract } from \"@hybrd/types\"\nimport { useAsyncMemo } from \"./internal/useAsyncMemo\"\n\ntype UseMinting = {\n isMinting: boolean\n isSuccess: boolean\n isError: boolean\n totalSupply: number | undefined\n mint: (amount: number) => Promise<TransactionReceipt | undefined>\n}\n\nexport const useMinting = (config: DeployedContract): UseMinting => {\n const address = config?.address\n const chainId = config?.chainId\n\n const { data: block } = useBlockNumber()\n const provider = useProvider({ 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,\n abi: config?.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 const mint = useCallback(\n (amount: number) => {\n if (!contract) return\n\n setMinting(true)\n return contract\n .connect(signer)\n .mint(amount)\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]\n )\n\n return {\n isMinting,\n isSuccess,\n isError,\n totalSupply,\n mint\n }\n}\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 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 console.log({ 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 { 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\n .estimateGas(tx)\n .then((res) => res.toString())\n .then(Number)\n\n const gasPrice = await provider\n .getFeeData()\n .then((res) => res.maxFeePerGas.toString())\n .then(Number)\n\n const wei = gas * gasPrice\n const eth = parseFloat(utils.formatUnits(wei, \"ether\"))\n\n return {\n gas,\n gasPrice,\n wei,\n eth\n }\n}\n"],"names":["Web3Context","React","createContext","client","undefined","chains","provider","webSocketProvider","SUPPORTED_CHAINS","mainnet","goerli","localhost","Web3Provider","props","appName","children","keys","useMemo","configureChains","config","alchemyKey","publicProvider","usePublic","providers","push","alchemyProvider","apiKey","buildProviders","createClient","autoConnect","contextValue","_jsx","Provider","value","WagmiConfig","useMinting","address","chainId","data","block","useBlockNumber","useProvider","signer","useSigner","isMinting","setMinting","useState","isSuccess","setSuccess","isError","setError","contract","useContract","abi","totalSupply","factory","deps","initial","val","setVal","useEffect","cancel","promise","then","catch","error","console","useAsyncMemo","connect","res","toNumber","mint","useCallback","amount","tx","wait","reciept","setTimeout","err","finally","INTENTS","default","styles","DefaultButtonBase","success","DefaultButtonSuccess","DefaultButtonError","DefaultButton","className","intent","onClick","disabled","clsx","DefaultButtonDisabled","MintButton","button","Button","connectors","useConnect","chain","network","useNetwork","switchNetwork","useSwitchNetwork","log","connector","id","useBlockBeat","setBlock","watch","onBlock","useEstimation","opts","deployData","estimate","setEstimate","gas","gasPrice","wei","eth","buildData","from","Wallet","createRandom","async","estimateGas","toString","Number","getFeeData","maxFeePerGas","parseFloat","utils","formatUnits","getEstimate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/providers/Web3Provider.tsx","../src/hooks/useMinting.ts","../src/hooks/internal/useAsyncMemo.ts","../src/components/DefaultButton.tsx","../src/components/MintButton.tsx","../src/hooks/useEstimation.ts"],"sourcesContent":["import { configureChains, createClient, WagmiConfig, Client } from \"wagmi\"\nimport { mainnet, goerli, localhost } from \"wagmi/chains\"\n\nimport { alchemyProvider } from \"wagmi/providers/alchemy\"\nimport { infuraProvider } from \"wagmi/providers/infura\"\nimport { publicProvider } from \"wagmi/providers/public\"\nimport { jsonRpcProvider } from \"wagmi/providers/jsonRpc\"\n\nimport React, { useMemo } from \"react\"\nimport { Provider } from \"@ethersproject/providers\"\n\ntype Config = {\n appName?: string\n alchemyKey?: string\n // infuraKey?: string\n publicProvider?: boolean\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, localhost]\n\nexport function Web3Provider(props: { children: React.ReactNode } & Config) {\n const { appName, children, ...keys } = props\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 { connectors } = getDefaultWallets({\n // appName: appName || \"Hybrid App\",\n // chains\n // })\n\n const client = createClient({\n autoConnect: true,\n // connectors,\n provider,\n webSocketProvider\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}>{children}</WagmiConfig>\n </Web3Context.Provider>\n )\n}\n\nfunction buildProviders(config: Config) {\n const {\n alchemyKey,\n // infuraKey,\n publicProvider: usePublic = true\n } = 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 if (usePublic) {\n providers.push(publicProvider())\n }\n\n // providers.push(\n // jsonRpcProvider({\n // rpc: () => ({\n // http: \"http://localhost:8545\",\n // ws: \"ws://localhost:8545\"\n // })\n // })\n // )\n\n return providers\n}\n","import type {\n TransactionReceipt,\n TransactionResponse\n} from \"@ethersproject/providers\"\nimport { BigNumber } from \"ethers\"\nimport { useCallback, useState } from \"react\"\nimport { useBlockNumber, useContract, useProvider, useSigner } from \"wagmi\"\n\nimport { DeployedContract } from \"@hybrd/types\"\nimport { useAsyncMemo } from \"./internal/useAsyncMemo\"\n\ntype UseMinting = {\n isMinting: boolean\n isSuccess: boolean\n isError: boolean\n totalSupply: number | undefined\n mint: (amount: number) => Promise<TransactionReceipt | undefined>\n}\n\ntype MintOpts = {\n value?: BigNumber | string\n gasPrice?: BigNumber | number\n}\n\nexport const useMinting = (config: DeployedContract): UseMinting => {\n const address = config?.address\n const chainId = config?.chainId\n\n const { data: block } = useBlockNumber()\n const provider = useProvider({ 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,\n abi: config?.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 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 totalSupply,\n mint\n }\n}\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 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 { 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":["Web3Context","React","createContext","client","undefined","chains","provider","webSocketProvider","SUPPORTED_CHAINS","mainnet","goerli","localhost","Web3Provider","props","appName","children","keys","useMemo","configureChains","config","alchemyKey","publicProvider","usePublic","providers","push","alchemyProvider","apiKey","buildProviders","createClient","autoConnect","contextValue","_jsx","Provider","value","WagmiConfig","useMinting","address","chainId","data","block","useBlockNumber","useProvider","signer","useSigner","isMinting","setMinting","useState","isSuccess","setSuccess","isError","setError","contract","useContract","abi","totalSupply","factory","deps","initial","val","setVal","useEffect","cancel","promise","then","catch","error","console","useAsyncMemo","connect","res","toNumber","mint","useCallback","async","amount","opts","BigNumber","from","gasPrice","tx","wait","reciept","setTimeout","err","finally","INTENTS","default","styles","DefaultButtonBase","success","DefaultButtonSuccess","DefaultButtonError","DefaultButton","className","intent","onClick","disabled","clsx","DefaultButtonDisabled","MintButton","button","Button","connectors","useConnect","chain","network","useNetwork","switchNetwork","useSwitchNetwork","connector","id","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/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.mjs","children":[{"name":"src","children":[{"name":"providers/Web3Provider.tsx","uid":"af71-27"},{"name":"hooks","children":[{"uid":"af71-29","name":"useMinting.ts"},{"name":"internal/useAsyncMemo.ts","uid":"af71-31"},{"uid":"af71-37","name":"useEstimation.ts"}]},{"name":"components","children":[{"uid":"af71-33","name":"DefaultButton.tsx"},{"uid":"af71-35","name":"MintButton.tsx"}]}]}]}],"isRoot":true},"nodeParts":{"af71-27":{"renderedLength":1731,"gzipLength":0,"brotliLength":0,"metaUid":"af71-26"},"af71-29":{"renderedLength":1747,"gzipLength":0,"brotliLength":0,"metaUid":"af71-28"},"af71-31":{"renderedLength":577,"gzipLength":0,"brotliLength":0,"metaUid":"af71-30"},"af71-33":{"renderedLength":558,"gzipLength":0,"brotliLength":0,"metaUid":"af71-32"},"af71-35":{"renderedLength":1292,"gzipLength":0,"brotliLength":0,"metaUid":"af71-34"},"af71-37":{"renderedLength":1385,"gzipLength":0,"brotliLength":0,"metaUid":"af71-36"}},"nodeMetas":{"af71-26":{"id":"/src/providers/Web3Provider.tsx","moduleParts":{"index.mjs":"af71-27"},"imported":[{"uid":"af71-43"},{"uid":"af71-44"},{"uid":"af71-45"},{"uid":"af71-46"},{"uid":"af71-47"},{"uid":"af71-48"}],"importedBy":[{"uid":"af71-38"}]},"af71-28":{"id":"/src/hooks/useMinting.ts","moduleParts":{"index.mjs":"af71-29"},"imported":[{"uid":"af71-49"},{"uid":"af71-48"},{"uid":"af71-44"},{"uid":"af71-30"}],"importedBy":[{"uid":"af71-40"},{"uid":"af71-34"}]},"af71-30":{"id":"/src/hooks/internal/useAsyncMemo.ts","moduleParts":{"index.mjs":"af71-31"},"imported":[{"uid":"af71-48"}],"importedBy":[{"uid":"af71-28"}]},"af71-32":{"id":"/src/components/DefaultButton.tsx","moduleParts":{"index.mjs":"af71-33"},"imported":[{"uid":"af71-43"},{"uid":"af71-50"},{"uid":"af71-51"}],"importedBy":[{"uid":"af71-34"}]},"af71-34":{"id":"/src/components/MintButton.tsx","moduleParts":{"index.mjs":"af71-35"},"imported":[{"uid":"af71-43"},{"uid":"af71-28"},{"uid":"af71-44"},{"uid":"af71-32"}],"importedBy":[{"uid":"af71-39"}]},"af71-36":{"id":"/src/hooks/useEstimation.ts","moduleParts":{"index.mjs":"af71-37"},"imported":[{"uid":"af71-49"},{"uid":"af71-48"},{"uid":"af71-44"}],"importedBy":[{"uid":"af71-40"}]},"af71-38":{"id":"/src/index.ts","moduleParts":{},"imported":[{"uid":"af71-26"},{"uid":"af71-39"},{"uid":"af71-40"},{"uid":"af71-41"},{"uid":"af71-42"}],"importedBy":[],"isEntry":true},"af71-39":{"id":"/src/components/index.ts","moduleParts":{},"imported":[{"uid":"af71-34"}],"importedBy":[{"uid":"af71-38"}]},"af71-40":{"id":"/src/hooks/index.ts","moduleParts":{},"imported":[{"uid":"af71-36"},{"uid":"af71-28"}],"importedBy":[{"uid":"af71-38"}]},"af71-41":{"id":"@hybrd/types","moduleParts":{},"imported":[],"importedBy":[{"uid":"af71-38"}],"isExternal":true},"af71-42":{"id":"@hybrd/utils","moduleParts":{},"imported":[],"importedBy":[{"uid":"af71-38"}],"isExternal":true},"af71-43":{"id":"react/jsx-runtime","moduleParts":{},"imported":[],"importedBy":[{"uid":"af71-26"},{"uid":"af71-34"},{"uid":"af71-32"}],"isExternal":true},"af71-44":{"id":"wagmi","moduleParts":{},"imported":[],"importedBy":[{"uid":"af71-26"},{"uid":"af71-34"},{"uid":"af71-36"},{"uid":"af71-28"}],"isExternal":true},"af71-45":{"id":"wagmi/chains","moduleParts":{},"imported":[],"importedBy":[{"uid":"af71-26"}],"isExternal":true},"af71-46":{"id":"wagmi/providers/alchemy","moduleParts":{},"imported":[],"importedBy":[{"uid":"af71-26"}],"isExternal":true},"af71-47":{"id":"wagmi/providers/public","moduleParts":{},"imported":[],"importedBy":[{"uid":"af71-26"}],"isExternal":true},"af71-48":{"id":"react","moduleParts":{},"imported":[],"importedBy":[{"uid":"af71-26"},{"uid":"af71-36"},{"uid":"af71-28"},{"uid":"af71-30"}],"isExternal":true},"af71-49":{"id":"ethers","moduleParts":{},"imported":[],"importedBy":[{"uid":"af71-36"},{"uid":"af71-28"}],"isExternal":true},"af71-50":{"id":"clsx","moduleParts":{},"imported":[],"importedBy":[{"uid":"af71-32"}],"isExternal":true},"af71-51":{"id":"/src/components/DefaultButton.module.css","moduleParts":{},"imported":[],"importedBy":[{"uid":"af71-32"}]}},"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,9 +6175,3 @@ var drawChart = (function (exports) {
|
|
|
6175
6175
|
</body>
|
|
6176
6176
|
</html>
|
|
6177
6177
|
|
|
6178
|
-
oaded', run);
|
|
6179
|
-
/*-->*/
|
|
6180
|
-
</script>
|
|
6181
|
-
</body>
|
|
6182
|
-
</html>
|
|
6183
|
-
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hybrid",
|
|
3
3
|
"author": "IanH <ian@ianh.xyz>",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.11",
|
|
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.3.
|
|
64
|
-
"@hybrd/contracts": "^0.3.
|
|
65
|
-
"@hybrd/types": "^0.3.
|
|
66
|
-
"@hybrd/utils": "^0.3.
|
|
63
|
+
"@hybrd/cli": "^0.3.11",
|
|
64
|
+
"@hybrd/contracts": "^0.3.11",
|
|
65
|
+
"@hybrd/types": "^0.3.11",
|
|
66
|
+
"@hybrd/utils": "^0.3.11",
|
|
67
67
|
"abitype": "^0.7.1",
|
|
68
68
|
"axios": "^1.2.2",
|
|
69
69
|
"clsx": "^1.2.1",
|
|
@@ -116,5 +116,5 @@
|
|
|
116
116
|
"react-dom": ">=17",
|
|
117
117
|
"wagmi": "^0.6.0"
|
|
118
118
|
},
|
|
119
|
-
"gitHead": "
|
|
119
|
+
"gitHead": "abe0a17c24b509a64c49cfdb18256a6b02a8ce5e"
|
|
120
120
|
}
|