{"version":3,"sources":["apollo/client.tsx","components/WalletProvider/config.ts","components/WalletProvider/index.tsx","utils/math.ts","apollo/generated/graphql.tsx","components/StreamProgress.tsx","components/UserStreamItem.tsx","components/UserStreams.tsx","pages/Home.tsx","components/ColorModeSwitcher.tsx","utils/helpers.ts","components/WalletButton.tsx","components/AccountModal.tsx","components/Header.tsx","hooks/useContract.ts","utils/constants.ts","hooks/usePendingTx.ts","components/WithdrawModal.tsx","hooks/useCoinCapPrice.ts","pages/Stream.tsx","hooks/useWithdraw.ts","App.tsx","reportWebVitals.ts","serviceWorker.ts","index.tsx"],"names":["httpLink","HttpLink","uri","client","ApolloClient","link","cache","InMemoryCache","RPC_URL","process","getLibrary","provider","library","Web3Provider","pollingInterval","wallets","walletName","preferred","rpcUrl","apiKey","label","rpc","1","bridge","appUrl","email","appName","walletCheck","checkName","WalletActions","SUPPORTED_NETWORKS","initialState","onboard","blockNumber","account","wallet","active","isConnected","initialized","reducer","state","action","type","SET_ONBOARD","payload","SET_BLOCK_NUMBER","SET_ACCOUNT","SET_PROVIDER","SET_WALLET","SET_ACTIVE","SET_INITIALIZED","SET_IS_CONNECTED","RESET_STATE","WalletContext","createContext","WalletProvider","children","useReducer","dispatch","useState","network","setNetwork","connect","useCallback","a","walletSelect","window","localStorage","removeItem","console","log","disconnect","walletReset","connectPrevious","previous","selected","warn","setBlockNumber","useEffect","subscriptions","address","setItem","name","Onboard","networkId","blockPollingInterval","hideBranding","previouslySelectedWallet","getItem","includes","getBlockNumber","then","catch","error","on","off","store","useMemo","Provider","value","useWallet","useContext","bn","n","base","BigNumber","bufferGas","limitOrPrice","times","decimalPlaces","toFixed","toBaseUnit","amount","decimals","multipliedBy","pow","fromBaseUnit","isZero","isNaN","toString","dividedBy","formatBaseAmount","inputAmount","zeroCount","Math","floor","log10","Number","decimalDisplay","e","toDisplayAmount","CancellationOrderBy","OrderDirection","StreamToSalaryOrderBy","StreamTransactionOrderBy","StreamOrderBy","TokenOrderBy","WithdrawalOrderBy","SubgraphErrorPolicy","StreamProgress","percent","title","color","border","borderColor","bg","borderRadius","p","my","justifyContent","colorScheme","mt","size","UserStreamItem","stream","rest","total","stopTime","minus","startTime","timeUsed","Date","getTime","percentStreamed","gte","div","toNumber","totalWithdrawn","withdrawals","reduce","acc","current","plus","percentWithdrawn","deposit","shadow","_hover","cursor","py","px","id","commify","token","symbol","w","fontWeight","dayjs","unix","format","defaultOptions","UserStreamsDocument","gql","UserSingleStreamDocument","UserStreams","history","useHistory","baseOptions","options","ApolloReactHooks","useUserStreamsQuery","skip","variables","userStreams","data","loading","spacing","streams","length","map","onClick","push","textAlign","HomePage","maxW","display","flexDirection","minHeight","fontSize","variant","ColorModeSwitcher","props","toggleColorMode","useColorMode","text","useColorModeValue","SwitchIcon","FaMoon","FaSun","marginLeft","icon","aria-label","isAddress","getAddress","toHexString","from","getEtherscanLink","prefix","shortenAddress","chars","parsed","Error","substring","WalletButton","onOpen","rightIcon","maxH","ml","src","icons","svg","btoa","iconSrc","undefined","AccountModal","isOpen","onClose","accent","useClipboard","hasCopied","onCopy","isCentered","pb","open","Header","useDisclosure","mx","justifySelf","getContract","ABI","AddressZero","Contract","getSigner","connectUnchecked","getProviderOrSigner","useContract","contractAddress","withSignerIfPossible","TxStatus","GAS_LIMIT","WithdrawModalItem","flexWrap","WithdrawModal","streamed","withdrawn","available","setAmount","withdraw","pendingTx","txId","UNKNOWN","pendingTxState","setPendingTxState","checkPendingTx","getTransactionReceipt","receipt","status","SUCCESS","FAILED","ERROR","usePendingTx","txHash","formattedAmount","ethPrice","assetId","price","setPrice","getPrice","axios","post","query","headers","asset","priceUsd","ignore","useCoinCapPrice","estimatedFee","inputMode","placeholder","borderTopRightRadius","borderBottomRightRadius","isInvalid","gt","eq","onChange","target","borderTopLeftRadius","borderBottomLeftRadius","message","isDisabled","lt","isLoading","confirming","loadingText","withdrawFromStream","StreamPage","useParams","track","tickerBg","withdrawAmount","setWithdrawAmount","now","setNow","useUserSingleStreamQuery","pollInterval","totalStreamed","ratePerSecond","availableAmount","streamId","isPayroll","setConfirming","setTxHash","setError","setEstimatedFee","sablierProxyContract","SablierAbi","sablierPayrollProxyContract","SablierPayrollProxyAbi","contract","withdrawMethod","fetchGas","getGasPrice","gasPrice","bufferedGasPrice","estimateFees","interface","encodeFunctionData","tx","to","rawGasPrice","gasLimit","getBalance","ethBalance","getTransactionCount","nonce","sendTransaction","withdrawTx","hash","errorTimeout","setTimeout","clearTimeout","useWithdraw","streamToSalary","salaryId","sortedTxs","Object","values","txs","sort","b","timestamp","position","thickness","zIndex","trackColor","recipient","toLowerCase","borderBottom","borderBottomColor","event","txhash","App","ApolloProvider","theme","resetCSS","exact","path","component","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","Boolean","location","hostname","match","ReactDOM","render","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.5f9f8eb0.chunk.js","sourcesContent":["import { ApolloClient, InMemoryCache, HttpLink } from '@apollo/client'\n// import { getMainDefinition } from '@apollo/client/utilities'\n// import { WebSocketLink } from '@apollo/client/link/ws'\n\nconst httpLink = new HttpLink({\n uri: 'https://api.thegraph.com/subgraphs/name/sablierhq/sablier'\n})\n\n// the graph rate limited websocket link so commented out for now\n\n// const wsLink = new WebSocketLink({\n// uri: 'ws://api.thegraph.com/subgraphs/name/sablierhq/sablier',\n// options: {\n// reconnect: true\n// }\n// })\n\n// /**\n// * @description A function that's called for each operation to execute and split between websocket and https\n// * @param left The Link to use for an operation if the function returns a \"truthy\" value\n// * @param right The Link to use for an operation if the function returns a \"falsy\" value\n// */\n// const splitLink = split(\n// ({ query }) => {\n// const definition = getMainDefinition(query)\n// return definition.kind === 'OperationDefinition' && definition.operation === 'subscription'\n// },\n// wsLink,\n// httpLink\n// )\n\nexport const client = new ApolloClient({\n link: httpLink, //splitLink,\n cache: new InMemoryCache()\n})\n","import Onboard from 'bnc-onboard'\nimport { API, Subscriptions } from 'bnc-onboard/dist/src/interfaces'\nimport { Web3Provider, ExternalProvider, JsonRpcFetchFunc } from '@ethersproject/providers'\n\nconst POLLING_INTERVAL = 15000\n\n// this key is connected to a dev github account\n// only need it for the 3 months while the airdrop is active\n// can be managed here: https://dashboard.fortmatic.com/\n// it is the free version.\n//const FORTMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY\nconst PORTIS_KEY = process.env.REACT_APP_PORTIS_DAPP_ID\nconst WC_BRIDGE_URL = process.env.REACT_APP_WC_BRIDGE\nconst CONTACT_EMAIL = 'nosupport@no-reply.com'\nconst APP_URL = 'https://sablierclaimer.com'\nconst RPC_URL = process.env.REACT_APP_RPC_URL\nconst APP_NAME = 'Sablier Claimer'\n\nexport function getLibrary(provider: ExternalProvider | JsonRpcFetchFunc): Web3Provider {\n const library = new Web3Provider(provider, 'any')\n library.pollingInterval = POLLING_INTERVAL\n return library\n}\n\nconst wallets = [\n { walletName: 'detectedwallet', preferred: true },\n {\n walletName: 'keepkey',\n preferred: true,\n rpcUrl: RPC_URL\n },\n {\n walletName: 'portis',\n apiKey: PORTIS_KEY,\n preferred: true,\n label: 'Portis By ShapeShift'\n },\n { walletName: 'metamask', preferred: true },\n {\n walletName: 'walletConnect',\n rpc: {\n 1: RPC_URL\n },\n bridge: WC_BRIDGE_URL,\n preferred: true\n },\n {\n walletName: 'trezor',\n appUrl: APP_URL,\n email: CONTACT_EMAIL,\n rpcUrl: RPC_URL,\n preferred: true\n },\n {\n walletName: 'ledger',\n rpcUrl: RPC_URL,\n preferred: true\n },\n { walletName: 'coinbase', preferred: true },\n { walletName: 'trust', preferred: true, rpcUrl: RPC_URL },\n // {\n // walletName: 'fortmatic',\n // apiKey: FORTMATIC_KEY,\n // preferred: true\n // },\n { walletName: 'opera' },\n { walletName: 'operaTouch' },\n { walletName: 'torus', preferred: true },\n { walletName: 'status' },\n { walletName: 'trust' },\n {\n walletName: 'walletLink',\n rpcUrl: RPC_URL,\n appName: APP_NAME,\n preferred: true\n },\n { walletName: 'imToken', rpcUrl: RPC_URL },\n { walletName: 'meetone' },\n { walletName: 'mykey', rpcUrl: RPC_URL },\n { walletName: 'huobiwallet', rpcUrl: RPC_URL },\n { walletName: 'hyperpay' },\n { walletName: 'wallet.io', rpcUrl: RPC_URL },\n { walletName: 'atoken' },\n { walletName: 'frame' },\n { walletName: 'ownbit' },\n { walletName: 'alphawallet' },\n { walletName: 'gnosis' },\n { walletName: 'xdefi' },\n { walletName: 'bitpie' }\n]\n\nconst walletCheck = [\n { checkName: 'derivationPath' },\n { checkName: 'accounts' },\n { checkName: 'connect' },\n { checkName: 'network' }\n]\n\nexport function initOnboard(subscriptions: Subscriptions): API {\n return Onboard({\n networkId: 1,\n blockPollingInterval: POLLING_INTERVAL,\n hideBranding: false,\n walletSelect: {\n wallets: wallets\n },\n walletCheck,\n subscriptions\n })\n}\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useReducer,\n useState\n} from 'react'\nimport { Web3Provider } from '@ethersproject/providers'\nimport { API as OnboardAPI, Wallet } from 'bnc-onboard/dist/src/interfaces'\nimport { getLibrary, initOnboard } from './config'\n\nconst SUPPORTED_NETWORKS = [1]\n\nenum WalletActions {\n SET_ONBOARD = 'SET_ONBOARD',\n SET_BLOCK_NUMBER = 'SET_BLOCK_NUMBER',\n SET_ACCOUNT = 'SET_ACCOUNT',\n SET_PROVIDER = 'SET_PROVIDER',\n SET_WALLET = 'SET_WALLET',\n SET_ACTIVE = 'SET_ACTIVE',\n SET_INITIALIZED = 'SET_INITIALIZED',\n SET_IS_CONNECTED = 'SET_IS_CONNECTED',\n RESET_STATE = 'RESET_STATE'\n}\n\ninterface InitialState {\n onboard: OnboardAPI | null\n account: string | null\n provider: Web3Provider | null\n blockNumber: number | null\n wallet: Wallet | null\n active: boolean\n isConnected: boolean\n initialized: boolean\n}\n\nconst initialState: InitialState = {\n onboard: null,\n blockNumber: null,\n account: null,\n provider: null,\n wallet: null,\n active: false,\n isConnected: false,\n initialized: false\n}\n\nexport interface IWalletContext {\n state: InitialState\n dispatch: React.Dispatch\n connect: () => Promise\n disconnect: () => void\n}\n\ntype ActionTypes =\n | { type: WalletActions.SET_ONBOARD; payload: OnboardAPI }\n | { type: WalletActions.SET_BLOCK_NUMBER; payload: number | null }\n | { type: WalletActions.SET_ACCOUNT; payload: string }\n | { type: WalletActions.SET_PROVIDER; payload: Web3Provider }\n | { type: WalletActions.SET_WALLET; payload: Wallet }\n | { type: WalletActions.SET_ACTIVE; payload: boolean }\n | { type: WalletActions.SET_INITIALIZED; payload: boolean }\n | { type: WalletActions.SET_IS_CONNECTED; payload: boolean }\n | { type: WalletActions.RESET_STATE }\n\nconst reducer = (state: InitialState, action: ActionTypes) => {\n switch (action.type) {\n case WalletActions.SET_ONBOARD:\n return { ...state, onboard: action.payload }\n case WalletActions.SET_BLOCK_NUMBER:\n return { ...state, blockNumber: action.payload }\n case WalletActions.SET_ACCOUNT:\n return { ...state, account: action.payload }\n case WalletActions.SET_PROVIDER:\n return { ...state, provider: action.payload }\n case WalletActions.SET_WALLET:\n return { ...state, wallet: action.payload }\n case WalletActions.SET_ACTIVE:\n return { ...state, active: action.payload }\n case WalletActions.SET_INITIALIZED:\n return { ...state, initialized: action.payload }\n case WalletActions.SET_IS_CONNECTED:\n return { ...state, isConnected: action.payload }\n case WalletActions.RESET_STATE:\n return {\n ...state,\n account: null,\n provider: null,\n wallet: null,\n active: false,\n isConnected: false\n }\n default:\n return state\n }\n}\n\nconst WalletContext = createContext(null)\n\nexport const WalletProvider = ({\n children\n}: {\n children: React.ReactNode\n}): JSX.Element => {\n const [state, dispatch] = useReducer(reducer, initialState)\n const [network, setNetwork] = useState(null)\n const connect = useCallback(async () => {\n try {\n const selected = await state.onboard?.walletSelect()\n if (selected) {\n const ready = await state.onboard?.walletCheck()\n if (ready) {\n dispatch({ type: WalletActions.SET_ACTIVE, payload: true })\n } else {\n dispatch({ type: WalletActions.SET_ACTIVE, payload: false })\n window.localStorage.removeItem('selectedWallet')\n }\n }\n } catch (error) {\n console.log(error)\n }\n }, [state?.onboard])\n\n const disconnect = useCallback(() => {\n if (state.onboard) {\n state.onboard?.walletReset()\n }\n dispatch({ type: WalletActions.RESET_STATE })\n window.localStorage.removeItem('selectedWallet')\n }, [state?.onboard])\n\n const connectPrevious = useCallback(\n async (previous: string) => {\n try {\n const selected = await state.onboard?.walletSelect(previous)\n if (!selected)\n dispatch({\n type: WalletActions.SET_INITIALIZED,\n payload: true\n })\n if (selected && state?.onboard?.walletCheck) {\n const ready = await state.onboard.walletCheck()\n if (ready) {\n dispatch({\n type: WalletActions.SET_ACTIVE,\n payload: true\n })\n dispatch({\n type: WalletActions.SET_INITIALIZED,\n payload: true\n })\n } else {\n dispatch({\n type: WalletActions.SET_ACTIVE,\n payload: false\n })\n dispatch({\n type: WalletActions.SET_INITIALIZED,\n payload: true\n })\n window.localStorage.removeItem('selectedWallet')\n }\n }\n } catch (error) {\n console.warn(error)\n dispatch({ type: WalletActions.SET_INITIALIZED, payload: true })\n disconnect()\n window.localStorage.removeItem('selectedWallet')\n }\n },\n [disconnect, state.onboard]\n )\n\n const setBlockNumber = useCallback(\n (blockNumber: number) => {\n if (state?.provider && blockNumber !== state.blockNumber) {\n dispatch({\n type: WalletActions.SET_BLOCK_NUMBER,\n payload: blockNumber\n })\n }\n },\n [state.blockNumber, state?.provider]\n )\n\n useEffect(() => {\n const onboard = initOnboard({\n network: (network) => {\n setNetwork(network)\n },\n address: (address) => {\n dispatch({ type: WalletActions.SET_ACCOUNT, payload: address })\n },\n wallet: (wallet: Wallet) => {\n if (wallet.provider) {\n dispatch({\n type: WalletActions.SET_WALLET,\n payload: wallet\n })\n dispatch({\n type: WalletActions.SET_PROVIDER,\n payload: getLibrary(wallet.provider)\n })\n window.localStorage.setItem('selectedWallet', wallet.name as string)\n } else {\n disconnect()\n }\n }\n })\n dispatch({ type: WalletActions.SET_ONBOARD, payload: onboard })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []) // we explicitly only want this to happen once\n\n useEffect(() => {\n const previouslySelectedWallet =\n window.localStorage.getItem('selectedWallet')\n if (previouslySelectedWallet && state.onboard && !state.active) {\n void connectPrevious(previouslySelectedWallet)\n } else if (!previouslySelectedWallet && state.onboard) {\n dispatch({ type: WalletActions.SET_INITIALIZED, payload: true })\n }\n }, [state.onboard, disconnect, state.active, connectPrevious])\n\n useEffect(() => {\n if (state.wallet && state.active && state.account) {\n dispatch({ type: WalletActions.SET_IS_CONNECTED, payload: true })\n } else {\n dispatch({ type: WalletActions.SET_IS_CONNECTED, payload: false })\n }\n }, [state.account, state.active, state.wallet])\n\n useEffect(() => {\n if (\n network &&\n state.active &&\n state.wallet &&\n !SUPPORTED_NETWORKS.includes(network)\n ) {\n disconnect()\n }\n }, [network, state.active, state.wallet, disconnect])\n\n // attach/detach listeners\n useEffect(() => {\n if (state?.provider) {\n state?.provider\n .getBlockNumber()\n .then(setBlockNumber)\n .catch((error) =>\n console.error(`Failed to get block number for chainId:`, error)\n )\n\n state?.provider.on('block', setBlockNumber)\n } else {\n dispatch({ type: WalletActions.SET_BLOCK_NUMBER, payload: null })\n }\n return () => {\n if (state?.provider) {\n state.provider.off('block', setBlockNumber)\n }\n }\n }, [setBlockNumber, state?.provider])\n\n const store: IWalletContext = useMemo(\n () => ({ state, dispatch, connect, disconnect }),\n [state, connect, disconnect]\n )\n\n return (\n {children}\n )\n}\n\nexport const useWallet = (): IWalletContext =>\n useContext(WalletContext as React.Context)\n","import BigNumber from 'bignumber.js'\n\nexport type BN = BigNumber\nexport const bn = (n: BigNumber.Value, base = 10): BN => new BigNumber(n, base)\n\nexport function bufferGas(limitOrPrice: string): string {\n return bn(limitOrPrice).times(1.2).decimalPlaces(0).toFixed()\n}\n\nexport function toBaseUnit(amount: string | BN, decimals: number): string {\n return bn(amount)\n .multipliedBy(bn(10).pow(bn(decimals)))\n .decimalPlaces(0)\n .toFixed()\n}\n\nexport function fromBaseUnit(amount: string | BN | number, decimals: number): string {\n if (!bn(amount).isZero() && !bn(amount).isNaN()) {\n return bn(amount)\n .dividedBy(bn(10).pow(bn(decimals)))\n .toFixed()\n }\n return bn(0).toString()\n}\n\nexport function formatBaseAmount(amount: string | BN, decimals: number): string | null {\n if (bn(amount).isNaN() || bn(amount).isZero()) return '0'\n try {\n const inputAmount: string = fromBaseUnit(amount, decimals)\n const zeroCount: number = -Math.floor(Math.log10(Number(inputAmount)))\n const decimalDisplay: number = zeroCount + 5 >= decimals ? decimals : zeroCount + 5\n const formattedAmount =\n zeroCount < 1 ? bn(inputAmount).toFixed(3, 1) : bn(inputAmount).toFixed(decimalDisplay, 1)\n return formattedAmount\n } catch (e) {\n console.warn(e)\n return null\n }\n}\n\nexport function toDisplayAmount(amount: string | number, decimals: number): string {\n if (bn(amount).isNaN() || bn(amount).isZero()) return ''\n try {\n const zeroCount: number = -Math.floor(Math.log10(Number(amount)))\n const decimalDisplay: number = zeroCount + 5 >= decimals ? decimals : zeroCount + 5\n const formattedAmount =\n zeroCount < 1 ? bn(amount).toFixed(3, 1) : bn(amount).toFixed(decimalDisplay, 1)\n return formattedAmount\n } catch (e) {\n console.error(e)\n return ''\n }\n}\n","import { gql } from '@apollo/client';\nimport * as ApolloReactCommon from '@apollo/client';\nimport * as ApolloReactHooks from '@apollo/client';\nexport type Maybe = T | null;\nexport type Exact = { [K in keyof T]: T[K] };\nexport type MakeOptional = Omit & { [SubKey in K]?: Maybe };\nexport type MakeMaybe = Omit & { [SubKey in K]: Maybe };\nconst defaultOptions = {}\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n BigDecimal: any;\n BigInt: any;\n Bytes: any;\n};\n\n\n\n\n\n\nexport type BlockHeight = {\n hash?: Maybe;\n number?: Maybe;\n};\n\n\n/** Generic type for Sablier cancellations. */\nexport type Cancellation = {\n __typename?: 'Cancellation';\n /** The same as the stream id */\n id: Scalars['ID'];\n /** Amount of tokens the recipient was distributed */\n recipientBalance: Scalars['BigInt'];\n /** Amount of tokens the sender was distributed */\n senderBalance: Scalars['BigInt'];\n /** The time when the cancellation was made */\n timestamp: Scalars['BigInt'];\n /** The token used for payment */\n token?: Maybe;\n /** Transaction hash */\n txhash: Scalars['String'];\n};\n\nexport type CancellationFilter = {\n id?: Maybe;\n id_not?: Maybe;\n id_gt?: Maybe;\n id_lt?: Maybe;\n id_gte?: Maybe;\n id_lte?: Maybe;\n id_in?: Maybe>;\n id_not_in?: Maybe>;\n recipientBalance?: Maybe;\n recipientBalance_not?: Maybe;\n recipientBalance_gt?: Maybe;\n recipientBalance_lt?: Maybe;\n recipientBalance_gte?: Maybe;\n recipientBalance_lte?: Maybe;\n recipientBalance_in?: Maybe>;\n recipientBalance_not_in?: Maybe>;\n senderBalance?: Maybe;\n senderBalance_not?: Maybe;\n senderBalance_gt?: Maybe;\n senderBalance_lt?: Maybe;\n senderBalance_gte?: Maybe;\n senderBalance_lte?: Maybe;\n senderBalance_in?: Maybe>;\n senderBalance_not_in?: Maybe>;\n timestamp?: Maybe;\n timestamp_not?: Maybe;\n timestamp_gt?: Maybe;\n timestamp_lt?: Maybe;\n timestamp_gte?: Maybe;\n timestamp_lte?: Maybe;\n timestamp_in?: Maybe>;\n timestamp_not_in?: Maybe>;\n token?: Maybe;\n token_not?: Maybe;\n token_gt?: Maybe;\n token_lt?: Maybe;\n token_gte?: Maybe;\n token_lte?: Maybe;\n token_in?: Maybe>;\n token_not_in?: Maybe>;\n token_contains?: Maybe;\n token_not_contains?: Maybe;\n token_starts_with?: Maybe;\n token_not_starts_with?: Maybe;\n token_ends_with?: Maybe;\n token_not_ends_with?: Maybe;\n txhash?: Maybe;\n txhash_not?: Maybe;\n txhash_gt?: Maybe;\n txhash_lt?: Maybe;\n txhash_gte?: Maybe;\n txhash_lte?: Maybe;\n txhash_in?: Maybe>;\n txhash_not_in?: Maybe>;\n txhash_contains?: Maybe;\n txhash_not_contains?: Maybe;\n txhash_starts_with?: Maybe;\n txhash_not_starts_with?: Maybe;\n txhash_ends_with?: Maybe;\n txhash_not_ends_with?: Maybe;\n};\n\nexport enum CancellationOrderBy {\n id = 'id',\n recipientBalance = 'recipientBalance',\n senderBalance = 'senderBalance',\n timestamp = 'timestamp',\n token = 'token',\n txhash = 'txhash'\n}\n\nexport enum OrderDirection {\n asc = 'asc',\n desc = 'desc'\n}\n\nexport type Query = {\n __typename?: 'Query';\n token?: Maybe;\n tokens: Array;\n cancellation?: Maybe;\n cancellations: Array;\n stream?: Maybe;\n streams: Array;\n streamToSalary?: Maybe;\n streamToSalaries: Array;\n streamTransaction?: Maybe;\n streamTransactions: Array;\n withdrawal?: Maybe;\n withdrawals: Array;\n /** Access to subgraph metadata */\n _meta?: Maybe;\n};\n\n\nexport type QueryTokenArgs = {\n id: Scalars['ID'];\n block?: Maybe;\n};\n\n\nexport type QueryTokensArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n block?: Maybe;\n};\n\n\nexport type QueryCancellationArgs = {\n id: Scalars['ID'];\n block?: Maybe;\n};\n\n\nexport type QueryCancellationsArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n block?: Maybe;\n};\n\n\nexport type QueryStreamArgs = {\n id: Scalars['ID'];\n block?: Maybe;\n};\n\n\nexport type QueryStreamsArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n block?: Maybe;\n};\n\n\nexport type QueryStreamToSalaryArgs = {\n id: Scalars['ID'];\n block?: Maybe;\n};\n\n\nexport type QueryStreamToSalariesArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n block?: Maybe;\n};\n\n\nexport type QueryStreamTransactionArgs = {\n id: Scalars['ID'];\n block?: Maybe;\n};\n\n\nexport type QueryStreamTransactionsArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n block?: Maybe;\n};\n\n\nexport type QueryWithdrawalArgs = {\n id: Scalars['ID'];\n block?: Maybe;\n};\n\n\nexport type QueryWithdrawalsArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n block?: Maybe;\n};\n\n\nexport type QueryMetaArgs = {\n block?: Maybe;\n};\n\n/** Generic type for Sablier streams. */\nexport type Stream = {\n __typename?: 'Stream';\n /** Details about cancellation time and the distributed amounts */\n cancellation?: Maybe;\n deposit: Scalars['BigInt'];\n /** The salary id in v1.0.0 and the actual stream id in v1.1.0 */\n id: Scalars['ID'];\n /** How much is being streamed every second */\n ratePerSecond: Scalars['BigInt'];\n /** The address of the recipient account */\n recipient: Scalars['Bytes'];\n /** The address of the sender account, who created the streamed */\n sender: Scalars['Bytes'];\n /** The time when the stream commences */\n startTime: Scalars['BigInt'];\n /** The time when the stream stops */\n stopTime: Scalars['BigInt'];\n /** The time when the stream was created */\n timestamp: Scalars['BigInt'];\n /** The token used for payment */\n token?: Maybe;\n /** Exhaustive list of all transactions that interacted with the stream */\n txs?: Maybe>;\n /** Exhaustive list of all withdrawals made from the stream */\n withdrawals?: Maybe>;\n};\n\n\n/** Generic type for Sablier streams. */\nexport type StreamTxsArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n};\n\n\n/** Generic type for Sablier streams. */\nexport type StreamWithdrawalsArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n};\n\n/** Needed for retroactively indexing cancellations and withdrawals for v1.0.0 streams. */\nexport type StreamToSalary = {\n __typename?: 'StreamToSalary';\n /** The stream id */\n id: Scalars['ID'];\n /** The salary id */\n salaryId: Scalars['BigInt'];\n};\n\nexport type StreamToSalaryFilter = {\n id?: Maybe;\n id_not?: Maybe;\n id_gt?: Maybe;\n id_lt?: Maybe;\n id_gte?: Maybe;\n id_lte?: Maybe;\n id_in?: Maybe>;\n id_not_in?: Maybe>;\n salaryId?: Maybe;\n salaryId_not?: Maybe;\n salaryId_gt?: Maybe;\n salaryId_lt?: Maybe;\n salaryId_gte?: Maybe;\n salaryId_lte?: Maybe;\n salaryId_in?: Maybe>;\n salaryId_not_in?: Maybe>;\n};\n\nexport enum StreamToSalaryOrderBy {\n id = 'id',\n salaryId = 'salaryId'\n}\n\n/** Ethereum transaction that interacted with a stream. */\nexport type StreamTransaction = {\n __typename?: 'StreamTransaction';\n /** Transaction hash concatenated with log index */\n id: Scalars['ID'];\n /** Block number */\n block: Scalars['Int'];\n /** The name of the event emitted */\n event: Scalars['String'];\n /** The caller, or msg.sender */\n from: Scalars['Bytes'];\n /** The stream entity associated with this transaction */\n stream: Stream;\n /** Block timestamp */\n timestamp: Scalars['BigInt'];\n /** The contract address */\n to?: Maybe;\n /** Transaction hash */\n txhash: Scalars['String'];\n};\n\nexport type StreamTransactionFilter = {\n id?: Maybe;\n id_not?: Maybe;\n id_gt?: Maybe;\n id_lt?: Maybe;\n id_gte?: Maybe;\n id_lte?: Maybe;\n id_in?: Maybe>;\n id_not_in?: Maybe>;\n block?: Maybe;\n block_not?: Maybe;\n block_gt?: Maybe;\n block_lt?: Maybe;\n block_gte?: Maybe;\n block_lte?: Maybe;\n block_in?: Maybe>;\n block_not_in?: Maybe>;\n event?: Maybe;\n event_not?: Maybe;\n event_gt?: Maybe;\n event_lt?: Maybe;\n event_gte?: Maybe;\n event_lte?: Maybe;\n event_in?: Maybe>;\n event_not_in?: Maybe>;\n event_contains?: Maybe;\n event_not_contains?: Maybe;\n event_starts_with?: Maybe;\n event_not_starts_with?: Maybe;\n event_ends_with?: Maybe;\n event_not_ends_with?: Maybe;\n from?: Maybe;\n from_not?: Maybe;\n from_in?: Maybe>;\n from_not_in?: Maybe>;\n from_contains?: Maybe;\n from_not_contains?: Maybe;\n stream?: Maybe;\n stream_not?: Maybe;\n stream_gt?: Maybe;\n stream_lt?: Maybe;\n stream_gte?: Maybe;\n stream_lte?: Maybe;\n stream_in?: Maybe>;\n stream_not_in?: Maybe>;\n stream_contains?: Maybe;\n stream_not_contains?: Maybe;\n stream_starts_with?: Maybe;\n stream_not_starts_with?: Maybe;\n stream_ends_with?: Maybe;\n stream_not_ends_with?: Maybe;\n timestamp?: Maybe;\n timestamp_not?: Maybe;\n timestamp_gt?: Maybe;\n timestamp_lt?: Maybe;\n timestamp_gte?: Maybe;\n timestamp_lte?: Maybe;\n timestamp_in?: Maybe>;\n timestamp_not_in?: Maybe>;\n to?: Maybe;\n to_not?: Maybe;\n to_in?: Maybe>;\n to_not_in?: Maybe>;\n to_contains?: Maybe;\n to_not_contains?: Maybe;\n txhash?: Maybe;\n txhash_not?: Maybe;\n txhash_gt?: Maybe;\n txhash_lt?: Maybe;\n txhash_gte?: Maybe;\n txhash_lte?: Maybe;\n txhash_in?: Maybe>;\n txhash_not_in?: Maybe>;\n txhash_contains?: Maybe;\n txhash_not_contains?: Maybe;\n txhash_starts_with?: Maybe;\n txhash_not_starts_with?: Maybe;\n txhash_ends_with?: Maybe;\n txhash_not_ends_with?: Maybe;\n};\n\nexport enum StreamTransactionOrderBy {\n id = 'id',\n block = 'block',\n event = 'event',\n from = 'from',\n stream = 'stream',\n timestamp = 'timestamp',\n to = 'to',\n txhash = 'txhash'\n}\n\nexport type StreamFilter = {\n cancellation?: Maybe;\n cancellation_not?: Maybe;\n cancellation_gt?: Maybe;\n cancellation_lt?: Maybe;\n cancellation_gte?: Maybe;\n cancellation_lte?: Maybe;\n cancellation_in?: Maybe>;\n cancellation_not_in?: Maybe>;\n cancellation_contains?: Maybe;\n cancellation_not_contains?: Maybe;\n cancellation_starts_with?: Maybe;\n cancellation_not_starts_with?: Maybe;\n cancellation_ends_with?: Maybe;\n cancellation_not_ends_with?: Maybe;\n deposit?: Maybe;\n deposit_not?: Maybe;\n deposit_gt?: Maybe;\n deposit_lt?: Maybe;\n deposit_gte?: Maybe;\n deposit_lte?: Maybe;\n deposit_in?: Maybe>;\n deposit_not_in?: Maybe>;\n id?: Maybe;\n id_not?: Maybe;\n id_gt?: Maybe;\n id_lt?: Maybe;\n id_gte?: Maybe;\n id_lte?: Maybe;\n id_in?: Maybe>;\n id_not_in?: Maybe>;\n ratePerSecond?: Maybe;\n ratePerSecond_not?: Maybe;\n ratePerSecond_gt?: Maybe;\n ratePerSecond_lt?: Maybe;\n ratePerSecond_gte?: Maybe;\n ratePerSecond_lte?: Maybe;\n ratePerSecond_in?: Maybe>;\n ratePerSecond_not_in?: Maybe>;\n recipient?: Maybe;\n recipient_not?: Maybe;\n recipient_in?: Maybe>;\n recipient_not_in?: Maybe>;\n recipient_contains?: Maybe;\n recipient_not_contains?: Maybe;\n sender?: Maybe;\n sender_not?: Maybe;\n sender_in?: Maybe>;\n sender_not_in?: Maybe>;\n sender_contains?: Maybe;\n sender_not_contains?: Maybe;\n startTime?: Maybe;\n startTime_not?: Maybe;\n startTime_gt?: Maybe;\n startTime_lt?: Maybe;\n startTime_gte?: Maybe;\n startTime_lte?: Maybe;\n startTime_in?: Maybe>;\n startTime_not_in?: Maybe>;\n stopTime?: Maybe;\n stopTime_not?: Maybe;\n stopTime_gt?: Maybe;\n stopTime_lt?: Maybe;\n stopTime_gte?: Maybe;\n stopTime_lte?: Maybe;\n stopTime_in?: Maybe>;\n stopTime_not_in?: Maybe>;\n timestamp?: Maybe;\n timestamp_not?: Maybe;\n timestamp_gt?: Maybe;\n timestamp_lt?: Maybe;\n timestamp_gte?: Maybe;\n timestamp_lte?: Maybe;\n timestamp_in?: Maybe>;\n timestamp_not_in?: Maybe>;\n token?: Maybe;\n token_not?: Maybe;\n token_gt?: Maybe;\n token_lt?: Maybe;\n token_gte?: Maybe;\n token_lte?: Maybe;\n token_in?: Maybe>;\n token_not_in?: Maybe>;\n token_contains?: Maybe;\n token_not_contains?: Maybe;\n token_starts_with?: Maybe;\n token_not_starts_with?: Maybe;\n token_ends_with?: Maybe;\n token_not_ends_with?: Maybe;\n};\n\nexport enum StreamOrderBy {\n cancellation = 'cancellation',\n deposit = 'deposit',\n id = 'id',\n ratePerSecond = 'ratePerSecond',\n recipient = 'recipient',\n sender = 'sender',\n startTime = 'startTime',\n stopTime = 'stopTime',\n timestamp = 'timestamp',\n token = 'token',\n txs = 'txs',\n withdrawals = 'withdrawals'\n}\n\nexport type Subscription = {\n __typename?: 'Subscription';\n token?: Maybe;\n tokens: Array;\n cancellation?: Maybe;\n cancellations: Array;\n stream?: Maybe;\n streams: Array;\n streamToSalary?: Maybe;\n streamToSalaries: Array;\n streamTransaction?: Maybe;\n streamTransactions: Array;\n withdrawal?: Maybe;\n withdrawals: Array;\n /** Access to subgraph metadata */\n _meta?: Maybe;\n};\n\n\nexport type SubscriptionTokenArgs = {\n id: Scalars['ID'];\n block?: Maybe;\n};\n\n\nexport type SubscriptionTokensArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n block?: Maybe;\n};\n\n\nexport type SubscriptionCancellationArgs = {\n id: Scalars['ID'];\n block?: Maybe;\n};\n\n\nexport type SubscriptionCancellationsArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n block?: Maybe;\n};\n\n\nexport type SubscriptionStreamArgs = {\n id: Scalars['ID'];\n block?: Maybe;\n};\n\n\nexport type SubscriptionStreamsArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n block?: Maybe;\n};\n\n\nexport type SubscriptionStreamToSalaryArgs = {\n id: Scalars['ID'];\n block?: Maybe;\n};\n\n\nexport type SubscriptionStreamToSalariesArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n block?: Maybe;\n};\n\n\nexport type SubscriptionStreamTransactionArgs = {\n id: Scalars['ID'];\n block?: Maybe;\n};\n\n\nexport type SubscriptionStreamTransactionsArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n block?: Maybe;\n};\n\n\nexport type SubscriptionWithdrawalArgs = {\n id: Scalars['ID'];\n block?: Maybe;\n};\n\n\nexport type SubscriptionWithdrawalsArgs = {\n skip?: Maybe;\n first?: Maybe;\n orderBy?: Maybe;\n orderDirection?: Maybe;\n where?: Maybe;\n block?: Maybe;\n};\n\n\nexport type SubscriptionMetaArgs = {\n block?: Maybe;\n};\n\n/** Generic type for ERC-20 tokens. */\nexport type Token = {\n __typename?: 'Token';\n /** The contract address */\n id: Scalars['ID'];\n /** The ERC-20 decimals */\n decimals?: Maybe;\n /** The ERC-20 name */\n name?: Maybe;\n /** The ERC-20 symbol */\n symbol?: Maybe;\n};\n\nexport type TokenFilter = {\n id?: Maybe;\n id_not?: Maybe;\n id_gt?: Maybe;\n id_lt?: Maybe;\n id_gte?: Maybe;\n id_lte?: Maybe;\n id_in?: Maybe>;\n id_not_in?: Maybe>;\n decimals?: Maybe;\n decimals_not?: Maybe;\n decimals_gt?: Maybe;\n decimals_lt?: Maybe;\n decimals_gte?: Maybe;\n decimals_lte?: Maybe;\n decimals_in?: Maybe>;\n decimals_not_in?: Maybe>;\n name?: Maybe;\n name_not?: Maybe;\n name_gt?: Maybe;\n name_lt?: Maybe;\n name_gte?: Maybe;\n name_lte?: Maybe;\n name_in?: Maybe>;\n name_not_in?: Maybe>;\n name_contains?: Maybe;\n name_not_contains?: Maybe;\n name_starts_with?: Maybe;\n name_not_starts_with?: Maybe;\n name_ends_with?: Maybe;\n name_not_ends_with?: Maybe;\n symbol?: Maybe;\n symbol_not?: Maybe;\n symbol_gt?: Maybe;\n symbol_lt?: Maybe;\n symbol_gte?: Maybe;\n symbol_lte?: Maybe;\n symbol_in?: Maybe>;\n symbol_not_in?: Maybe>;\n symbol_contains?: Maybe;\n symbol_not_contains?: Maybe;\n symbol_starts_with?: Maybe;\n symbol_not_starts_with?: Maybe;\n symbol_ends_with?: Maybe;\n symbol_not_ends_with?: Maybe;\n};\n\nexport enum TokenOrderBy {\n id = 'id',\n decimals = 'decimals',\n name = 'name',\n symbol = 'symbol'\n}\n\n/** Generic type for Sablier withdrawals. */\nexport type Withdrawal = {\n __typename?: 'Withdrawal';\n /** Transaction hash concatenated with log index */\n id: Scalars['ID'];\n /** How many tokens were withdrawn */\n amount: Scalars['BigInt'];\n /** The stream entity associated with this withdrawal */\n stream: Stream;\n /** The time when the cancellation was made */\n timestamp: Scalars['BigInt'];\n /** The token used for payment */\n token?: Maybe;\n /** Transaction hash */\n txhash: Scalars['String'];\n};\n\nexport type WithdrawalFilter = {\n id?: Maybe;\n id_not?: Maybe;\n id_gt?: Maybe;\n id_lt?: Maybe;\n id_gte?: Maybe;\n id_lte?: Maybe;\n id_in?: Maybe>;\n id_not_in?: Maybe>;\n amount?: Maybe;\n amount_not?: Maybe;\n amount_gt?: Maybe;\n amount_lt?: Maybe;\n amount_gte?: Maybe;\n amount_lte?: Maybe;\n amount_in?: Maybe>;\n amount_not_in?: Maybe>;\n stream?: Maybe;\n stream_not?: Maybe;\n stream_gt?: Maybe;\n stream_lt?: Maybe;\n stream_gte?: Maybe;\n stream_lte?: Maybe;\n stream_in?: Maybe>;\n stream_not_in?: Maybe>;\n stream_contains?: Maybe;\n stream_not_contains?: Maybe;\n stream_starts_with?: Maybe;\n stream_not_starts_with?: Maybe;\n stream_ends_with?: Maybe;\n stream_not_ends_with?: Maybe;\n timestamp?: Maybe;\n timestamp_not?: Maybe;\n timestamp_gt?: Maybe;\n timestamp_lt?: Maybe;\n timestamp_gte?: Maybe;\n timestamp_lte?: Maybe;\n timestamp_in?: Maybe>;\n timestamp_not_in?: Maybe>;\n token?: Maybe;\n token_not?: Maybe;\n token_gt?: Maybe;\n token_lt?: Maybe;\n token_gte?: Maybe;\n token_lte?: Maybe;\n token_in?: Maybe>;\n token_not_in?: Maybe>;\n token_contains?: Maybe;\n token_not_contains?: Maybe;\n token_starts_with?: Maybe;\n token_not_starts_with?: Maybe;\n token_ends_with?: Maybe;\n token_not_ends_with?: Maybe;\n txhash?: Maybe;\n txhash_not?: Maybe;\n txhash_gt?: Maybe;\n txhash_lt?: Maybe;\n txhash_gte?: Maybe;\n txhash_lte?: Maybe;\n txhash_in?: Maybe>;\n txhash_not_in?: Maybe>;\n txhash_contains?: Maybe;\n txhash_not_contains?: Maybe;\n txhash_starts_with?: Maybe;\n txhash_not_starts_with?: Maybe;\n txhash_ends_with?: Maybe;\n txhash_not_ends_with?: Maybe;\n};\n\nexport enum WithdrawalOrderBy {\n id = 'id',\n amount = 'amount',\n stream = 'stream',\n timestamp = 'timestamp',\n token = 'token',\n txhash = 'txhash'\n}\n\nexport type Block = {\n __typename?: '_Block_';\n /** The hash of the block */\n hash?: Maybe;\n /** The block number */\n number: Scalars['Int'];\n};\n\n/** The type for the top-level _meta field */\nexport type Meta = {\n __typename?: '_Meta_';\n /**\n * Information about a specific subgraph block. The hash of the block\n * will be null if the _meta field has a block constraint that asks for\n * a block number. It will be filled if the _meta field has no block constraint\n * and therefore asks for the latest block\n */\n block: Block;\n /** The deployment ID */\n deployment: Scalars['String'];\n /** If `true`, the subgraph encountered indexing errors at some past block */\n hasIndexingErrors: Scalars['Boolean'];\n};\n\nexport enum SubgraphErrorPolicy {\n /** Data will be returned even if the subgraph has indexing errors */\n allow = 'allow',\n /** If the subgraph has indexing errors, data will be omitted. The default. */\n deny = 'deny'\n}\n\nexport type UserStreamsQueryVariables = Exact<{\n account?: Maybe;\n}>;\n\n\nexport type UserStreamsQuery = (\n { __typename?: 'Query' }\n & { streams: Array<(\n { __typename?: 'Stream' }\n & Pick\n & { token?: Maybe<(\n { __typename?: 'Token' }\n & Pick\n )>, txs?: Maybe\n )>>, withdrawals?: Maybe\n & { stream: (\n { __typename?: 'Stream' }\n & Pick\n ) }\n )>>, cancellation?: Maybe<(\n { __typename?: 'Cancellation' }\n & Pick\n )> }\n )> }\n);\n\nexport type UserSingleStreamQueryVariables = Exact<{\n id: Scalars['ID'];\n}>;\n\n\nexport type UserSingleStreamQuery = (\n { __typename?: 'Query' }\n & { stream?: Maybe<(\n { __typename?: 'Stream' }\n & Pick\n & { token?: Maybe<(\n { __typename?: 'Token' }\n & Pick\n )>, txs?: Maybe\n )>>, withdrawals?: Maybe\n )>>, cancellation?: Maybe<(\n { __typename?: 'Cancellation' }\n & Pick\n )> }\n )>, streamToSalary?: Maybe<(\n { __typename?: 'StreamToSalary' }\n & Pick\n )> }\n);\n\n\nexport const UserStreamsDocument = gql`\n query UserStreams($account: Bytes) {\n streams(where: {recipient: $account}) {\n id\n deposit\n timestamp\n sender\n recipient\n startTime\n stopTime\n ratePerSecond\n token {\n id\n symbol\n name\n decimals\n }\n txs {\n id\n block\n event\n from\n timestamp\n to\n }\n withdrawals {\n id\n timestamp\n amount\n txhash\n stream {\n id\n }\n }\n cancellation {\n id\n timestamp\n recipientBalance\n senderBalance\n txhash\n }\n }\n}\n `;\n\n/**\n * __useUserStreamsQuery__\n *\n * To run a query within a React component, call `useUserStreamsQuery` and pass it any options that fit your needs.\n * When your component renders, `useUserStreamsQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useUserStreamsQuery({\n * variables: {\n * account: // value for 'account'\n * },\n * });\n */\nexport function useUserStreamsQuery(baseOptions?: ApolloReactHooks.QueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return ApolloReactHooks.useQuery(UserStreamsDocument, options);\n }\nexport function useUserStreamsLazyQuery(baseOptions?: ApolloReactHooks.LazyQueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return ApolloReactHooks.useLazyQuery(UserStreamsDocument, options);\n }\nexport type UserStreamsQueryHookResult = ReturnType;\nexport type UserStreamsLazyQueryHookResult = ReturnType;\nexport type UserStreamsQueryResult = ApolloReactCommon.QueryResult;\nexport function refetchUserStreamsQuery(variables?: UserStreamsQueryVariables) {\n return { query: UserStreamsDocument, variables: variables }\n }\nexport const UserSingleStreamDocument = gql`\n query UserSingleStream($id: ID!) {\n stream(id: $id) {\n id\n deposit\n sender\n recipient\n startTime\n stopTime\n ratePerSecond\n token {\n id\n name\n decimals\n symbol\n }\n txs {\n event\n txhash\n timestamp\n }\n withdrawals {\n id\n timestamp\n amount\n txhash\n }\n cancellation {\n id\n timestamp\n recipientBalance\n senderBalance\n txhash\n }\n }\n streamToSalary(id: $id) {\n salaryId\n }\n}\n `;\n\n/**\n * __useUserSingleStreamQuery__\n *\n * To run a query within a React component, call `useUserSingleStreamQuery` and pass it any options that fit your needs.\n * When your component renders, `useUserSingleStreamQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useUserSingleStreamQuery({\n * variables: {\n * id: // value for 'id'\n * },\n * });\n */\nexport function useUserSingleStreamQuery(baseOptions: ApolloReactHooks.QueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return ApolloReactHooks.useQuery(UserSingleStreamDocument, options);\n }\nexport function useUserSingleStreamLazyQuery(baseOptions?: ApolloReactHooks.LazyQueryHookOptions) {\n const options = {...defaultOptions, ...baseOptions}\n return ApolloReactHooks.useLazyQuery(UserSingleStreamDocument, options);\n }\nexport type UserSingleStreamQueryHookResult = ReturnType;\nexport type UserSingleStreamLazyQueryHookResult = ReturnType;\nexport type UserSingleStreamQueryResult = ApolloReactCommon.QueryResult;\nexport function refetchUserSingleStreamQuery(variables?: UserSingleStreamQueryVariables) {\n return { query: UserSingleStreamDocument, variables: variables }\n }","import React from 'react'\nimport { Box, Flex, Progress, Text } from '@chakra-ui/react'\n\nexport const StreamProgress = ({\n percent,\n title,\n color\n}: {\n percent: number\n title: string\n color: string\n}): JSX.Element => (\n \n \n {title}\n {percent.toFixed(2)}%\n \n \n \n)\n","import React from 'react'\nimport { Box, BoxProps, HStack, Text } from '@chakra-ui/react'\nimport { Stream } from 'apollo/generated/graphql'\nimport { commify } from 'ethers/lib/utils'\nimport { bn, formatBaseAmount } from 'utils/math'\nimport dayjs from 'dayjs'\nimport { StreamProgress } from './StreamProgress'\n\nexport type StreamItemProps = BoxProps & {\n stream: Partial\n}\n\nexport const UserStreamItem = ({ stream, ...rest }: StreamItemProps): JSX.Element => {\n const total = bn(stream.stopTime).minus(bn(stream.startTime))\n const timeUsed = bn(new Date().getTime() / 1000).minus(bn(stream.startTime))\n const percentStreamed = bn(new Date().getTime() / 1000).gte(bn(stream.stopTime))\n ? 100\n : timeUsed.div(total).times(100).toNumber()\n const totalWithdrawn = stream.withdrawals?.reduce((acc, current) => {\n return bn(acc).plus(bn(current.amount)).toString()\n }, '0')\n const percentWithdrawn = bn(totalWithdrawn ?? '0')\n .div(bn(stream.deposit))\n .times('100')\n .toFixed(2)\n\n return (\n \n \n ID: {stream.id}\n \n {commify(\n formatBaseAmount(stream.deposit ?? '0', stream.token?.decimals as number) ?? '0'\n )}{' '}\n {stream.token?.symbol}\n \n \n \n \n Stream Start\n {dayjs.unix(stream.startTime).format('MMM D, YYYY @ h:mm a')}\n \n \n Stream End\n {dayjs.unix(stream.stopTime).format('MMM D, YYYY @ h:mm a')}\n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { Spinner, Stack, StackProps, Text } from '@chakra-ui/react'\nimport { Stream } from 'apollo/generated/graphql'\nimport { UserStreamItem } from './UserStreamItem'\nimport { useUserStreamsQuery } from 'apollo/generated/graphql'\nimport { useHistory } from 'react-router-dom'\n\nexport const UserStreams = ({\n account,\n ...rest\n}: {\n account: string | null\n} & StackProps): JSX.Element => {\n const history = useHistory()\n const { data: userStreams, loading: userStreamsLoading } = useUserStreamsQuery({\n skip: !account,\n variables: {\n account: account\n }\n })\n if (userStreamsLoading) return \n return (\n \n {userStreams?.streams.length ? (\n userStreams?.streams.map(stream => (\n history.push(`/stream/${stream.id}`)}\n />\n ))\n ) : (\n No Streams Found\n )}\n \n )\n}\n","import React from 'react'\nimport { Container, Text, Center, Button } from '@chakra-ui/react'\nimport { useWallet } from 'components/WalletProvider'\nimport { UserStreams } from 'components/UserStreams'\n\nexport const HomePage = (): JSX.Element => {\n const { state: wallet, connect } = useWallet()\n\n return (\n \n
\n {!wallet.isConnected ? (\n <>\n \n Your incoming streams will show up here after you sign in to your Ethereum wallet\n \n \n \n ) : (\n \n )}\n
\n
\n )\n}\n","import * as React from \"react\"\nimport {\n useColorMode,\n useColorModeValue,\n IconButton,\n IconButtonProps,\n} from \"@chakra-ui/react\"\nimport { FaMoon, FaSun } from \"react-icons/fa\"\n\ntype ColorModeSwitcherProps = Omit\n\nexport const ColorModeSwitcher: React.FC = (props) => {\n const { toggleColorMode } = useColorMode()\n const text = useColorModeValue(\"dark\", \"light\")\n const SwitchIcon = useColorModeValue(FaMoon, FaSun)\n\n return (\n }\n aria-label={`Switch to ${text} mode`}\n {...props}\n />\n )\n}\n","import { getAddress } from '@ethersproject/address'\nimport { BigNumber, BigNumberish } from '@ethersproject/bignumber'\nimport { Web3Provider, InfuraProvider } from '@ethersproject/providers'\nimport { TransactionRequest } from '@ethersproject/abstract-provider'\nimport { bufferGas } from './math'\n\n// checksummed address if the address is valid, otherwise returns false\nexport function isAddress(value: string): string | false {\n try {\n return getAddress(value)\n } catch {\n return false\n }\n}\n\nexport function toHexString(value: BigNumberish): string {\n return BigNumber.from(value).toHexString()\n}\n\nexport function getEtherscanLink(\n data: string,\n type: 'transaction' | 'token' | 'address' | 'block'\n): string {\n const prefix = `https://etherscan.io`\n\n switch (type) {\n case 'transaction': {\n return `${prefix}/tx/${data}`\n }\n case 'token': {\n return `${prefix}/token/${data}`\n }\n case 'block': {\n return `${prefix}/block/${data}`\n }\n case 'address':\n default: {\n return `${prefix}/address/${data}`\n }\n }\n}\n\nexport function getTokenIconUri(address: string | null): string {\n if (!address) return '/assets/img/question.png'\n const parsed = isAddress(address)\n if (!parsed) {\n return '/assets/img/question.png'\n }\n return `https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/${parsed}/logo.png`\n}\n\nexport function shortenAddress(address: string, chars = 4): string {\n const parsed = isAddress(address)\n if (!parsed) {\n throw Error(`Invalid 'address' parameter '${address}'.`)\n }\n return `${parsed.substring(0, chars + 2)}...${parsed.substring(42 - chars)}`\n}\n\nexport async function getBufferedGas(\n provider: Web3Provider | InfuraProvider | null,\n tx: TransactionRequest\n): Promise<{\n gasLimit: string | null\n gasPrice: string | null\n}> {\n let gasLimit = null\n let gasPrice = null\n try {\n if (provider && tx) {\n const gas = await provider?.estimateGas(tx)\n const price = await provider?.getGasPrice()\n if (gas && price) {\n gasLimit = bufferGas(gas?.toString())\n gasPrice = bufferGas(price?.toString())\n }\n }\n return {\n gasLimit,\n gasPrice\n }\n } catch {\n throw Error('Problem estimating gas')\n }\n}\n","import React from 'react'\nimport { Image, Button, ButtonProps } from '@chakra-ui/react'\nimport { useWallet } from 'components/WalletProvider'\nimport { shortenAddress } from 'utils/helpers'\n\ntype TWalletButton = ButtonProps & {\n onOpen: () => void\n}\n\nexport const WalletButton = ({ onOpen, ...props }: TWalletButton): JSX.Element => {\n const { state, connect } = useWallet()\n const { isConnected, wallet, account } = state\n\n return (\n \n ) : undefined\n }\n onClick={() => (isConnected && account ? onOpen() : connect())}\n {...props}\n >\n {isConnected && account ? shortenAddress(account, 4) : 'Connect Wallet'}\n \n )\n}\n","import React from 'react'\nimport {\n Box,\n Flex,\n Modal,\n ModalBody,\n ModalCloseButton,\n ModalContent,\n ModalHeader,\n ModalOverlay,\n Stack,\n Text,\n Image,\n useColorModeValue,\n HStack,\n Button,\n useClipboard\n} from '@chakra-ui/react'\nimport { getEtherscanLink, shortenAddress } from 'utils/helpers'\nimport { useWallet } from './WalletProvider'\n\nexport const AccountModal = ({\n isOpen,\n onClose\n}: {\n isOpen: boolean\n onClose: () => void\n}): JSX.Element | null => {\n const { state: wallet, connect, disconnect } = useWallet()\n const accent = useColorModeValue('gray.100', 'whiteAlpha.200')\n const { hasCopied, onCopy } = useClipboard(wallet?.account ?? '')\n\n if (!wallet.isConnected) return null\n return (\n \n \n \n Account\n \n \n \n \n \n \n \n {wallet.wallet?.name}\n \n \n \n {shortenAddress(wallet?.account ?? '', 9)}\n \n \n \n \n {\n onClose()\n connect()\n }}\n >\n Switch\n \n window.open(getEtherscanLink(wallet?.account ?? '', 'address'))}\n >\n Etherscan\n \n {\n onClose()\n disconnect()\n }}\n >\n Disconnect\n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { ColorModeSwitcher } from 'components/ColorModeSwitcher'\nimport { WalletButton } from './WalletButton'\nimport { Flex, useDisclosure } from '@chakra-ui/react'\nimport { AccountModal } from './AccountModal'\n\nexport const Header = (): JSX.Element => {\n const { isOpen, onClose, onOpen } = useDisclosure()\n return (\n <>\n \n \n \n \n \n \n )\n}\n","import { useMemo } from 'react'\nimport { Contract, ContractInterface } from '@ethersproject/contracts'\nimport { Web3Provider, JsonRpcSigner, InfuraProvider } from '@ethersproject/providers'\nimport { AddressZero } from '@ethersproject/constants'\nimport { isAddress } from 'utils/helpers'\n\nexport function getSigner(library: Web3Provider | InfuraProvider, account: string): JsonRpcSigner {\n return library.getSigner(account).connectUnchecked()\n}\n\nexport function getProviderOrSigner(\n library: Web3Provider | InfuraProvider,\n account?: string\n): Web3Provider | JsonRpcSigner | InfuraProvider {\n return account ? getSigner(library, account) : library\n}\n\nexport function getContract(\n address: string,\n ABI: ContractInterface,\n library: Web3Provider | InfuraProvider,\n account?: string\n): Contract {\n if (!isAddress(address) || address === AddressZero) {\n throw Error(`Invalid 'address' parameter '${address}'.`)\n }\n\n return new Contract(address, ABI, getProviderOrSigner(library, account))\n}\n\nexport function useContract(\n provider: Web3Provider | InfuraProvider | null,\n account: string | null,\n contractAddress: string | undefined,\n ABI: ContractInterface,\n withSignerIfPossible = true\n): Contract | null {\n return useMemo(() => {\n if (!contractAddress || !ABI || !provider) return null\n try {\n return getContract(\n contractAddress,\n ABI,\n provider,\n withSignerIfPossible && account ? account : undefined\n )\n } catch (error) {\n console.error('Failed to get contract', error)\n return null\n }\n }, [contractAddress, ABI, provider, withSignerIfPossible, account])\n}\n","//this one works for streams create through the main contract\nexport const SABLIER_PROXY_ADDRESS = '0xCD18eAa163733Da39c232722cBC4E8940b1D8888'\n\n// this one works with payroll proxy created streams\nexport const SABLIER_PAYROLL_PROXY_ADDRESS = '0xbd6a40bb904aea5a49c59050b5395f7484a4203d'\n\nexport const GAS_LIMIT = '180000'\n","import { useCallback, useEffect, useState } from 'react'\nimport { useWallet } from 'components/WalletProvider'\n\nexport enum TxStatus {\n SUCCESS = 'SUCCESS',\n FAILED = 'FAILED',\n ERROR = 'ERROR',\n UNKNOWN = 'UNKNOWN'\n}\n\nexport function usePendingTx(txId: string | null): TxStatus {\n const [pendingTxState, setPendingTxState] = useState(TxStatus.UNKNOWN)\n const {\n state: { provider, blockNumber }\n } = useWallet()\n\n const checkPendingTx = useCallback(async () => {\n try {\n if (blockNumber && txId && provider) {\n const receipt = await provider?.getTransactionReceipt(txId)\n if (receipt && receipt.status === 1) {\n setPendingTxState(TxStatus.SUCCESS)\n } else if (receipt && receipt.status === 0) {\n setPendingTxState(TxStatus.FAILED)\n }\n }\n } catch (error) {\n setPendingTxState(TxStatus.ERROR)\n console.error(error)\n }\n }, [blockNumber, provider, txId])\n\n useEffect(() => {\n if (provider && txId && blockNumber) {\n checkPendingTx()\n }\n }, [provider, txId, blockNumber, checkPendingTx])\n\n return pendingTxState\n}\n","import React from 'react'\nimport {\n Modal,\n ModalOverlay,\n ModalContent,\n ModalHeader,\n ModalFooter,\n ModalBody,\n ModalCloseButton,\n Button,\n Stack,\n Input,\n Text,\n Alert,\n AlertIcon,\n Link,\n InputGroup,\n HStack,\n Box\n} from '@chakra-ui/react'\nimport { IuseWithdraw } from 'hooks/useWithdraw'\nimport { BN, bn, formatBaseAmount, fromBaseUnit, toBaseUnit, toDisplayAmount } from 'utils/math'\nimport { useWallet } from './WalletProvider'\nimport { TxStatus, usePendingTx } from 'hooks/usePendingTx'\nimport { getEtherscanLink } from 'utils/helpers'\nimport { Token } from 'apollo/generated/graphql'\nimport { useCoinCapPrice } from 'hooks/useCoinCapPrice'\n\nconst WithdrawModalItem = ({\n title,\n text,\n value\n}: {\n title: string\n text: string\n value?: string\n}) => {\n return (\n \n {title}\n \n {text}\n {value && ${value}}\n \n \n )\n}\n\ntype ModalProps = {\n amount: string | null\n streamed: BN\n withdrawn: string | undefined\n available: BN\n isOpen: boolean\n onClose: () => void\n setAmount: React.Dispatch>\n withdraw: IuseWithdraw\n token: Token | undefined | null\n}\n\nexport const WithdrawModal = ({\n streamed,\n withdrawn,\n available,\n isOpen,\n onClose,\n setAmount,\n withdraw,\n amount,\n token\n}: ModalProps): JSX.Element => {\n const { state: wallet } = useWallet()\n const pendingTx = usePendingTx(withdraw.txHash)\n const formattedAmount = toBaseUnit(amount ?? '0', token?.decimals as number)\n const ethPrice = useCoinCapPrice('ethereum')\n return (\n \n \n \n Withdraw From Stream\n \n \n \n \n \n \n \n \n \n setAmount(e.target.value)}\n />\n setAmount(fromBaseUnit(available, token?.decimals as number))}\n >\n MAX\n \n \n {withdraw.error && (\n \n \n {withdraw?.error?.message\n ? withdraw.error.message\n : typeof withdraw.error === 'string'\n ? withdraw.error\n : 'Something went wrong. Please try again'}\n \n )}\n {pendingTx === TxStatus.UNKNOWN && withdraw.txHash && (\n \n \n Transaction Submitted\n \n window.open(getEtherscanLink(withdraw.txHash as string, 'transaction'), '_blank')\n }\n >\n View On Chain\n \n \n )}\n \n \n withdraw.withdrawFromStream()}\n >\n {!bn(formattedAmount ?? '0').gt(0)\n ? 'Enter an amount'\n : bn(available).gte(formattedAmount ?? '0')\n ? 'Confirm Transaction'\n : 'Not enough to withdraw'}\n \n \n \n \n )\n}\n","import axios from 'axios'\nimport { useCallback, useEffect, useState } from 'react'\n\nexport const useCoinCapPrice = (assetId: string): string | null => {\n const [price, setPrice] = useState(null)\n\n const getPrice = useCallback(async () => {\n try {\n const { data } = await axios.post(\n 'https://graphql.coincap.io',\n {\n query: `query asset($id: ID!) {\n asset(id: $id){\n priceUsd\n }\n }`,\n variables: {\n id: assetId\n }\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n setPrice(data.data.asset.priceUsd)\n } catch (error) {\n setPrice(null)\n console.log(`Error getting price for ${assetId}`, error)\n }\n }, [assetId])\n\n useEffect(() => {\n let ignore = false\n if (assetId && !ignore) {\n getPrice()\n }\n return () => {\n ignore = true\n }\n }, [assetId, getPrice])\n\n return price\n}\n","import {\n Box,\n Button,\n Center,\n CircularProgress,\n Container,\n Flex,\n Link,\n Spinner,\n Stack,\n Text,\n useColorModeValue,\n useDisclosure\n} from '@chakra-ui/react'\nimport { useWallet } from 'components/WalletProvider'\nimport React, { useEffect, useState } from 'react'\nimport { useParams } from 'react-router-dom'\nimport { useWithdraw } from 'hooks/useWithdraw'\nimport { WithdrawModal } from 'components/WithdrawModal'\nimport { bn, fromBaseUnit, toBaseUnit, toDisplayAmount } from 'utils/math'\nimport { StreamProgress } from 'components/StreamProgress'\nimport { getEtherscanLink } from 'utils/helpers'\nimport dayjs from 'dayjs'\nimport { useUserSingleStreamQuery } from 'apollo/generated/graphql'\nimport { commify } from '@ethersproject/units'\n\nexport const StreamPage = (): JSX.Element => {\n const { id }: Record = useParams()\n const { state: wallet } = useWallet()\n const track = useColorModeValue('blackAlpha.200', 'whiteAlpha.200')\n const tickerBg = useColorModeValue('white', 'whiteAlpha.200')\n const { isOpen, onOpen, onClose } = useDisclosure()\n const [withdrawAmount, setWithdrawAmount] = useState(null)\n const [now, setNow] = useState(Math.floor(Date.now() / 1000))\n const { data, loading } = useUserSingleStreamQuery({\n pollInterval: 10000,\n skip: !id,\n variables: {\n id\n }\n })\n const stream = data && data.stream\n\n const total = bn(stream?.stopTime).minus(bn(stream?.startTime))\n // const possibleCancelNow = stream?.cancellation?.timestamp ? stream.cancellation.timestamp : now\n // const possibleCancelStoptime = stream?.cancellation?.timestamp\n // ? stream.cancellation.timestamp\n // : stream?.stopTime\n const timeUsed = bn(now).minus(bn(stream?.startTime))\n const percentStreamed = bn(now).gte(bn(stream?.stopTime))\n ? 100\n : timeUsed.div(total).times('100').toNumber()\n const totalWithdrawn = stream?.withdrawals?.reduce((acc, current) => {\n return bn(acc).plus(bn(current.amount)).toString()\n }, '0')\n\n const totalStreamed = bn(now).gte(bn(stream?.stopTime))\n ? bn(stream?.deposit)\n : timeUsed.times(bn(stream?.ratePerSecond))\n\n const availableAmount = totalStreamed.minus(bn(totalWithdrawn ?? '0'))\n const percentWithdrawn = bn(totalWithdrawn ?? '0')\n .div(bn(stream?.deposit))\n .times('100')\n\n const withdraw = useWithdraw(\n id,\n toBaseUnit(\n withdrawAmount && bn(withdrawAmount).gt(0) ? withdrawAmount : '0',\n stream?.token?.decimals as number\n ).toString(),\n availableAmount,\n !!data?.streamToSalary?.salaryId\n )\n\n useEffect(() => {\n const id = setTimeout(() => {\n setNow(Math.floor(Date.now() / 1000))\n }, 2000)\n\n return () => {\n clearTimeout(id)\n }\n })\n\n const sortedTxs = Object.values(stream?.txs ?? {}).sort((a, b) => {\n return Number(b.timestamp) - Number(a.timestamp)\n })\n\n if (!data && loading) return \n\n return (\n \n
\n \n \n \n \n {commify(fromBaseUnit(totalStreamed.toString(), stream?.token?.decimals as number))}\n \n \n of{' '}\n {commify(\n toDisplayAmount(\n fromBaseUnit(stream?.deposit, stream?.token?.decimals as number),\n stream?.token?.decimals as number\n )\n )}{' '}\n {stream?.token?.symbol}\n \n \n
\n \n Stream End Time\n {dayjs.unix(stream?.stopTime).format('MMM D, YYYY @ h:mm a')}\n \n \n \n {stream?.recipient?.toLowerCase() === wallet.account?.toLowerCase() && (\n \n )}\n \n \n Stream transactions\n \n {sortedTxs ? (\n sortedTxs.map(tx => (\n \n {dayjs.unix(tx.timestamp).format('MMM D, YYYY @ h:mm a')}\n {tx.event}\n window.open(getEtherscanLink(tx.txhash, 'transaction'), '_blank')}\n >\n View on explorer\n \n \n ))\n ) : (\n No Transactions Found...\n )}\n \n \n
\n )\n}\n","import { useCallback, useEffect } from 'react'\nimport { useState } from 'react'\nimport { BN, bn, bufferGas } from 'utils/math'\nimport { toHexString } from 'utils/helpers'\nimport { useWallet } from 'components/WalletProvider'\nimport { useContract } from './useContract'\nimport { GAS_LIMIT, SABLIER_PAYROLL_PROXY_ADDRESS, SABLIER_PROXY_ADDRESS } from 'utils/constants'\nimport SablierAbi from 'abi/SablierProxyAbi.json'\nimport SablierPayrollProxyAbi from 'abi/SablierPayrollProxyAbi.json'\nimport { BigNumber } from '@ethersproject/bignumber'\n\nexport interface IuseWithdraw {\n withdrawFromStream: () => Promise\n txHash: string | null\n error: Error | null\n confirming: boolean\n estimatedFee: string | null\n}\n\nexport const useWithdraw = (\n streamId: string,\n amount: string | BN | null,\n available: string | BN,\n isPayroll: boolean\n): IuseWithdraw => {\n const { state: wallet } = useWallet()\n const [confirming, setConfirming] = useState(false)\n const [txHash, setTxHash] = useState(null)\n const [error, setError] = useState(null)\n const [estimatedFee, setEstimatedFee] = useState(null)\n const sablierProxyContract = useContract(\n wallet?.provider ?? null,\n wallet?.account ?? null,\n SABLIER_PROXY_ADDRESS,\n SablierAbi\n )\n const sablierPayrollProxyContract = useContract(\n wallet?.provider ?? null,\n wallet?.account ?? null,\n SABLIER_PAYROLL_PROXY_ADDRESS,\n SablierPayrollProxyAbi\n )\n const contract = isPayroll ? sablierPayrollProxyContract : sablierProxyContract\n const withdrawMethod = isPayroll ? 'withdrawFromSalary' : 'withdrawFromStream'\n\n const fetchGas = useCallback(async () => {\n if (contract && wallet.account && streamId && wallet.blockNumber) {\n try {\n const gasPrice = await wallet?.provider?.getGasPrice()\n const bufferedGasPrice = bufferGas(gasPrice?.toString() ?? '0')\n const estimateFees = bn(bufferedGasPrice ?? '0')\n .times(bn(GAS_LIMIT))\n .toFixed()\n setEstimatedFee(estimateFees)\n } catch (error) {\n setEstimatedFee('0')\n console.warn(error)\n }\n }\n }, [contract, streamId, wallet.account, wallet.blockNumber, wallet?.provider])\n\n const withdrawFromStream = useCallback(async () => {\n setConfirming(true)\n try {\n if (!wallet.provider || !wallet.account) {\n throw Error('Missing wallet address or provider')\n }\n if (amount && bn(available).lt(bn(amount))) {\n throw Error('Insufficient stream balance to withdraw')\n }\n const data = contract?.interface.encodeFunctionData(withdrawMethod, [streamId, amount])\n if (!contract?.address) {\n throw Error('Missing contract address')\n }\n const tx = {\n to: contract.address,\n data,\n value: toHexString('0')\n }\n if (tx) {\n const rawGasPrice = await wallet.provider.getGasPrice()\n const gasPrice = bufferGas(rawGasPrice.toString())\n const gasLimit = GAS_LIMIT\n if (gasLimit && gasPrice) {\n const ethBalance = await wallet.provider?.getBalance(wallet.account)\n if (bn(ethBalance.toString()).lt(bn(gasLimit).times(gasPrice.toString()).toFixed())) {\n throw Error('Not enough ETH for gas')\n }\n const nonce = await wallet.provider?.getSigner().getTransactionCount()\n const withdrawTx = await wallet.provider?.getSigner().sendTransaction({\n to: tx.to,\n data: tx.data,\n value: tx.value,\n gasLimit: toHexString(gasLimit),\n gasPrice: toHexString(gasPrice),\n nonce: nonce\n })\n\n if (withdrawTx) {\n setConfirming(false)\n setTxHash(withdrawTx.hash)\n }\n } else {\n throw Error('Problem fetching gas')\n }\n }\n } catch (error) {\n setError(error)\n setConfirming(false)\n }\n }, [\n wallet.provider,\n wallet.account,\n amount,\n available,\n contract?.interface,\n contract?.address,\n withdrawMethod,\n streamId\n ])\n\n useEffect(() => {\n if (contract && wallet.account && streamId && wallet.blockNumber) {\n fetchGas()\n }\n }, [contract, fetchGas, streamId, wallet.account, wallet.blockNumber])\n\n useEffect(() => {\n const errorTimeout = setTimeout(() => {\n if (error) {\n setError(null)\n }\n }, 8000)\n return () => {\n clearTimeout(errorTimeout)\n }\n }, [error])\n\n return { withdrawFromStream, txHash, error, confirming, estimatedFee }\n}\n","import * as React from 'react'\nimport { ApolloProvider } from '@apollo/client'\nimport { Alert, AlertDescription, AlertIcon, ChakraProvider, theme } from '@chakra-ui/react'\nimport { client } from './apollo/client'\nimport { BrowserRouter, Switch, Route } from 'react-router-dom'\nimport { HomePage } from './pages/Home'\nimport { WalletProvider } from 'components/WalletProvider'\nimport { Header } from 'components/Header'\nimport { StreamPage } from 'pages/Stream'\n\nexport const App = (): JSX.Element => (\n \n \n \n \n \n \n This dapp was created to allow additional wallets to claim from Sablier streams. This\n dapp is not built or maintained by Sablier.{' '}\n No warranty or support of any kind is provided.\n \n \n \n
\n \n \n \n \n \n \n \n \n)\n","import { ReportHandler } from 'web-vitals'\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler): void => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(\n ({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry)\n getFID(onPerfEntry)\n getFCP(onPerfEntry)\n getLCP(onPerfEntry)\n getTTFB(onPerfEntry)\n }\n )\n }\n}\n\nexport default reportWebVitals\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://cra.link/PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/,\n ),\n)\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void\n onUpdate?: (registration: ServiceWorkerRegistration) => void\n}\n\nexport function register(config?: Config): void {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service \" +\n \"worker. To learn more, visit https://cra.link/PWA\",\n )\n })\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n if (installingWorker == null) {\n return\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://cra.link/PWA.\",\n )\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration)\n }\n } else {\n // At this point, everything has been precached.\n // It is the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\")\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration)\n }\n }\n }\n }\n }\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { \"Service-Worker\": \"script\" },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\")\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config)\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\",\n )\n })\n}\n\nexport function unregister(): void {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister()\n })\n .catch((error) => {\n console.error(error.message)\n })\n }\n}\n","import { ColorModeScript } from '@chakra-ui/react'\nimport * as React from 'react'\nimport ReactDOM from 'react-dom'\nimport { App } from './App'\nimport reportWebVitals from './reportWebVitals'\nimport * as serviceWorker from './serviceWorker'\n\nReactDOM.render(\n \n \n \n ,\n document.getElementById('root')\n)\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://cra.link/PWA\nserviceWorker.unregister()\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals()\n"],"sourceRoot":""}