{"version":3,"sources":["candy-machine.ts","Home.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["CANDY_MACHINE_PROGRAM","anchor","PublicKey","SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID","TOKEN_METADATA_PROGRAM_ID","awaitTransactionSignatureConfirmation","txid","timeout","connection","a","commitment","queryStatus","done","status","slot","confirmations","err","subId","Promise","resolve","reject","setTimeout","console","log","onSignature","result","context","e","error","getSignatureStatuses","signatureStatuses","value","sleep","_signatureSubscriptions","removeSignatureListener","createAssociatedTokenAccountInstruction","associatedTokenAddress","payer","walletAddress","splTokenMintAddress","keys","pubkey","isSigner","isWritable","SystemProgram","programId","TOKEN_PROGRAM_ID","SYSVAR_RENT_PUBKEY","TransactionInstruction","data","Buffer","from","getCandyMachineState","anchorWallet","candyMachineId","provider","preflightCommitment","fetchIdl","idl","program","candyMachine","id","account","fetch","state","itemsAvailable","toNumber","itemsRedeemed","itemsRemaining","goLiveDate","Date","getMasterEdition","mint","findProgramAddress","toBuffer","getMetadata","getTokenWallet","wallet","mintOneToken","config","treasury","Keypair","generate","publicKey","token","metadata","masterEdition","getMinimumBalanceForRentExemption","MintLayout","span","rent","rpc","mintNft","accounts","mintAuthority","updateAuthority","tokenMetadataProgram","tokenProgram","systemProgram","clock","SYSVAR_CLOCK_PUBKEY","signers","instructions","createAccount","fromPubkey","newAccountPubkey","space","lamports","Token","createInitMintInstruction","createMintToInstruction","shortenAddress","address","chars","slice","ms","ConnectButton","styled","WalletDialogButton","CounterText","MintContainer","div","MintButton","Button","renderCounter","days","hours","minutes","seconds","completed","Home","props","useState","setBalance","isActive","setIsActive","isSoldOut","setIsSoldOut","isMinting","setIsMinting","setItemsAvailable","setItemsRedeemed","setItemsRemaining","open","message","severity","undefined","alertState","setAlertState","startDate","setStartDate","useAnchorWallet","setCandyMachine","refreshCandyMachineState","onMint","mintTxId","txTimeout","msg","code","indexOf","getBalance","balance","LAMPORTS_PER_SOL","useEffect","toBase58","disabled","onClick","variant","CircularProgress","date","onMount","onComplete","renderer","Snackbar","autoHideDuration","onClose","Alert","process","network","Connection","startDateSeed","parseInt","theme","createTheme","palette","type","overrides","MuiButtonBase","root","justifyContent","MuiButton","textTransform","padding","startIcon","marginRight","endIcon","marginLeft","App","endpoint","useMemo","clusterApiUrl","wallets","getPhantomWallet","getSlopeWallet","getSolflareWallet","getSolletWallet","getSolletExtensionWallet","ThemeProvider","autoConnect","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.0fdaabe8.chunk.js","sourcesContent":["import * as anchor from \"@project-serum/anchor\";\r\n\r\nimport {\r\n MintLayout,\r\n TOKEN_PROGRAM_ID,\r\n Token,\r\n} from \"@solana/spl-token\";\r\n\r\nexport const CANDY_MACHINE_PROGRAM = new anchor.web3.PublicKey(\r\n \"cndyAnrLdpjq1Ssp1z8xxDsB8dxe7u4HL5Nxi2K5WXZ\"\r\n);\r\n\r\nconst SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = new anchor.web3.PublicKey(\r\n \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\r\n);\r\n\r\nconst TOKEN_METADATA_PROGRAM_ID = new anchor.web3.PublicKey(\r\n \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\r\n);\r\n\r\nexport interface CandyMachine {\r\n id: anchor.web3.PublicKey,\r\n connection: anchor.web3.Connection;\r\n program: anchor.Program;\r\n}\r\n\r\ninterface CandyMachineState {\r\n candyMachine: CandyMachine;\r\n itemsAvailable: number;\r\n itemsRedeemed: number;\r\n itemsRemaining: number;\r\n goLiveDate: Date,\r\n}\r\n\r\nexport const awaitTransactionSignatureConfirmation = async (\r\n txid: anchor.web3.TransactionSignature,\r\n timeout: number,\r\n connection: anchor.web3.Connection,\r\n commitment: anchor.web3.Commitment = \"recent\",\r\n queryStatus = false\r\n): Promise => {\r\n let done = false;\r\n let status: anchor.web3.SignatureStatus | null | void = {\r\n slot: 0,\r\n confirmations: 0,\r\n err: null,\r\n };\r\n let subId = 0;\r\n status = await new Promise(async (resolve, reject) => {\r\n setTimeout(() => {\r\n if (done) {\r\n return;\r\n }\r\n done = true;\r\n console.log(\"Rejecting for timeout...\");\r\n reject({ timeout: true });\r\n }, timeout);\r\n try {\r\n subId = connection.onSignature(\r\n txid,\r\n (result: any, context: any) => {\r\n done = true;\r\n status = {\r\n err: result.err,\r\n slot: context.slot,\r\n confirmations: 0,\r\n };\r\n if (result.err) {\r\n console.log(\"Rejected via websocket\", result.err);\r\n reject(status);\r\n } else {\r\n console.log(\"Resolved via websocket\", result);\r\n resolve(status);\r\n }\r\n },\r\n commitment\r\n );\r\n } catch (e) {\r\n done = true;\r\n console.error(\"WS error in setup\", txid, e);\r\n }\r\n while (!done && queryStatus) {\r\n // eslint-disable-next-line no-loop-func\r\n (async () => {\r\n try {\r\n const signatureStatuses = await connection.getSignatureStatuses([\r\n txid,\r\n ]);\r\n status = signatureStatuses && signatureStatuses.value[0];\r\n if (!done) {\r\n if (!status) {\r\n console.log(\"REST null result for\", txid, status);\r\n } else if (status.err) {\r\n console.log(\"REST error for\", txid, status);\r\n done = true;\r\n reject(status.err);\r\n } else if (!status.confirmations) {\r\n console.log(\"REST no confirmations for\", txid, status);\r\n } else {\r\n console.log(\"REST confirmation for\", txid, status);\r\n done = true;\r\n resolve(status);\r\n }\r\n }\r\n } catch (e) {\r\n if (!done) {\r\n console.log(\"REST connection error: txid\", txid, e);\r\n }\r\n }\r\n })();\r\n await sleep(2000);\r\n }\r\n });\r\n\r\n //@ts-ignore\r\n if (connection._signatureSubscriptions[subId]) {\r\n connection.removeSignatureListener(subId);\r\n }\r\n done = true;\r\n console.log(\"Returning status\", status);\r\n return status;\r\n}\r\n\r\n/* export */ const createAssociatedTokenAccountInstruction = (\r\n associatedTokenAddress: anchor.web3.PublicKey,\r\n payer: anchor.web3.PublicKey,\r\n walletAddress: anchor.web3.PublicKey,\r\n splTokenMintAddress: anchor.web3.PublicKey\r\n) => {\r\n const keys = [\r\n { pubkey: payer, isSigner: true, isWritable: true },\r\n { pubkey: associatedTokenAddress, isSigner: false, isWritable: true },\r\n { pubkey: walletAddress, isSigner: false, isWritable: false },\r\n { pubkey: splTokenMintAddress, isSigner: false, isWritable: false },\r\n {\r\n pubkey: anchor.web3.SystemProgram.programId,\r\n isSigner: false,\r\n isWritable: false,\r\n },\r\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\r\n {\r\n pubkey: anchor.web3.SYSVAR_RENT_PUBKEY,\r\n isSigner: false,\r\n isWritable: false,\r\n },\r\n ];\r\n return new anchor.web3.TransactionInstruction({\r\n keys,\r\n programId: SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID,\r\n data: Buffer.from([]),\r\n });\r\n}\r\n\r\nexport const getCandyMachineState = async (\r\n anchorWallet: anchor.Wallet,\r\n candyMachineId: anchor.web3.PublicKey,\r\n connection: anchor.web3.Connection,\r\n): Promise => {\r\n const provider = new anchor.Provider(connection, anchorWallet, {\r\n preflightCommitment: \"recent\",\r\n });\r\n\r\n const idl = await anchor.Program.fetchIdl(\r\n CANDY_MACHINE_PROGRAM,\r\n provider\r\n );\r\n\r\n const program = new anchor.Program(idl, CANDY_MACHINE_PROGRAM, provider);\r\n const candyMachine = {\r\n id: candyMachineId,\r\n connection,\r\n program,\r\n }\r\n\r\n const state: any = await program.account.candyMachine.fetch(candyMachineId);\r\n\r\n const itemsAvailable = state.data.itemsAvailable.toNumber();\r\n const itemsRedeemed = state.itemsRedeemed.toNumber();\r\n const itemsRemaining = itemsAvailable - itemsRedeemed;\r\n\r\n let goLiveDate = state.data.goLiveDate.toNumber();\r\n goLiveDate = new Date(goLiveDate * 1000);\r\n\r\n console.log({\r\n itemsAvailable,\r\n itemsRedeemed,\r\n itemsRemaining,\r\n goLiveDate,\r\n })\r\n\r\n return {\r\n candyMachine,\r\n itemsAvailable,\r\n itemsRedeemed,\r\n itemsRemaining,\r\n goLiveDate,\r\n };\r\n}\r\n\r\nconst getMasterEdition = async (\r\n mint: anchor.web3.PublicKey\r\n): Promise => {\r\n return (\r\n await anchor.web3.PublicKey.findProgramAddress(\r\n [\r\n Buffer.from(\"metadata\"),\r\n TOKEN_METADATA_PROGRAM_ID.toBuffer(),\r\n mint.toBuffer(),\r\n Buffer.from(\"edition\"),\r\n ],\r\n TOKEN_METADATA_PROGRAM_ID\r\n )\r\n )[0];\r\n};\r\n\r\nconst getMetadata = async (\r\n mint: anchor.web3.PublicKey\r\n): Promise => {\r\n return (\r\n await anchor.web3.PublicKey.findProgramAddress(\r\n [\r\n Buffer.from(\"metadata\"),\r\n TOKEN_METADATA_PROGRAM_ID.toBuffer(),\r\n mint.toBuffer(),\r\n ],\r\n TOKEN_METADATA_PROGRAM_ID\r\n )\r\n )[0];\r\n};\r\n\r\nconst getTokenWallet = async (\r\n wallet: anchor.web3.PublicKey,\r\n mint: anchor.web3.PublicKey\r\n) => {\r\n return (\r\n await anchor.web3.PublicKey.findProgramAddress(\r\n [wallet.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), mint.toBuffer()],\r\n SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID\r\n )\r\n )[0];\r\n};\r\n\r\nexport const mintOneToken = async (\r\n candyMachine: CandyMachine,\r\n config: anchor.web3.PublicKey, // feels like this should be part of candyMachine?\r\n payer: anchor.web3.PublicKey,\r\n treasury: anchor.web3.PublicKey,\r\n): Promise => {\r\n const mint = anchor.web3.Keypair.generate();\r\n const token = await getTokenWallet(payer, mint.publicKey);\r\n const { connection, program } = candyMachine;\r\n const metadata = await getMetadata(mint.publicKey);\r\n const masterEdition = await getMasterEdition(mint.publicKey);\r\n\r\n const rent = await connection.getMinimumBalanceForRentExemption(\r\n MintLayout.span\r\n );\r\n\r\n return await program.rpc.mintNft({\r\n accounts: {\r\n config,\r\n candyMachine: candyMachine.id,\r\n payer: payer,\r\n wallet: treasury,\r\n mint: mint.publicKey,\r\n metadata,\r\n masterEdition,\r\n mintAuthority: payer,\r\n updateAuthority: payer,\r\n tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,\r\n tokenProgram: TOKEN_PROGRAM_ID,\r\n systemProgram: anchor.web3.SystemProgram.programId,\r\n rent: anchor.web3.SYSVAR_RENT_PUBKEY,\r\n clock: anchor.web3.SYSVAR_CLOCK_PUBKEY,\r\n },\r\n signers: [mint],\r\n instructions: [\r\n anchor.web3.SystemProgram.createAccount({\r\n fromPubkey: payer,\r\n newAccountPubkey: mint.publicKey,\r\n space: MintLayout.span,\r\n lamports: rent,\r\n programId: TOKEN_PROGRAM_ID,\r\n }),\r\n Token.createInitMintInstruction(\r\n TOKEN_PROGRAM_ID,\r\n mint.publicKey,\r\n 0,\r\n payer,\r\n payer\r\n ),\r\n createAssociatedTokenAccountInstruction(\r\n token,\r\n payer,\r\n payer,\r\n mint.publicKey\r\n ),\r\n Token.createMintToInstruction(\r\n TOKEN_PROGRAM_ID,\r\n mint.publicKey,\r\n token,\r\n payer,\r\n [],\r\n 1\r\n ),\r\n ],\r\n });\r\n}\r\n\r\nexport const shortenAddress = (address: string, chars = 4): string => {\r\n return `${address.slice(0, chars)}...${address.slice(-chars)}`;\r\n};\r\n\r\nconst sleep = (ms: number): Promise => {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n}","import { useEffect, useState } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport Countdown from \"react-countdown\";\r\nimport { Button, CircularProgress, Snackbar } from \"@material-ui/core\";\r\nimport Alert from \"@material-ui/lab/Alert\";\r\n\r\nimport * as anchor from \"@project-serum/anchor\";\r\n\r\nimport { LAMPORTS_PER_SOL } from \"@solana/web3.js\";\r\n\r\nimport { useAnchorWallet } from \"@solana/wallet-adapter-react\";\r\nimport { WalletDialogButton } from \"@solana/wallet-adapter-material-ui\";\r\n\r\nimport {\r\n CandyMachine,\r\n awaitTransactionSignatureConfirmation,\r\n getCandyMachineState,\r\n mintOneToken,\r\n shortenAddress,\r\n} from \"./candy-machine\";\r\n\r\nconst ConnectButton = styled(WalletDialogButton)``;\r\n\r\nconst CounterText = styled.span``; // add your styles here\r\n\r\nconst MintContainer = styled.div``; // add your styles here\r\n\r\nconst MintButton = styled(Button)``; // add your styles here\r\n\r\nexport interface HomeProps {\r\n candyMachineId: anchor.web3.PublicKey;\r\n config: anchor.web3.PublicKey;\r\n connection: anchor.web3.Connection;\r\n startDate: number;\r\n treasury: anchor.web3.PublicKey;\r\n txTimeout: number;\r\n}\r\n\r\nconst Home = (props: HomeProps) => {\r\n const [balance, setBalance] = useState();\r\n const [isActive, setIsActive] = useState(false); // true when countdown completes\r\n const [isSoldOut, setIsSoldOut] = useState(false); // true when items remaining is zero\r\n const [isMinting, setIsMinting] = useState(false); // true when user got to press MINT\r\n\r\n const [itemsAvailable, setItemsAvailable] = useState(0);\r\n const [itemsRedeemed, setItemsRedeemed] = useState(0);\r\n const [itemsRemaining, setItemsRemaining] = useState(0);\r\n\r\n const [alertState, setAlertState] = useState({\r\n open: false,\r\n message: \"\",\r\n severity: undefined,\r\n });\r\n\r\n const [startDate, setStartDate] = useState(new Date(props.startDate));\r\n\r\n const wallet = useAnchorWallet();\r\n const [candyMachine, setCandyMachine] = useState();\r\n\r\n const refreshCandyMachineState = () => {\r\n (async () => {\r\n if (!wallet) return;\r\n\r\n const {\r\n candyMachine,\r\n goLiveDate,\r\n itemsAvailable,\r\n itemsRemaining,\r\n itemsRedeemed,\r\n } = await getCandyMachineState(\r\n wallet as anchor.Wallet,\r\n props.candyMachineId,\r\n props.connection\r\n );\r\n\r\n setItemsAvailable(itemsAvailable);\r\n setItemsRemaining(itemsRemaining);\r\n setItemsRedeemed(itemsRedeemed);\r\n\r\n setIsSoldOut(itemsRemaining === 0);\r\n setStartDate(goLiveDate);\r\n setCandyMachine(candyMachine);\r\n })();\r\n };\r\n\r\n const onMint = async () => {\r\n try {\r\n setIsMinting(true);\r\n if (wallet && candyMachine?.program) {\r\n const mintTxId = await mintOneToken(\r\n candyMachine,\r\n props.config,\r\n wallet.publicKey,\r\n props.treasury\r\n );\r\n\r\n const status = await awaitTransactionSignatureConfirmation(\r\n mintTxId,\r\n props.txTimeout,\r\n props.connection,\r\n \"singleGossip\",\r\n false\r\n );\r\n\r\n if (!status?.err) {\r\n setAlertState({\r\n open: true,\r\n message: \"Congratulations! Mint succeeded!\",\r\n severity: \"success\",\r\n });\r\n } else {\r\n setAlertState({\r\n open: true,\r\n message: \"Mint failed! Please try again!\",\r\n severity: \"error\",\r\n });\r\n }\r\n }\r\n } catch (error: any) {\r\n // TODO: blech:\r\n let message = error.msg || \"Minting failed! Please try again!\";\r\n if (!error.msg) {\r\n if (error.message.indexOf(\"0x138\")) {\r\n } else if (error.message.indexOf(\"0x137\")) {\r\n message = `SOLD OUT!`;\r\n } else if (error.message.indexOf(\"0x135\")) {\r\n message = `Insufficient funds to mint. Please fund your wallet.`;\r\n }\r\n } else {\r\n if (error.code === 311) {\r\n message = `SOLD OUT!`;\r\n setIsSoldOut(true);\r\n } else if (error.code === 312) {\r\n message = `Minting period hasn't started yet.`;\r\n }\r\n }\r\n\r\n setAlertState({\r\n open: true,\r\n message,\r\n severity: \"error\",\r\n });\r\n } finally {\r\n if (wallet) {\r\n const balance = await props.connection.getBalance(wallet.publicKey);\r\n setBalance(balance / LAMPORTS_PER_SOL);\r\n }\r\n setIsMinting(false);\r\n refreshCandyMachineState();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n (async () => {\r\n if (wallet) {\r\n const balance = await props.connection.getBalance(wallet.publicKey);\r\n setBalance(balance / LAMPORTS_PER_SOL);\r\n }\r\n })();\r\n }, [wallet, props.connection]);\r\n\r\n useEffect(refreshCandyMachineState, [\r\n wallet,\r\n props.candyMachineId,\r\n props.connection,\r\n ]);\r\n\r\n return (\r\n
\r\n {wallet && (\r\n

Wallet {shortenAddress(wallet.publicKey.toBase58() || \"\")}

\r\n )}\r\n\r\n {/* {wallet &&

Balance: {(balance || 0).toLocaleString()} SOL

}\r\n\r\n {wallet &&

Total Available: {itemsAvailable}

}\r\n\r\n {wallet &&

Redeemed: {itemsRedeemed}

}\r\n\r\n {wallet &&

Remaining: {itemsRemaining}

} */}\r\n\r\n \r\n {!wallet ? (\r\n Connect Wallet\r\n ) : (\r\n \r\n {isSoldOut ? (\r\n \"SOLD OUT\"\r\n ) : isActive ? (\r\n isMinting ? (\r\n \r\n ) : (\r\n \"MINT\"\r\n )\r\n ) : (\r\n completed && setIsActive(true)}\r\n onComplete={() => setIsActive(true)}\r\n renderer={renderCounter}\r\n />\r\n )}\r\n \r\n )}\r\n \r\n\r\n setAlertState({ ...alertState, open: false })}\r\n >\r\n setAlertState({ ...alertState, open: false })}\r\n severity={alertState.severity}\r\n >\r\n {alertState.message}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\ninterface AlertState {\r\n open: boolean;\r\n message: string;\r\n severity: \"success\" | \"info\" | \"warning\" | \"error\" | undefined;\r\n}\r\n\r\nconst renderCounter = ({ days, hours, minutes, seconds, completed }: any) => {\r\n return (\r\n \r\n {hours + (days || 0) * 24} hours, {minutes} minutes, {seconds} seconds\r\n \r\n );\r\n};\r\n\r\nexport default Home;\r\n","import \"./App.css\";\r\nimport { useMemo } from \"react\";\r\n\r\nimport Home from \"./Home\";\r\n\r\nimport * as anchor from \"@project-serum/anchor\";\r\nimport { clusterApiUrl } from \"@solana/web3.js\";\r\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\r\nimport {\r\n getPhantomWallet,\r\n getSlopeWallet,\r\n getSolflareWallet,\r\n getSolletWallet,\r\n getSolletExtensionWallet,\r\n} from \"@solana/wallet-adapter-wallets\";\r\n\r\nimport {\r\n ConnectionProvider,\r\n WalletProvider,\r\n} from \"@solana/wallet-adapter-react\";\r\n\r\nimport { WalletDialogProvider } from \"@solana/wallet-adapter-material-ui\";\r\nimport { createTheme, ThemeProvider } from \"@material-ui/core\";\r\n\r\nconst treasury = new anchor.web3.PublicKey(\r\n process.env.REACT_APP_TREASURY_ADDRESS!\r\n);\r\n\r\nconst config = new anchor.web3.PublicKey(\r\n process.env.REACT_APP_CANDY_MACHINE_CONFIG!\r\n);\r\n\r\nconst candyMachineId = new anchor.web3.PublicKey(\r\n process.env.REACT_APP_CANDY_MACHINE_ID!\r\n);\r\n\r\nconst network = process.env.REACT_APP_SOLANA_NETWORK as WalletAdapterNetwork;\r\n\r\nconst rpcHost = process.env.REACT_APP_SOLANA_RPC_HOST!;\r\nconst connection = new anchor.web3.Connection(rpcHost);\r\n\r\nconst startDateSeed = parseInt(process.env.REACT_APP_CANDY_START_DATE!, 10);\r\n\r\nconst txTimeout = 30000; // milliseconds (confirm this works for your project)\r\n\r\nconst theme = createTheme({\r\n palette: {\r\n type: 'dark',\r\n },\r\n overrides: {\r\n MuiButtonBase: {\r\n root: {\r\n justifyContent: 'flex-start',\r\n },\r\n },\r\n MuiButton: {\r\n root: {\r\n textTransform: undefined,\r\n padding: '12px 16px',\r\n },\r\n startIcon: {\r\n marginRight: 8,\r\n },\r\n endIcon: {\r\n marginLeft: 8,\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst App = () => {\r\n const endpoint = useMemo(() => clusterApiUrl(network), []);\r\n\r\n const wallets = useMemo(\r\n () => [\r\n getPhantomWallet(),\r\n getSlopeWallet(),\r\n getSolflareWallet(),\r\n getSolletWallet({ network }),\r\n getSolletExtensionWallet({ network })\r\n ],\r\n []\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default App;\r\n","import { ReportHandler } from 'web-vitals';\r\n\r\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}