diff --git a/package.json b/package.json index f6b1f8c3..3f5c8f94 100644 --- a/package.json +++ b/package.json @@ -141,8 +141,14 @@ "@starknet-react/core": "^2.3.0", "@web3-react/core": "^6.1.9", "@web3-react/injected-connector": "^6.0.7", + "apollo-cache-inmemory": "^1.6.6", + "apollo-client": "^2.6.10", + "apollo-link-http": "^1.5.17", "events": "^3.3.0", "get-starknet-core": "^3.2.0", + "graphql": "^14.5.6", + "graphql-tag": "^2.10.1", + "react-apollo": "^3.1.5", "starknetkit": "^1.1.3", "vite-plugin-svgr": "^2.2.0", "wido-widget": "1.5.3" diff --git a/src/apollo/client.js b/src/apollo/client.js new file mode 100644 index 00000000..2df0612a --- /dev/null +++ b/src/apollo/client.js @@ -0,0 +1,35 @@ +import { ApolloClient } from 'apollo-client' +import { InMemoryCache } from 'apollo-cache-inmemory' +import { HttpLink } from 'apollo-link-http' +import { getApiUrl } from '../constants' + +export const jediSwapClient = new ApolloClient({ + link: new HttpLink({ + uri: getApiUrl(), + headers: { + // 'm-color': 'blue', + } + }), + cache: new InMemoryCache({ + dataIdFromObject: object => { + switch (object.__typename) { + case 'TokenDayData': { + return `${object.tokenAddress}${object.datetime}` + } + case 'FactoryDayData': { + return `${object.id}${object.dayId}` + } + case 'Token': { + return `${object.tokenAddress}${object.name}` + } + case 'Pool': { + return `${object.poolAddress}${object.datetime}` + } + default: { + return object.id || object._id + } + } + } + }), + shouldBatch: true +}) diff --git a/src/apollo/queries.js b/src/apollo/queries.js new file mode 100644 index 00000000..72c88562 --- /dev/null +++ b/src/apollo/queries.js @@ -0,0 +1,23 @@ +import gql from 'graphql-tag' + +export const PAIRS_DATA_FOR_REWARDS = ({ pairIds = [] }) => { + const poolsString = `[${pairIds.map(pool => `"${pool}"`).join(',')}]` + let queryString = ` + query pairDayDatas { + pairDayDatas( + where: { + pairIn: ${poolsString}, + } + orderBy: "date" + orderByDirection: "desc" + first: ${10 * pairIds.length} + ) { + pairId + date + dailyVolumeUSD + reserveUSD + } + } + ` + return gql(queryString) +} diff --git a/src/constants/index.ts b/src/constants/index.ts index 7e74481c..765b02aa 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -1,7 +1,7 @@ import { validateAndParseAddress, constants } from 'starknet' import { ChainId, JSBI, Percent, Token, WETH } from '@jediswap/sdk' -import { argentX, braavosWallet, argentWebWallet } from '../connectors' +import { argentX, braavosWallet, argentWebWallet, isProductionEnvironment, isTestnetEnvironment } from '../connectors' import ARGENTX_ICON from '../assets/images/argentx.png' import EMAIL_ICON from '../assets/images/mail.png' import BRAAVOS_ICON from '../assets/svg/Braavos.svg' @@ -11,6 +11,16 @@ import { WebWalletConnector } from '@argent/starknet-react-webwallet-connector' export const DEFAULT_CHAIN_ID = ChainId.SN_MAIN export const STRK_REWARDS_ADDRESS = '0x01ba23f54ae0f830068314e8d3e9d3623e83ced3832d20ac61f598a969425747' +export const STARKNET_REWARDS_API_URL = + 'https://kx58j6x5me.execute-api.us-east-1.amazonaws.com//starknet/fetchFile?file=qa_strk_grant.json' +export const STRK_PRICE_API_URL = 'https://api.binance.com/api/v3/ticker/price?symbol=STRKUSDT' + +export const getApiUrl = () => { + if (isTestnetEnvironment()) { + return 'https://api.goerli.jediswap.xyz/graphql' + } + return 'https://api.jediswap.xyz/graphql' +} export const domainURL = (chainId: ChainId) => { return chainId === ChainId.SN_MAIN diff --git a/src/index.tsx b/src/index.tsx index a1d79c50..84a8e099 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -25,6 +25,8 @@ import './components/analytics' import { WebWalletConnector } from '@argent/starknet-react-webwallet-connector' import { isTestnetEnvironment } from './connectors' import { StarknetProvider } from './context/StarknetProvider' +import { ApolloProvider } from 'react-apollo' +import { jediSwapClient } from './apollo/client' const StarknetProviderNetwork = createStarknetReactRoot(NetworkContextName) @@ -45,13 +47,15 @@ ReactDOM.render( - - - - - - - + + + + + + + + + , diff --git a/src/pages/Rewards/index.tsx b/src/pages/Rewards/index.tsx index 6ad64473..03b20986 100644 --- a/src/pages/Rewards/index.tsx +++ b/src/pages/Rewards/index.tsx @@ -18,9 +18,13 @@ import { DMSansText, TYPE } from '../../theme' import { Button as RebassButton, ButtonProps } from 'rebass/styled-components' import { useContractRead, useContractWrite } from '@starknet-react/core' import { Call, CallData } from 'starknet' -import { STRK_REWARDS_ADDRESS } from '../../constants' +import { STARKNET_REWARDS_API_URL, STRK_PRICE_API_URL, STRK_REWARDS_ADDRESS } from '../../constants' import REWARDS_ABI from '../../constants/abis/strk-rewards.json' import TransactionConfirmationModal, { TransactionErrorContent } from '../../components/TransactionConfirmationModal' +import { jediSwapClient } from '../../apollo/client' +import { PAIRS_DATA_FOR_REWARDS } from '../../apollo/queries' +import { isEmpty } from 'lodash' +import { formattedPercent } from '../../utils' export const StyledAppBody = styled(BodyWrapper)` padding: 0rem; @@ -305,9 +309,108 @@ const TokenAPR = styled(APRWrapper)` font-weight: 400; line-height: 26px; /* 216.667% */ ` -export const injected = new InjectedConnector({}) + +const pairs = [ + { + rewardName: 'USDC/USDT', + poolAddress: '0x5801bdad32f343035fb242e98d1e9371ae85bc1543962fedea16c59b35bd19b', + token0: { + tokenAddress: '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', + symbol: 'USDC' + }, + token1: { + tokenAddress: '0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8', + symbol: 'USDT' + } + }, + { + rewardName: 'STRK/ETH', + poolAddress: '0x2ed66297d146ecd91595c3174da61c1397e8b7fcecf25d423b1ba6717b0ece9', + token0: { + tokenAddress: '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', + symbol: 'STRK' + }, + token1: { + tokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', + symbol: 'ETH' + } + }, + { + rewardName: 'ETH/USDC', + poolAddress: '0x4d0390b777b424e43839cd1e744799f3de6c176c7e32c1812a41dbd9c19db6a', + token0: { + tokenAddress: '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', + symbol: 'ETH' + }, + token1: { + tokenAddress: '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', + symbol: 'USDC' + } + }, + { + rewardName: 'STRK/USDC', + poolAddress: '0x5726725e9507c3586cc0516449e2c74d9b201ab2747752bb0251aaa263c9a26', + token0: { + tokenAddress: '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', + symbol: 'STRK' + }, + token1: { + tokenAddress: '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', + symbol: 'USDC' + } + } +] export default function Rewards() { + const [pairsData, setPairsData] = useState([]) + useEffect(() => { + const pairIds = pairs.map(pair => pair.poolAddress) + + async function getPairsData() { + const pairsResp = await jediSwapClient.query({ + query: PAIRS_DATA_FOR_REWARDS({ + pairIds + }), + fetchPolicy: 'cache-first' + }) + const rewardsResp = await fetch(STARKNET_REWARDS_API_URL).then(res => res.json()) + const priceResp = await fetch(STRK_PRICE_API_URL).then(res => res.json()) + + const strkPrice = parseFloat(priceResp.price) + const jediRewards = rewardsResp.Jediswap_v1 + const rewardsPositions: any = [] + for (const pair of pairs) { + const rewardsData = jediRewards[pair.rewardName].pop() + const recentDate = rewardsData.date + const pairDayData = pairsResp.data.pairDayDatas.find( + dayData => dayData.pairId === pair.poolAddress && dayData.date === recentDate + 'T00:00:00' + ) + const aprFee = ((pairDayData.dailyVolumeUSD * 0.003) / pairDayData.reserveUSD) * 365 * 100 + const aprStarknet = (rewardsData.allocation / pairDayData.reserveUSD) * 365 * 100 * strkPrice + rewardsPositions.push({ + ...pair, + reserveUSD: pairDayData.reserveUSD, + aprFee, + aprStarknet + }) + } + const sortedRewardsPositions = rewardsPositions.sort((a, b) => { + if (a.aprFee + a.aprStarknet > b.aprFee + b.aprStarknet) { + return -1 + } + if (a.aprFee + a.aprStarknet < b.aprFee + b.aprStarknet) { + return 1 + } + }) + + setPairsData(sortedRewardsPositions) + } + + if (!pairsData.length) { + getPairsData() + } + }, [pairsData]) + const { address } = useAccountDetails() const [allocations, setAllocations] = useState() const [allocated, setAllocated] = useState(false) @@ -418,6 +521,37 @@ export default function Rewards() { const buttonText = (totalRewardsClaimed && 'Claimed') || (unclaimed_rewards && 'Claim STRK') || (attemptingTxn && 'Claiming...') + const PairListItem = ({ pair }: { pair: any }) => { + const cleanedAprFee = isNaN(pair.aprFee) || !isFinite(pair.aprFee) ? 0 : pair.aprFee + const displayAprFee = formattedPercent(cleanedAprFee, true, false) + + const cleanedAprStarknet = isNaN(pair.aprStarknet) || !isFinite(pair.aprStarknet) ? 0 : pair.aprStarknet + const displayAprStarknet = formattedPercent(cleanedAprStarknet, true, false) + + const cleanedAprCommon = cleanedAprFee + cleanedAprStarknet + const displayAprCommon = formattedPercent(cleanedAprCommon, true, false) + + return ( + + + STRK-USDC + +
Total APR:
+
{displayAprCommon}
+
+ +
Fee APR:
+
{displayAprFee}
+
+ +
STRK APR:
+
{displayAprStarknet}
+
+
+
+ ) + } + return ( Earn STRK incentives by providing liquidity to these pools: - - - STRK-USDC - -
Total APR:
-
30.96%
-
- -
Fee APR:
-
20.61%
-
- -
STRK APR:
-
10.35%
-
-
-
- - - STRK-ETH - -
Total APR:
-
30.96%
-
- -
Fee APR:
-
20.61%
-
- -
STRK APR:
-
10.35%
-
-
-
- - - ETH-USDC - -
Total APR:
-
30.96%
-
- -
Fee APR:
-
20.61%
-
- -
STRK APR:
-
10.35%
-
-
-
- - - USDC-USDT - -
Total APR:
-
30.96%
-
- -
Fee APR:
-
20.61%
-
- -
STRK APR:
-
10.35%
-
-
-
+ {pairsData.map(pair => ( + + ))}
diff --git a/src/utils/index.ts b/src/utils/index.ts index 95053084..a7dedee5 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,4 +1,6 @@ // import { BigNumberish } from 'starknet/dist/utils/number' +import React, { useContext } from 'react' +import { Text } from 'rebass' import { validateAndParseAddress, Abi, uint256, Contract, AccountInterface, BigNumberish, cairo } from 'starknet' import { BigNumber } from '@ethersproject/bignumber' import { ZERO_ADDRESS } from '../constants' @@ -20,6 +22,39 @@ export function isAddress(addr: string | null | undefined): string | false { } } +export function formattedPercent(percent, useAbs = false, useColors = true) { + percent = parseFloat(percent) + if (!percent || percent === 0) { + return '0' + } + + if (percent < 0.0001 && percent > 0) { + return '< 0.0001%' + } + + if (percent < 0 && percent > -0.0001) { + return '< 0.0001%' + } + + if (percent > 999999) { + return '> 999999%' + } + + let fixedPercent = percent.toFixed(2) + if (fixedPercent === '0.00') { + return '0%' + } + if (fixedPercent > 0) { + if (fixedPercent > 100) { + return `${useAbs ? '' : '+'}${percent?.toFixed(0).toLocaleString()}%` + } else { + return `${useAbs ? '' : '+'}${fixedPercent}%` + } + } else { + return `${fixedPercent}%` + } +} + const VOYAGER_PREFIXES: { [chainId in ChainId]: string } = { [ChainId.SN_MAIN]: '', [ChainId.SN_GOERLI]: 'sepolia.' diff --git a/yarn.lock b/yarn.lock index 6a03b0c1..c612fa0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,55 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" +"@apollo/react-common@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@apollo/react-common/-/react-common-3.1.4.tgz#ec13c985be23ea8e799c9ea18e696eccc97be345" + integrity sha512-X5Kyro73bthWSCBJUC5XYQqMnG0dLWuDZmVkzog9dynovhfiVCV4kPSdgSIkqnb++cwCzOVuQ4rDKVwo2XRzQA== + dependencies: + ts-invariant "^0.4.4" + tslib "^1.10.0" + +"@apollo/react-components@^3.1.5": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@apollo/react-components/-/react-components-3.1.5.tgz#040d2f35ce4947747efe16f76d59dcbd797ffdaf" + integrity sha512-c82VyUuE9VBnJB7bnX+3dmwpIPMhyjMwyoSLyQWPHxz8jK4ak30XszJtqFf4eC4hwvvLYa+Ou6X73Q8V8e2/jg== + dependencies: + "@apollo/react-common" "^3.1.4" + "@apollo/react-hooks" "^3.1.5" + prop-types "^15.7.2" + ts-invariant "^0.4.4" + tslib "^1.10.0" + +"@apollo/react-hoc@^3.1.5": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@apollo/react-hoc/-/react-hoc-3.1.5.tgz#6552d2fb4aafc59fdc8f4e353358b98b89cfab6f" + integrity sha512-jlZ2pvEnRevLa54H563BU0/xrYSgWQ72GksarxUzCHQW85nmn9wQln0kLBX7Ua7SBt9WgiuYQXQVechaaCulfQ== + dependencies: + "@apollo/react-common" "^3.1.4" + "@apollo/react-components" "^3.1.5" + hoist-non-react-statics "^3.3.0" + ts-invariant "^0.4.4" + tslib "^1.10.0" + +"@apollo/react-hooks@^3.1.5": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@apollo/react-hooks/-/react-hooks-3.1.5.tgz#7e710be52461255ae7fc0b3b9c2ece64299c10e6" + integrity sha512-y0CJ393DLxIIkksRup4nt+vSjxalbZBXnnXxYbviq/woj+zKa431zy0yT4LqyRKpFy9ahMIwxBnBwfwIoupqLQ== + dependencies: + "@apollo/react-common" "^3.1.4" + "@wry/equality" "^0.1.9" + ts-invariant "^0.4.4" + tslib "^1.10.0" + +"@apollo/react-ssr@^3.1.5": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@apollo/react-ssr/-/react-ssr-3.1.5.tgz#53703cd493afcde567acc6d5512cab03dafce6de" + integrity sha512-wuLPkKlctNn3u8EU8rlECyktpOUCeekFfb0KhIKknpGY6Lza2Qu0bThx7D9MIbVEzhKadNNrzLcpk0Y8/5UuWg== + dependencies: + "@apollo/react-common" "^3.1.4" + "@apollo/react-hooks" "^3.1.5" + tslib "^1.10.0" + "@argent/get-starknet@^0.1.4": version "0.1.4" resolved "https://registry.npmjs.org/@argent/get-starknet/-/get-starknet-0.1.4.tgz" @@ -2063,6 +2112,13 @@ resolved "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz" integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== +"@types/node@>=6": + version "20.11.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f" + integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw== + dependencies: + undici-types "~5.26.4" + "@types/node@^10.11.7", "@types/node@^10.12.18": version "10.17.60" resolved "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" @@ -2254,6 +2310,11 @@ dependencies: "@types/yargs-parser" "*" +"@types/zen-observable@^0.8.0": + version "0.8.7" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.7.tgz#114e2ffc8d5be4915fdd5bc90668fc0ceaadb760" + integrity sha512-LKzNTjj+2j09wAo/vvVjzgw5qckJJzhdGgWHW7j69QIGdq/KnZrMAMIHQiWGl3Ccflh5/CudBAntTPYdprPltA== + "@typescript-eslint/eslint-plugin@^5.8.0": version "5.59.11" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.11.tgz" @@ -2831,6 +2892,21 @@ resolved "https://registry.npmjs.org/@web3-starknet-react/types/-/types-2.2.2.tgz" integrity sha512-96BlaezP6pfvUDrVBpeDYqa1ZcVVo6aLMQOUGcCX3qV5FRd/nv2Ui+2E4FP3KI37myS9AfN0Cs1uMY0ez0yXrQ== +"@wry/context@^0.4.0": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.4.4.tgz#e50f5fa1d6cfaabf2977d1fda5ae91717f8815f8" + integrity sha512-LrKVLove/zw6h2Md/KZyWxIkFM6AoyKp71OqpH9Hiip1csjPVoD3tPxlbQUNxEnHENks3UGgNpSBCAfq9KWuag== + dependencies: + "@types/node" ">=6" + tslib "^1.9.3" + +"@wry/equality@^0.1.2", "@wry/equality@^0.1.9": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.11.tgz#35cb156e4a96695aa81a9ecc4d03787bc17f1790" + integrity sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA== + dependencies: + tslib "^1.9.3" + "@zeit/schemas@2.6.0": version "2.6.0" resolved "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.6.0.tgz" @@ -3001,6 +3077,77 @@ anymatch@^3.1.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +apollo-cache-inmemory@^1.6.6: + version "1.6.6" + resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.6.6.tgz#56d1f2a463a6b9db32e9fa990af16d2a008206fd" + integrity sha512-L8pToTW/+Xru2FFAhkZ1OA9q4V4nuvfoPecBM34DecAugUZEBhI2Hmpgnzq2hTKZ60LAMrlqiASm0aqAY6F8/A== + dependencies: + apollo-cache "^1.3.5" + apollo-utilities "^1.3.4" + optimism "^0.10.0" + ts-invariant "^0.4.0" + tslib "^1.10.0" + +apollo-cache@1.3.5, apollo-cache@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.3.5.tgz#9dbebfc8dbe8fe7f97ba568a224bca2c5d81f461" + integrity sha512-1XoDy8kJnyWY/i/+gLTEbYLnoiVtS8y7ikBr/IfmML4Qb+CM7dEEbIUOjnY716WqmZ/UpXIxTfJsY7rMcqiCXA== + dependencies: + apollo-utilities "^1.3.4" + tslib "^1.10.0" + +apollo-client@^2.6.10: + version "2.6.10" + resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.6.10.tgz#86637047b51d940c8eaa771a4ce1b02df16bea6a" + integrity sha512-jiPlMTN6/5CjZpJOkGeUV0mb4zxx33uXWdj/xQCfAMkuNAC3HN7CvYDyMHHEzmcQ5GV12LszWoQ/VlxET24CtA== + dependencies: + "@types/zen-observable" "^0.8.0" + apollo-cache "1.3.5" + apollo-link "^1.0.0" + apollo-utilities "1.3.4" + symbol-observable "^1.0.2" + ts-invariant "^0.4.0" + tslib "^1.10.0" + zen-observable "^0.8.0" + +apollo-link-http-common@^0.2.16: + version "0.2.16" + resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz#756749dafc732792c8ca0923f9a40564b7c59ecc" + integrity sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg== + dependencies: + apollo-link "^1.2.14" + ts-invariant "^0.4.0" + tslib "^1.9.3" + +apollo-link-http@^1.5.17: + version "1.5.17" + resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.17.tgz#499e9f1711bf694497f02c51af12d82de5d8d8ba" + integrity sha512-uWcqAotbwDEU/9+Dm9e1/clO7hTB2kQ/94JYcGouBVLjoKmTeJTUPQKcJGpPwUjZcSqgYicbFqQSoJIW0yrFvg== + dependencies: + apollo-link "^1.2.14" + apollo-link-http-common "^0.2.16" + tslib "^1.9.3" + +apollo-link@^1.0.0, apollo-link@^1.2.14: + version "1.2.14" + resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9" + integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg== + dependencies: + apollo-utilities "^1.3.0" + ts-invariant "^0.4.0" + tslib "^1.9.3" + zen-observable-ts "^0.8.21" + +apollo-utilities@1.3.4, apollo-utilities@^1.3.0, apollo-utilities@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.4.tgz#6129e438e8be201b6c55b0f13ce49d2c7175c9cf" + integrity sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig== + dependencies: + "@wry/equality" "^0.1.2" + fast-json-stable-stringify "^2.0.0" + ts-invariant "^0.4.0" + tslib "^1.10.0" + arch@^2.1.1, arch@^2.1.2, arch@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz" @@ -5759,6 +5906,20 @@ grapheme-splitter@^1.0.4: resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphql-tag@^2.10.1: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql@^14.5.6: + version "14.7.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.7.0.tgz#7fa79a80a69be4a31c27dda824dc04dac2035a72" + integrity sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA== + dependencies: + iterall "^1.2.2" + h3@^1.8.1, h3@^1.8.2: version "1.9.0" resolved "https://registry.yarnpkg.com/h3/-/h3-1.9.0.tgz#c5f512a93026df9837db6f30c9ef51135dd46752" @@ -6503,6 +6664,11 @@ isstream@~0.1.2: resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== +iterall@^1.2.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" + integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== + jazzicon@^1.5.0: version "1.5.0" resolved "https://registry.npmjs.org/jazzicon/-/jazzicon-1.5.0.tgz" @@ -7620,6 +7786,13 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +optimism@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.10.3.tgz#163268fdc741dea2fb50f300bedda80356445fd7" + integrity sha512-9A5pqGoQk49H6Vhjb9kPgAeeECfUDF6aIICbMDL23kDLStBn1MWk3YvcZ4xWF9CsSf6XEgvRLkXy4xof/56vVw== + dependencies: + "@wry/context" "^0.4.0" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" @@ -8204,6 +8377,17 @@ rc@^1.0.1, rc@^1.1.6: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-apollo@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/react-apollo/-/react-apollo-3.1.5.tgz#36692d393c47e7ccc37f0a885c7cc5a8b4961c91" + integrity sha512-xOxMqxORps+WHrUYbjVHPliviomefOpu5Sh35oO3osuOyPTxvrljdfTLGCggMhcXBsDljtS5Oy4g+ijWg3D4JQ== + dependencies: + "@apollo/react-common" "^3.1.4" + "@apollo/react-components" "^3.1.5" + "@apollo/react-hoc" "^3.1.5" + "@apollo/react-hooks" "^3.1.5" + "@apollo/react-ssr" "^3.1.5" + react-clientside-effect@^1.2.6: version "1.2.6" resolved "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz" @@ -8225,7 +8409,7 @@ react-device-detect@^1.6.2: dependencies: ua-parser-js "^0.7.24" -react-dom@>=17.0.1: +react-dom@>=17.0.1, react-dom@^18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -8233,14 +8417,6 @@ react-dom@>=17.0.1: loose-envify "^1.1.0" scheduler "^0.23.0" -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - react-error-overlay@6.0.9: version "6.0.9" resolved "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz" @@ -9530,7 +9706,7 @@ swarm-js@^0.1.40: tar "^4.0.2" xhr-request "^1.0.1" -symbol-observable@^1.1.0: +symbol-observable@^1.0.2, symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -9696,7 +9872,14 @@ trpc-browser@^1.3.2: resolved "https://registry.yarnpkg.com/trpc-browser/-/trpc-browser-1.3.2.tgz#9b17138086ec906a30584c52499b4731c55ca698" integrity sha512-cXrm7kq+WD8yJfVB8B4pmyL8C0W//Dy+tJq7ohl6fKSK5lfmRIXAlKkNQg/cRZl7YVH/0Xo3NBqcEhVggOCC9A== -tslib@1.14.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +ts-invariant@^0.4.0, ts-invariant@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86" + integrity sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA== + dependencies: + tslib "^1.9.3" + +tslib@1.14.1, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -9883,6 +10066,11 @@ uncrypto@^0.1.3: resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unenv@^1.7.4: version "1.8.0" resolved "https://registry.yarnpkg.com/unenv/-/unenv-1.8.0.tgz#0f860d5278405700bd95d47b23bc01f3a735d68c" @@ -10878,6 +11066,19 @@ yauzl@^2.10.0: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" +zen-observable-ts@^0.8.21: + version "0.8.21" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d" + integrity sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg== + dependencies: + tslib "^1.9.3" + zen-observable "^0.8.0" + +zen-observable@^0.8.0: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== + zod@^3.22.2: version "3.22.4" resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff"