From 9efa001b350d5337d5908c1c3af7109ebc824fba Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Thu, 3 Apr 2025 22:21:50 +0530 Subject: [PATCH 01/30] add cache to actions UI --- .../[strategyId]/_components/FlowChart.tsx | 4 + .../[strategyId]/_components/Strategy.tsx | 143 +++++++++--------- src/constants.ts | 3 +- src/store/endur.store.ts | 4 +- 4 files changed, 84 insertions(+), 70 deletions(-) diff --git a/src/app/strategy/[strategyId]/_components/FlowChart.tsx b/src/app/strategy/[strategyId]/_components/FlowChart.tsx index fd39ef25..d3bb8ade 100644 --- a/src/app/strategy/[strategyId]/_components/FlowChart.tsx +++ b/src/app/strategy/[strategyId]/_components/FlowChart.tsx @@ -254,6 +254,10 @@ function InternalFlowChart(props: FlowChartProps) { const proOptions = { hideAttribution: true }; + if (strategyCached && strategyCached.investmentFlows.length == 0) { + return null; + } + if (strategyCached && strategyCached.investmentFlows.length > 0) return (
diff --git a/src/app/strategy/[strategyId]/_components/Strategy.tsx b/src/app/strategy/[strategyId]/_components/Strategy.tsx index 160e9380..2e4bd3a0 100755 --- a/src/app/strategy/[strategyId]/_components/Strategy.tsx +++ b/src/app/strategy/[strategyId]/_components/Strategy.tsx @@ -50,6 +50,10 @@ import { StrategyParams } from '../page'; import FlowChart from './FlowChart'; import { isMobile } from 'react-device-detect'; import { getRiskExplaination } from '@strkfarm/sdk'; +import { + STRKFarmBaseAPYsAtom, + STRKFarmStrategyAPIResult, +} from '@/store/strkfarm.atoms'; const Strategy = ({ params }: StrategyParams) => { const address = useAtomValue(addressAtom); @@ -163,6 +167,14 @@ const Strategy = ({ params }: StrategyParams) => { setIsMounted(true); }, []); + const strategiesInfo = useAtomValue(STRKFarmBaseAPYsAtom); + const strategyCached = useMemo(() => { + if (!strategiesInfo || !strategiesInfo.data) return null; + const strategiesList: STRKFarmStrategyAPIResult[] = + strategiesInfo.data.strategies; + return strategiesList.find((s: any) => s.id === params.strategyId); + }, [strategiesInfo, params.strategyId]); + if (!isMounted) return null; return ( @@ -486,75 +498,70 @@ const Strategy = ({ params }: StrategyParams) => { Yield - {strategy.actions.map((action, index) => ( - - ( + - {index + 1} - {')'} {action.name} - - - {' '} - {action.pool.pool.name} on - {' '} - {action.pool.protocol.name} - - - ${Number(action.amount).toLocaleString()} yields{' '} - {action.isDeposit - ? (action.pool.apr * 100).toFixed(2) - : -(action.pool.borrow.apr * 100).toFixed(2)} - % - - - ${Number(action.amount).toLocaleString()} - - - {action.isDeposit - ? (action.pool.apr * 100).toFixed(2) - : -(action.pool.borrow.apr * 100).toFixed(2)} - % - - - ))} - {strategy.actions.length == 0 && ( + + {index + 1} + {')'} {action.name} + + + {' '} + {action.token.name} on + {' '} + {action.protocol.name} + + + ${Number(action.amount).toLocaleString()} yields{' '} + {(action.apy * 100).toFixed(2)}% + + + ${Number(action.amount).toLocaleString()} + + + {(action.apy * 100).toFixed(2)}% + + + ))} + {(!strategyCached || strategyCached.actions.length == 0) && (
diff --git a/src/constants.ts b/src/constants.ts index afe88058..adc19460 100755 --- a/src/constants.ts +++ b/src/constants.ts @@ -56,7 +56,8 @@ export const CONSTANTS = { BASE_APR_API: '/haiko/markets?network=mainnet', }, STRKFarm: { - BASE_APR_API: '/api/strategies', + // BASE_APR_API: '/api/strategies', + BASE_APR_API: 'https://app.strkfarm.com/api/strategies', }, MY_SWAP: { POOLS_API: '/myswap/data/pools/all.json', diff --git a/src/store/endur.store.ts b/src/store/endur.store.ts index aa66ce64..bad2f41b 100644 --- a/src/store/endur.store.ts +++ b/src/store/endur.store.ts @@ -70,7 +70,9 @@ const EndurAtoms = { .operate('mul', 365 * 24 * 60 * 60) .toEtherToFixedDecimals(2), ) / Number(tvl.amount.toEtherToFixedDecimals(2)); - return apy; + const fee = 0.15; + const netApy = apy * (1 - fee); + return netApy; }, }), pools: atom((get) => { From cb9c343f4c5b55a88a7a5efa32cc0b9024267fc1 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Sun, 6 Apr 2025 04:37:34 +0530 Subject: [PATCH 02/30] add Ekubo Vault --- package.json | 4 +- src/app/api/stats/[address]/route.ts | 51 +- src/app/api/strategies/route.ts | 594 +++++++++++++++++- src/app/slinks/layout.tsx | 62 -- src/app/slinks/page.tsx | 163 ----- src/app/slinks/template.tsx | 117 ---- .../[strategyId]/_components/FlowChart.tsx | 8 +- .../[strategyId]/_components/Strategy.tsx | 175 ++---- .../[strategyId]/_components/TokenDeposit.tsx | 141 +++++ src/components/AmountInput.tsx | 493 +++++++++++++++ src/components/Deposit.tsx | 563 ++++++++--------- src/components/HarvestTime.tsx | 6 +- src/components/YieldCard.tsx | 10 +- src/constants.ts | 4 +- src/store/balance.atoms.ts | 20 +- src/store/endur.store.ts | 41 -- src/store/protocols.ts | 23 +- src/store/strategies.atoms.tsx | 73 ++- src/store/strkfarm.atoms.ts | 7 +- src/store/transactions.atom.ts | 5 + src/store/utils.atoms.ts | 12 +- src/strategies/IStrategy.ts | 155 ++++- src/strategies/auto_strk.strat.ts | 111 ++-- src/strategies/auto_xstrk.strat.ts | 127 ++-- src/strategies/delta_neutral_mm.ts | 105 ++-- src/strategies/delta_neutral_mm_2.ts | 43 +- src/strategies/delta_neutral_mm_vesu_endur.ts | 50 +- src/strategies/ekubo_cl_vault.ts | 368 +++++++++++ src/strategies/vesu_rebalance.ts | 76 ++- src/utils.ts | 160 ++++- src/utils/MyNumber.ts | 4 + yarn.lock | 94 +-- 32 files changed, 2634 insertions(+), 1231 deletions(-) delete mode 100755 src/app/slinks/layout.tsx delete mode 100755 src/app/slinks/page.tsx delete mode 100755 src/app/slinks/template.tsx create mode 100644 src/app/strategy/[strategyId]/_components/TokenDeposit.tsx create mode 100644 src/components/AmountInput.tsx create mode 100644 src/strategies/ekubo_cl_vault.ts diff --git a/package.json b/package.json index 048a4713..85391c8f 100755 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@prisma/client": "5.18.0", "@starknet-react/chains": "3.0.0", "@starknet-react/core": "3.0.1", - "@strkfarm/sdk": "^1.0.28", + "@strkfarm/sdk": "^1.0.29", "@tanstack/query-core": "5.28.0", "@types/mixpanel-browser": "2.49.0", "@types/mustache": "4.2.5", @@ -53,6 +53,7 @@ "graphql": "16.9.0", "jotai": "2.6.4", "jotai-tanstack-query": "0.8.5", + "lodash.debounce": "^4.0.8", "mixpanel": "^0.18.0", "mixpanel-browser": "2.49.0", "mustache": "4.2.0", @@ -75,6 +76,7 @@ "wonka": "6.3.4" }, "devDependencies": { + "@types/lodash.debounce": "^4.0.9", "@types/node": "20", "@types/react": "18", "@types/react-dom": "18", diff --git a/src/app/api/stats/[address]/route.ts b/src/app/api/stats/[address]/route.ts index cbbfcb6d..0365dda4 100755 --- a/src/app/api/stats/[address]/route.ts +++ b/src/app/api/stats/[address]/route.ts @@ -1,6 +1,8 @@ import { getStrategies } from '@/store/strategies.atoms'; +import { StrategyWise } from '@/store/utils.atoms'; import { standariseAddress } from '@/utils'; import { NextResponse } from 'next/server'; +import { AmountsInfo } from '@/strategies/IStrategy'; export const revalidate = 0; @@ -17,40 +19,51 @@ export async function GET(_req: Request, context: any) { } const strategies = getStrategies(); - const values = strategies.map(async (strategy) => { + const values: Promise[] = strategies.map(async (strategy) => { if (strategy.isLive()) { - const balanceInfo = await strategy.getUserTVL(pAddr); + const balanceInfo: AmountsInfo = await strategy.getUserTVL(pAddr); + if (balanceInfo.amounts.length == 1) { + return { + id: strategy.id, + usdValue: balanceInfo.usdValue, + holdings: [ + { + tokenInfo: balanceInfo.amounts[0].tokenInfo, + amount: balanceInfo.amounts[0].amount, + usdValue: balanceInfo.amounts[0].usdValue, + }, + ], + }; + } + const summary = await strategy.computeSummaryValue( + balanceInfo.amounts.map((a) => ({ + tokenInfo: a.tokenInfo, + amount: a.amount, + })), + strategy.settings.quoteToken, + ); return { id: strategy.id, usdValue: balanceInfo.usdValue, - tokenInfo: { - name: balanceInfo.tokenInfo.name, - symbol: balanceInfo.tokenInfo.name, - logo: balanceInfo.tokenInfo.logo, - decimals: balanceInfo.tokenInfo.decimals, - displayDecimals: balanceInfo.tokenInfo.displayDecimals, - }, - amount: balanceInfo.amount.toEtherStr(), + holdings: [ + { + tokenInfo: strategy.settings.quoteToken, + amount: summary, + usdValue: balanceInfo.usdValue, + }, + ], }; } return { id: strategy.id, usdValue: 0, - tokenInfo: { - name: '', - symbol: '', - logo: '', - decimals: 0, - displayDecimals: 0, - }, - amount: 0, + holdings: [], }; }); const result = await Promise.all(values); const sum = result.reduce((acc, item) => acc + item.usdValue, 0); - console.log({ pAddr, sum }); return NextResponse.json({ holdingsUSD: sum, strategyWise: result, diff --git a/src/app/api/strategies/route.ts b/src/app/api/strategies/route.ts index 48a54959..a798aff4 100755 --- a/src/app/api/strategies/route.ts +++ b/src/app/api/strategies/route.ts @@ -1,14 +1,12 @@ import { NextResponse } from 'next/server'; import { atom } from 'jotai'; -import ZkLendAtoms from '@/store/zklend.store'; import { PoolInfo, PoolType } from '@/store/pools'; -import NostraLendingAtoms from '@/store/nostralending.store'; import { RpcProvider } from 'starknet'; import { getLiveStatusNumber, getStrategies } from '@/store/strategies.atoms'; -import { MY_STORE } from '@/store'; import MyNumber from '@/utils/MyNumber'; import { IStrategy, NFTInfo, TokenInfo } from '@/strategies/IStrategy'; import { STRKFarmStrategyAPIResult } from '@/store/strkfarm.atoms'; +import { MY_STORE } from '@/store'; import VesuAtoms, { vesu } from '@/store/vesu.store'; import EndurAtoms, { endur } from '@/store/endur.store'; @@ -16,7 +14,9 @@ export const revalidate = 3600; // 1 hr const allPoolsAtom = atom((get) => { const pools: PoolInfo[] = []; - const poolAtoms = [ZkLendAtoms, NostraLendingAtoms, VesuAtoms, EndurAtoms]; + // undo + const poolAtoms = [VesuAtoms, EndurAtoms]; + // const poolAtoms: ProtocolAtoms[] = []; return poolAtoms.reduce((_pools, p) => _pools.concat(get(p.pools)), pools); }); @@ -24,18 +24,20 @@ async function getPools(store: any, retry = 0) { const allPools: PoolInfo[] | undefined = store.get(allPoolsAtom); console.log('allPools', allPools?.length); - const minProtocolsRequired = [vesu.name, endur.name]; + // undo + const minProtocolsRequired: string[] = [vesu.name, endur.name]; const hasRequiredPools = minProtocolsRequired.every((p) => { + if (minProtocolsRequired.length == 0) return true; if (!allPools) return false; return allPools.some((pool) => { - console.log('pool.protocol.name', pool.protocol.name); + console.log(new Date(), 'pool.protocol.name', pool.protocol.name); return ( pool.protocol.name === p && (pool.type == PoolType.Lending || pool.type == PoolType.Staking) ); }); }); - console.log('hasRequiredPools', hasRequiredPools); + console.log(new Date(), 'hasRequiredPools', hasRequiredPools); const MAX_RETRIES = 120; if (retry >= MAX_RETRIES) { throw new Error('Failed to fetch pools'); @@ -59,14 +61,14 @@ async function getStrategyInfo( name: strategy.name, id: strategy.id, apy: strategy.netYield, - depositToken: strategy - .depositMethods({ + depositToken: ( + await strategy.depositMethods({ amount: MyNumber.fromZero(), address: '', provider, isMax: false, }) - .map((t) => t.tokenInfo.token), + ).map((t) => t.amounts[0].tokenInfo.address.address), leverage: strategy.leverage, contract: strategy.holdingTokens.map((t) => ({ name: t.name, @@ -78,7 +80,7 @@ async function getStrategyInfo( value: strategy.liveStatus, }, riskFactor: strategy.riskFactor, - logo: strategy.holdingTokens[0].logo, + logos: strategy.metadata.depositTokens.map((t) => t.logo), isAudited: strategy.settings.auditUrl ? true : false, auditUrl: strategy.settings.auditUrl, actions: strategy.actions.map((action) => { @@ -149,3 +151,573 @@ export async function GET(req: Request) { }); } } + +export async function GETTT() { + return NextResponse.json({ + status: true, + strategies: [ + { + name: 'Vesu Fusion STRK', + id: 'vesu_fusion_strk', + apy: 0.09792071607840036, + depositToken: [ + '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', + ], + leverage: 1, + contract: [ + { + name: 'STRK', + address: + '0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929', + }, + ], + tvlUsd: 239.321076172105, + status: { number: 1, value: 'Hot & New 🔥' }, + riskFactor: 0.75, + logos: [ + 'https://assets.coingecko.com/coins/images/26433/small/starknet.png', + ], + isAudited: true, + auditUrl: + 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', + actions: [], + investmentFlows: [ + { + title: 'Your Deposit', + subItems: [ + { key: 'Net yield', value: '9.79%' }, + { key: 'Performance Fee', value: '10.00%' }, + ], + linkedFlows: [ + { + title: 'Pool name: Re7 xSTRK', + subItems: [ + { key: 'APY', value: '11.01%' }, + { key: 'Weight', value: '98.00 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Genesis', + subItems: [ + { key: 'APY', value: '4.32%' }, + { key: 'Weight', value: '2.00 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Re7 USDC', + subItems: [ + { key: 'APY', value: '4.32%' }, + { key: 'Weight', value: '0.00 / 100.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Re7 Starknet Ecosystem', + subItems: [ + { key: 'APY', value: '4.32%' }, + { key: 'Weight', value: '0.00 / 100.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope wstETH', + subItems: [ + { key: 'APY', value: '4.32%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope Cornerstone', + subItems: [ + { key: 'APY', value: '4.32%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope CASH', + subItems: [ + { key: 'APY', value: '4.32%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope xSTRK', + subItems: [ + { key: 'APY', value: '4.32%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Re7 rUSDC', + subItems: [ + { key: 'APY', value: '4.32%' }, + { key: 'Weight', value: '0.00 / 100.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + ], + style: { backgroundColor: '#6e53dc' }, + }, + ], + }, + { + name: 'Vesu Fusion USDC', + id: 'vesu_fusion_usdc', + apy: 0.0849054883852517, + depositToken: [ + '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', + ], + leverage: 1, + contract: [ + { + name: 'USDC', + address: + '0xa858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c', + }, + ], + tvlUsd: 1006.076823806659, + status: { number: 1, value: 'Hot & New 🔥' }, + riskFactor: 0.75, + logos: [ + 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png', + ], + isAudited: true, + auditUrl: + 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', + actions: [], + investmentFlows: [ + { + title: 'Your Deposit', + subItems: [ + { key: 'Net yield', value: '8.49%' }, + { key: 'Performance Fee', value: '10.00%' }, + ], + linkedFlows: [ + { + title: 'Pool name: Re7 Starknet Ecosystem', + subItems: [ + { key: 'APY', value: '9.55%' }, + { key: 'Weight', value: '97.81 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Re7 USDC', + subItems: [ + { key: 'APY', value: '4.36%' }, + { key: 'Weight', value: '1.99 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Genesis', + subItems: [ + { key: 'APY', value: '3.95%' }, + { key: 'Weight', value: '0.20 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Alterscope wstETH', + subItems: [ + { key: 'APY', value: '3.85%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope Cornerstone', + subItems: [ + { key: 'APY', value: '3.85%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope CASH', + subItems: [ + { key: 'APY', value: '3.85%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope xSTRK', + subItems: [ + { key: 'APY', value: '3.85%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Re7 rUSDC', + subItems: [ + { key: 'APY', value: '3.85%' }, + { key: 'Weight', value: '0.00 / 100.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + ], + style: { backgroundColor: '#6e53dc' }, + }, + ], + }, + { + name: 'Vesu Fusion ETH', + id: 'vesu_fusion_eth', + apy: 0.047693629534058146, + depositToken: [ + '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', + ], + leverage: 1, + contract: [ + { + name: 'ETH', + address: + '0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca', + }, + ], + tvlUsd: 123.41689619165199, + status: { number: 1, value: 'Hot & New 🔥' }, + riskFactor: 0.75, + logos: ['https://opbnb.bscscan.com/token/images/ether.svg'], + isAudited: true, + auditUrl: + 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', + actions: [], + investmentFlows: [ + { + title: 'Your Deposit', + subItems: [ + { key: 'Net yield', value: '4.77%' }, + { key: 'Performance Fee', value: '10.00%' }, + ], + linkedFlows: [ + { + title: 'Pool name: Re7 wstETH', + subItems: [ + { key: 'APY', value: '5.31%' }, + { key: 'Weight', value: '98.00 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Genesis', + subItems: [ + { key: 'APY', value: '4.92%' }, + { key: 'Weight', value: '2.00 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Re7 USDC', + subItems: [ + { key: 'APY', value: '4.82%' }, + { key: 'Weight', value: '0.00 / 100.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope wstETH', + subItems: [ + { key: 'APY', value: '4.82%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope Cornerstone', + subItems: [ + { key: 'APY', value: '4.82%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope CASH', + subItems: [ + { key: 'APY', value: '4.82%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope xSTRK', + subItems: [ + { key: 'APY', value: '4.82%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Re7 rUSDC', + subItems: [ + { key: 'APY', value: '4.82%' }, + { key: 'Weight', value: '0.00 / 100.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + ], + style: { backgroundColor: '#6e53dc' }, + }, + ], + }, + { + name: 'Vesu Fusion USDT', + id: 'vesu_fusion_usdt', + apy: 0.035171100000000004, + depositToken: [ + '0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8', + ], + leverage: 1, + contract: [ + { + name: 'USDT', + address: + '0x115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c', + }, + ], + tvlUsd: 2.000052, + status: { number: 1, value: 'Hot & New 🔥' }, + riskFactor: 0.75, + logos: [ + 'https://assets.coingecko.com/coins/images/325/small/Tether.png', + ], + isAudited: true, + auditUrl: + 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', + actions: [], + investmentFlows: [ + { + title: 'Your Deposit', + subItems: [ + { key: 'Net yield', value: '3.52%' }, + { key: 'Performance Fee', value: '10.00%' }, + ], + linkedFlows: [ + { + title: 'Pool name: Genesis', + subItems: [ + { key: 'APY', value: '3.91%' }, + { key: 'Weight', value: '100.00 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Alterscope wstETH', + subItems: [ + { key: 'APY', value: '3.84%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope Cornerstone', + subItems: [ + { key: 'APY', value: '3.84%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope CASH', + subItems: [ + { key: 'APY', value: '3.84%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope xSTRK', + subItems: [ + { key: 'APY', value: '3.84%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + ], + style: { backgroundColor: '#6e53dc' }, + }, + ], + }, + { + name: 'Ekubo xSTRK/STRK', + id: 'ekubo_cl_xstrkstrk', + apy: 1.1308996660059625, + depositToken: [ + '0x28d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a', + ], + leverage: 1, + contract: [ + { + name: 'Ekubo xSTRK/STRK', + address: + '0x1f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324', + }, + ], + tvlUsd: 20.53792646308871, + status: { number: 1, value: 'Hot & New 🔥' }, + riskFactor: 0.875, + logos: [ + 'https://dashboard.endur.fi/endur-fi.svg', + 'https://assets.coingecko.com/coins/images/26433/small/starknet.png', + ], + isAudited: true, + auditUrl: + 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', + actions: [], + investmentFlows: [ + { + id: 'base', + title: 'Your Deposit', + subItems: [ + { key: 'Net yield', value: '50.23%' }, + { key: 'Performance Fee', value: '10.00%' }, + ], + linkedFlows: [ + { + title: 'Ekubo xSTRK/STRK', + subItems: [{ key: 'Pool', value: '0.01%, 200 tick spacing' }], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + ], + style: { backgroundColor: '#6e53dc' }, + }, + { + id: 'rebalance', + title: 'Automated Rebalance', + subItems: [{ key: 'Range selection', value: '-200 to 200 ticks' }], + linkedFlows: [ + { + title: 'Ekubo xSTRK/STRK', + subItems: [{ key: 'Pool', value: '0.01%, 200 tick spacing' }], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + ], + style: { backgroundColor: 'purple' }, + }, + ], + }, + { + name: 'xSTRK Sensei', + id: 'xstrk_sensei', + apy: 0.27397975107434713, + depositToken: [ + '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', + ], + leverage: 2.374827546066231, + contract: [ + { + name: 'frmDNMMSTRKxSTRK', + address: + '0x7023a5cadc8a5db80e4f0fde6b330cbd3c17bbbf9cb145cbabd7bd5e6fb7b0b', + }, + ], + tvlUsd: 51663.98830321935, + status: { number: 3, value: 'Active' }, + riskFactor: 0.75, + logos: [''], + isAudited: false, + actions: [ + { + name: 'Stake STRK to Endur', + protocol: { name: 'Endur', logo: 'https://endur.fi/favicon.ico' }, + token: { name: 'STRK', logo: '/zklend/icons/tokens/strk.svg?w=20' }, + amount: '1000.00', + isDeposit: true, + apy: 0.11536827233126012, + }, + { + name: "Supply's your xSTRK to Vesu", + protocol: { + name: 'Vesu', + logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', + }, + token: { + name: 'xSTRK (Re7 xSTRK)', + logo: '/imagedelivery/c1f44170-c1b0-4531-3d3b-5f0bacfe1300/logo', + }, + amount: '1000.00', + isDeposit: true, + apy: 0.025090809515230683, + }, + { + name: 'Borrow STRK from Vesu', + protocol: { + name: 'Vesu', + logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', + }, + token: { + name: 'STRK (Re7 xSTRK)', + logo: '/zklend/icons/tokens/strk.svg?w=20', + }, + amount: '725.00', + isDeposit: false, + apy: -0.080942, + }, + { + name: 'Loop back to step 1, repeat 3 more times', + protocol: { + name: 'Vesu', + logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', + }, + token: { + name: 'STRK (Re7 xSTRK)', + logo: '/zklend/icons/tokens/strk.svg?w=20', + }, + amount: '541.1958750000001', + isDeposit: true, + apy: 0.2973677521690575, + }, + { + name: 'Re-invest your STRK Rewards every 7 days (Compound)', + protocol: { name: 'Endur', logo: 'https://endur.fi/favicon.ico' }, + token: { name: 'STRK', logo: '/zklend/icons/tokens/strk.svg?w=20' }, + amount: '1000.00', + isDeposit: true, + apy: 0.03126941839594008, + }, + ], + investmentFlows: [], + }, + ], + }); +} diff --git a/src/app/slinks/layout.tsx b/src/app/slinks/layout.tsx deleted file mode 100755 index 93546b28..00000000 --- a/src/app/slinks/layout.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { GoogleAnalytics } from '@next/third-parties/google'; -import { Analytics } from '@vercel/analytics/react'; -import React from 'react'; - -import '../globals.css'; -import { getHosturl } from '@/utils'; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - - - - - - - - - - - - - - - - - {children} - - - - - ); -} diff --git a/src/app/slinks/page.tsx b/src/app/slinks/page.tsx deleted file mode 100755 index c9704949..00000000 --- a/src/app/slinks/page.tsx +++ /dev/null @@ -1,163 +0,0 @@ -'use client'; -import TxButton from '@/components/TxButton'; -import { addressAtom } from '@/store/claims.atoms'; -import { StrategyInfo, strategiesAtom } from '@/store/strategies.atoms'; -import { StrategyTxProps } from '@/store/transactions.atom'; -import MyNumber from '@/utils/MyNumber'; -import { - Avatar, - Box, - Button, - Card, - Link, - Container, - Flex, - Input, - Text, - Center, -} from '@chakra-ui/react'; -import { useProvider } from '@starknet-react/core'; -import { useAtomValue } from 'jotai'; -import { Metadata } from 'next'; -import { useMemo, useState } from 'react'; - -const metadata: Metadata = { - title: 'STRKFarm | Yield aggregator on Starknet', - description: - 'Find and invest in high yield pools. STRKFarm is the best yield aggregator on Starknet.', -}; - -function GetCardSimple(strat: StrategyInfo) { - const [amount, setAmount] = useState(MyNumber.fromZero()); - const address = useAtomValue(addressAtom); - const { provider } = useProvider(); - const depositMethods = strat.depositMethods({ - amount, - address: address || '', - provider, - isMax: false, - }); - - const balData = useAtomValue(depositMethods[0].balanceAtom); - - const balance = useMemo(() => { - return balData.data?.amount || MyNumber.fromZero(); - }, [balData]); - - const txInfo: StrategyTxProps = useMemo(() => { - return { - strategyId: strat.id, - actionType: 'deposit', - amount, - tokenAddr: depositMethods[0].tokenInfo.token, - }; - }, [amount, balData]); - - const maxAmount: MyNumber = useMemo(() => { - return balance; - }, [balance]); - - // Function to reset the input fields to their initial state - const resetDepositForm = () => { - setAmount(MyNumber.fromZero()); - }; - - return ( - - - - - {strat.name}{' '} - - {(strat.netYield * 100).toFixed(2)}% APY - - - - Bal: {balance.toEtherToFixedDecimals(2)}{' '} - {depositMethods[0].tokenInfo.name} - - - - { - const value = event.target.value; - if (value && Number(value) > 0) - setAmount( - MyNumber.fromEther(value, depositMethods[0].tokenInfo.decimals), - ); - else { - setAmount( - new MyNumber('0', depositMethods[0].tokenInfo.decimals), - ); - } - }} - width={'40%'} - /> - - - - - - ); -} - -export default function Slinks() { - const strategies = useAtomValue(strategiesAtom); - return ( - - {/*
- -
*/} - - Choose a strategy and invest - {strategies - .filter((s) => s.isLive()) - .map((strat) => GetCardSimple(strat))} - - -
- -
- -
- ); -} diff --git a/src/app/slinks/template.tsx b/src/app/slinks/template.tsx deleted file mode 100755 index 55454e2f..00000000 --- a/src/app/slinks/template.tsx +++ /dev/null @@ -1,117 +0,0 @@ -'use client'; - -import Navbar, { getConnectors } from '@/components/Navbar'; -import { MY_STORE } from '@/store'; -import { - Center, - ChakraBaseProvider, - Container, - Flex, - extendTheme, -} from '@chakra-ui/react'; -import { mainnet } from '@starknet-react/chains'; -import { StarknetConfig, jsonRpcProvider } from '@starknet-react/core'; -import { Provider as JotaiProvider } from 'jotai'; -import mixpanel from 'mixpanel-browser'; -import Image from 'next/image'; -import { usePathname } from 'next/navigation'; -import * as React from 'react'; -import { isMobile } from 'react-device-detect'; -import { Toaster } from 'react-hot-toast'; -import { RpcProviderOptions, constants } from 'starknet'; - -mixpanel.init('118f29da6a372f0ccb6f541079cad56b'); - -const theme = extendTheme({ - colors: { - transparent: 'rgba(0, 0, 0, 0)', - opacity_50p: 'rgba(0, 0, 0, 0.5)', - color1: 'rgba(86, 118, 254, 1)', - color1_65p: 'rgba(86, 118, 254, 0.65)', - color1_50p: 'rgba(86, 118, 254, 0.5)', - color1_35p: 'rgba(86, 118, 254, 0.35)', - color1_light: '#bcc9ff80', - color2: 'rgb(127 73 229)', - color2Text: 'rgb(165 118 255)', - color2_65p: 'rgba(104, 51, 205, 0.65)', - color2_50p: 'rgba(104, 51, 205, 0.5)', - highlight: '#272932', // light grey - light_grey: '#9d9d9d', - disabled_text: '#818181', - disabled_bg: '#5f5f5f', - purple: '#6F4FF2', - cyan: '#22F3DF', - bg: '#1A1C26', // dark blue - }, - fontSizes: { - large: '50px', - }, - space: { - large: '50px', - }, - sizes: { - prose: '100%', - }, - components: { - MenuItem: { - bg: 'highlight', - }, - }, - fonts: { - heading: `'Courier New', Courier, monospace`, - body: `'Courier New', Courier, monospace`, - }, -}); - -// @ts-ignore -BigInt.prototype.toJSON = function () { - return this.toString(); -}; - -export const CONNECTOR_NAMES = ['Braavos', 'Argent X', 'Argent (mobile)']; // 'Argent Web Wallet']; - -export default function Template({ children }: { children: React.ReactNode }) { - const chains = [mainnet]; - const provider = jsonRpcProvider({ - rpc: (_chain) => { - const args: RpcProviderOptions = { - nodeUrl: - 'https://rpc.nethermind.io/mainnet-juno?apikey=t1HPjhplOyEQpxqVMhpwLGuwmOlbXN0XivWUiPAxIBs0kHVK', - chainId: constants.StarknetChainId.SN_MAIN, - }; - return args; - }, - }); - const pathname = usePathname(); - - function _getIconNode(icon: typeof import('*.svg'), alt: string) { - return ( -
- {alt} -
- ); - } - - return ( - - - - - - - {children} - - - - - - - ); -} diff --git a/src/app/strategy/[strategyId]/_components/FlowChart.tsx b/src/app/strategy/[strategyId]/_components/FlowChart.tsx index d3bb8ade..5813026c 100644 --- a/src/app/strategy/[strategyId]/_components/FlowChart.tsx +++ b/src/app/strategy/[strategyId]/_components/FlowChart.tsx @@ -181,8 +181,8 @@ function getNodesAndEdges( {flow.subItems.map((item) => ( - - + + ))}
{item.key}:{item.value}{item.key}:{item.value}
@@ -193,7 +193,7 @@ function getNodesAndEdges( style = { ...style, ...flow.style }; } const _node: FlowNode = { - id: `${level}_${nodes.length}`, + id: flow.id || `${level}_${nodes.length}`, position: { x: 0, y: 0 }, // doesnt matter as we use dagre for layout data: { label: reactElement }, style, @@ -268,7 +268,7 @@ function InternalFlowChart(props: FlowChartProps) { onNodesChange={onNodesChange} onEdgesChange={onEdgesChange} // minZoom={1} - // maxZoom={1} + maxZoom={1} nodesDraggable={false} nodesConnectable={false} elementsSelectable={false} diff --git a/src/app/strategy/[strategyId]/_components/Strategy.tsx b/src/app/strategy/[strategyId]/_components/Strategy.tsx index 2e4bd3a0..8c631794 100755 --- a/src/app/strategy/[strategyId]/_components/Strategy.tsx +++ b/src/app/strategy/[strategyId]/_components/Strategy.tsx @@ -4,6 +4,7 @@ import { Alert, AlertIcon, Avatar, + AvatarGroup, Badge, Box, Card, @@ -11,16 +12,11 @@ import { Flex, Grid, GridItem, + HStack, Link, ListItem, OrderedList, Spinner, - Tab, - TabIndicator, - TabList, - TabPanel, - TabPanels, - Tabs, Text, Tooltip, VStack, @@ -31,9 +27,8 @@ import { atom, useAtomValue, useSetAtom } from 'jotai'; import mixpanel from 'mixpanel-browser'; import { useCallback, useEffect, useMemo, useState } from 'react'; -import Deposit from '@/components/Deposit'; import HarvestTime from '@/components/HarvestTime'; -import { DUMMY_BAL_ATOM } from '@/store/balance.atoms'; +import { DUMMY_BAL_ATOM, returnEmptyBal } from '@/store/balance.atoms'; import { addressAtom } from '@/store/claims.atoms'; import { strategiesAtom, StrategyInfo } from '@/store/strategies.atoms'; import { transactionsAtom, TxHistoryAtom } from '@/store/transactions.atom'; @@ -54,6 +49,7 @@ import { STRKFarmBaseAPYsAtom, STRKFarmStrategyAPIResult, } from '@/store/strkfarm.atoms'; +import { TokenDeposit } from './TokenDeposit'; const Strategy = ({ params }: StrategyParams) => { const address = useAtomValue(addressAtom); @@ -86,7 +82,10 @@ const Strategy = ({ params }: StrategyParams) => { setBalQueryEnable(true); }, []); - const balData = useAtomValue(strategy?.balanceAtom || DUMMY_BAL_ATOM); + const balData = useAtomValue(strategy?.balanceSummaryAtom || DUMMY_BAL_ATOM); + const individualBalances = useAtomValue( + strategy?.balancesAtom || atom([returnEmptyBal()]), + ); // fetch tx history const txHistoryAtom = useMemo( @@ -94,7 +93,7 @@ const Strategy = ({ params }: StrategyParams) => { TxHistoryAtom( strategyAddress, address!, - strategy?.balanceAtom || DUMMY_BAL_ATOM, + strategy?.balanceSummaryAtom || DUMMY_BAL_ATOM, ), [address, strategyAddress, balData], ); @@ -180,7 +179,22 @@ const Strategy = ({ params }: StrategyParams) => { return ( <> - + + {strategy && + strategy.metadata.depositTokens.length > 0 && + strategy.metadata.depositTokens.map((token: any) => { + return ( + + ); + })} + {strategy && strategy.metadata.depositTokens.length == 0 && ( + + )} + { )} - {(balData.isLoading || - balData.isPending || - !balData.data?.tokenInfo) && ( + {(balData.isLoading || !balData.data?.tokenInfo) && ( Your Holdings: {address ? ( @@ -302,6 +314,35 @@ const Strategy = ({ params }: StrategyParams) => { Your Holdings: Error )} + + {/* Show individual holdings is more tokens */} + {individualBalances.length > 1 && + balData.data?.amount.compare('0', 'gt') && ( + + +

Detailed Split:

+ {individualBalances.map((bx, index) => { + return ( + + {bx?.amount.toEtherToFixedDecimals( + bx.tokenInfo?.displayDecimals || 2, + )}{' '} + {bx?.tokenInfo?.name} + + ); + })} +
+
+ )} + {address && balData.data && strategy.id == 'xstrk_sensei' && @@ -358,105 +399,13 @@ const Strategy = ({ params }: StrategyParams) => { - - - - { - // mixpanel.track('All pools clicked') - }} - > - Deposit - - { - // mixpanel.track('Strategies opened') - }} - > - Withdraw - - - - - - - {strategy.settings.alerts != undefined && ( - - {strategy.settings.alerts - .filter((a) => a.tab == 'deposit' || a.tab == 'all') - .map((alert, index) => ( - - - {alert.text} - - ))} - - )} - - - - {strategy.settings.alerts != undefined && ( - - {strategy.settings.alerts - .filter( - (a) => a.tab == 'withdraw' || a.tab == 'all', - ) - .map((alert, index) => ( - - - {alert.text} - - ))} - - )} - - - - + {!strategy || + (strategy.isSingleTokenDepositView && ( + + ))} + {strategy && !strategy.isSingleTokenDepositView && ( + + )} diff --git a/src/app/strategy/[strategyId]/_components/TokenDeposit.tsx b/src/app/strategy/[strategyId]/_components/TokenDeposit.tsx new file mode 100644 index 00000000..4319b924 --- /dev/null +++ b/src/app/strategy/[strategyId]/_components/TokenDeposit.tsx @@ -0,0 +1,141 @@ +import Deposit from '@/components/Deposit'; +import { StrategyInfo } from '@/store/strategies.atoms'; +import { + Alert, + AlertIcon, + Card, + Tab, + TabIndicator, + TabList, + TabPanel, + TabPanels, + Tabs, + VStack, +} from '@chakra-ui/react'; +import { useState } from 'react'; + +interface TokenDepositProps { + strategy: StrategyInfo; + isDualToken?: boolean; +} + +export function TokenDeposit(props: TokenDepositProps) { + const [tabIndex, setTabIndex] = useState(0); + const { strategy } = props; + return ( + + { + setTabIndex(index); + }} + > + + { + // mixpanel.track('All pools clicked') + }} + > + Deposit + + { + // mixpanel.track('Strategies opened') + }} + > + Withdraw + + + + + + {tabIndex == 0 && ( + <> + + {strategy.settings.alerts != undefined && ( + + {strategy.settings.alerts + .filter((a) => a.tab == 'deposit' || a.tab == 'all') + .map((alert, index) => ( + + + {alert.text} + + ))} + + )} + + )} + + + {tabIndex == 1 && ( + <> + + {strategy.settings.alerts != undefined && ( + + {strategy.settings.alerts + .filter((a) => a.tab == 'withdraw' || a.tab == 'all') + .map((alert, index) => ( + + + {alert.text} + + ))} + + )} + + )} + + + + + ); +} diff --git a/src/components/AmountInput.tsx b/src/components/AmountInput.tsx new file mode 100644 index 00000000..43a88f36 --- /dev/null +++ b/src/components/AmountInput.tsx @@ -0,0 +1,493 @@ +import { useState, useCallback, useMemo, useEffect } from 'react'; +import { + Box, + Text, + GridItem, + NumberInput, + NumberInputField, + Image as ImageC, + NumberInputStepper, + NumberIncrementStepper, + NumberDecrementStepper, + Button, + Tooltip, + Grid, + Menu, + MenuButton, + Center, + MenuList, + MenuItem, +} from '@chakra-ui/react'; +import { useAccount } from '@starknet-react/core'; +import { useAtom, useAtomValue, Atom, useSetAtom } from 'jotai'; +import { TokenInfo as TokenInfoV2, Web3Number } from '@strkfarm/sdk'; +import { + AmountInputInfo, + depositAtom, + inputsInfoAtom, + updateInputInfoAtom, +} from './Deposit'; +import mixpanel from 'mixpanel-browser'; +import { AtomWithQueryResult } from 'jotai-tanstack-query'; +import { BalanceResult, DUMMY_BAL_ATOM } from '@/store/balance.atoms'; +import { StrategyInfo } from '@/store/strategies.atoms'; +import MyNumber from '@/utils/MyNumber'; +import LoadingWrap from './LoadingWrap'; +import { ChevronDownIcon } from '@chakra-ui/icons'; +import { MyMenuItemProps, MyMenuListProps } from '@/utils'; +import debounce from 'lodash.debounce'; + +interface AmountInputProps { + index: number; + tokenInfo: TokenInfoV2; + balanceAtom?: Atom>; + strategy: StrategyInfo; + isDeposit: boolean; + buttonText: string; + supportedTokens: TokenInfoV2[]; +} + +export interface AmountInputRef { + reset: () => void; +} + +/** + * AmountInput component handles token amount input with balance and TVL validation + * @param props Component properties including token info, strategy details, and mode + * @param ref Ref to expose reset functionality to parent + */ +export function AmountInput(props: AmountInputProps) { + // Input state + const [dirty, setDirty] = useState(false); + + // External state + const tvlInfo = useAtomValue(props.strategy.tvlAtom); + const { address } = useAccount(); + const [depositInfo, setDepositInfo] = useAtom(depositAtom); + const setInputInfo = useSetAtom(updateInputInfoAtom); + const inputsInfo = useAtomValue(inputsInfoAtom); + + const inputInfo = useMemo(() => { + if (props.index < 0 || props.index >= inputsInfo.length) + throw new Error(`Invalid index: ${props.index}`); + return inputsInfo[props.index]; + }, [inputsInfo, props.index]); + + // Default token state + const [selectedMarket, setSelectedMarket] = useState( + props.tokenInfo, + ); + + // Get balance data + const balData = useAtomValue(props.balanceAtom || DUMMY_BAL_ATOM); + const balance = useMemo(() => { + return balData.data?.amount || MyNumber.fromZero(); + }, [balData]); + + const isMinAmountError: boolean = useMemo(() => { + if (!dirty) return false; + + const isAtleastOneNonZero = inputsInfo.some((item) => item.amount.gt(0)); + if (isAtleastOneNonZero) { + return false; + } + return true; + }, [inputsInfo]); + /** + * Calculate maximum allowed amount based on: + * - TVL limits for deposits + * - Balance minus gas reserves for specific tokens + * - Zero as minimum + */ + const maxAmount: MyNumber = useMemo(() => { + const currentTVL = Number(tvlInfo.data?.amounts[0].amount.toFixed(6) || 0); + const maxAllowed = + props.isDeposit && props.strategy.settings.maxTVL !== 0 + ? props.strategy.settings.maxTVL - currentTVL + : Number(balance.toEtherToFixedDecimals(8)); + + const adjustedMaxAllowed = MyNumber.fromEther( + maxAllowed.toFixed(6), + selectedMarket.decimals, + ); + + // Reserve gas amounts for specific tokens + let reducedBalance = balance; + if (props.isDeposit) { + if (selectedMarket.name === 'STRK') { + reducedBalance = balance.subtract( + MyNumber.fromEther('1.5', selectedMarket.decimals), + ); + } else if (selectedMarket.name === 'ETH') { + reducedBalance = balance.subtract( + MyNumber.fromEther('0.001', selectedMarket.decimals), + ); + } + } + + const min = MyNumber.min(reducedBalance, adjustedMaxAllowed); + return MyNumber.max(min, MyNumber.fromEther('0', selectedMarket.decimals)); + }, [balance, props.strategy, selectedMarket, props.isDeposit, tvlInfo]); + + function onAmountChange( + _amt: MyNumber, + isMaxClicked: boolean, + rawAmount = _amt.toEtherStr(), + _token = props.tokenInfo, + ) { + updateTokenInfo({ + tokenInfo: _token, + amount: Web3Number.fromWei(_amt.toString(), _token.decimals), + isMaxClicked, + rawAmount, + }); + + checkAndTriggerOnAmountsChange(_amt, _token); + } + + function checkAndTriggerOnAmountsChange( + _amt: MyNumber, + _token: TokenInfoV2 = props.tokenInfo, + ) { + // if onAmountsChange defined + const isAllTokenInfosDefined = inputsInfo.every((item) => item.tokenInfo); + console.log( + 'onAmountsChange [11.3] [2.1]', + props.index, + isAllTokenInfosDefined, + props.buttonText, + inputsInfo, + depositInfo.onAmountsChange, + ); + if (!isAllTokenInfosDefined || !depositInfo.onAmountsChange) { + return; + } + const _amtWeb3 = Web3Number.fromWei(_amt.toString(), _token.decimals); + console.log('onAmountsChange [2.2]', _amtWeb3); + try { + setDepositInfo({ + ...depositInfo, + loading: true, + }); + depositInfo + .onAmountsChange( + { + amountInfo: { + amount: _amtWeb3, + tokenInfo: _token, + }, + index: props.index, + }, + inputsInfo.map((item, index) => { + if (index == props.index) { + return { + amount: _amtWeb3, + tokenInfo: _token, + }; + } + return { + amount: item.amount, + tokenInfo: item.tokenInfo!, + }; + }), + ) + .then((output) => { + console.log('onAmountsChange [2.3]', output); + output.map((item, _index) => { + setInputInfo({ + index: _index, + info: { + ...inputsInfo[_index], + ...item, + rawAmount: Number(item.amount.toFixed(6)).toString(), + }, + }); + }); + setDepositInfo({ + ...depositInfo, + loading: false, + }); + }) + .catch((err) => { + console.log('onAmountsChange [2.4]', err); + setDepositInfo({ + ...depositInfo, + loading: false, + }); + }); + } catch (err) { + console.log('onAmountsChange [2.5] err', err); + } + } + + function BalanceComponent(props: { + token: TokenInfoV2; + strategy: StrategyInfo; + buttonText: string; + }) { + const handleMaxClick = useCallback(() => { + onAmountChange(maxAmount, true); + mixpanel.track('Chose max amount', { + strategyId: props.strategy.id, + strategyName: props.strategy.name, + buttonText: props.buttonText, + amount: inputInfo.amount.toFixed(2), + token: selectedMarket.name, + maxAmount: maxAmount.toEtherStr(), + address, + }); + }, [ + maxAmount, + inputInfo, + selectedMarket, + props.strategy, + props.buttonText, + address, + ]); + + const isLoading = balData.isLoading || balData.isPending; + + return ( + + Available balance + + + + {balance.toEtherToFixedDecimals(4)} + + + + + + ); + } + + function updateTokenInfo(inputInfo: AmountInputInfo) { + const { amount, tokenInfo: _t, isMaxClicked, rawAmount } = inputInfo; + console.log( + `onAmountsChange [10.1]`, + amount.toWei(), + inputInfo, + props.index, + props.buttonText, + ); + const tokenInfo = _t!; + const _amount = Web3Number.fromWei(amount.toWei(), tokenInfo.decimals); + setInputInfo({ + index: props.index, + info: { + amount: _amount, + tokenInfo, + isMaxClicked, + rawAmount, + }, + }); + } + + useEffect(() => { + console.log( + 'onAmountsChange [11]', + inputInfo, + props.index, + props.buttonText, + ); + }, [inputInfo]); + + useEffect(() => { + const isAllTokenInfosDefined = inputsInfo.every((item) => item.tokenInfo); + console.log( + 'onAmountsChange [11.2]', + inputsInfo, + props.index, + isAllTokenInfosDefined, + props.buttonText, + ); + }, [inputsInfo]); + + useEffect(() => { + console.log('onAmountsChange [3]', props); + updateTokenInfo({ + amount: Web3Number.fromWei('0', props.tokenInfo.decimals), + tokenInfo: props.tokenInfo, + isMaxClicked: false, + rawAmount: '', + }); + }, []); + + const handleDebouncedChange = debounce( + (newAmount: MyNumber, valueStr: string) => { + checkAndTriggerOnAmountsChange(newAmount, props.tokenInfo); + + // Track user input + mixpanel.track('Enter amount', { + strategyId: props.strategy.id, + strategyName: props.strategy.name, + buttonText: props.buttonText, + amount: inputInfo.amount.toFixed(2), + token: selectedMarket.name, + maxAmount: maxAmount.toEtherStr(), + address, + }); + }, + 100, + ); // ms delay + + return ( + + {/* Token selection and balance display */} + + + + } + bgColor={'highlight'} + borderColor={'bg'} + borderWidth={'1px'} + color="color2" + _hover={{ + bg: 'bg', + }} + > +
+ + {props.tokenInfo.symbol} +
+
+ + {props.supportedTokens.map((token) => ( + { + if (selectedMarket.name !== token.symbol) { + setSelectedMarket(token); + setDirty(false); + onAmountChange( + new MyNumber('0', token.decimals), + inputInfo.isMaxClicked, + '', + token, + ); + } + }} + > +
+ + {token.symbol} +
+
+ ))} +
+
+
+ + + +
+ + {/* Amount input with validation */} + { + const newAmount = + valueStr && Number(valueStr) > 0 + ? MyNumber.fromEther(valueStr, selectedMarket.decimals) + : new MyNumber('0', selectedMarket.decimals); + + setDirty(true); + updateTokenInfo({ + tokenInfo: props.tokenInfo, + amount: Web3Number.fromWei( + newAmount.toString(), + props.tokenInfo.decimals, + ), + isMaxClicked: inputInfo.isMaxClicked, + rawAmount: valueStr, + }); + handleDebouncedChange(newAmount, valueStr); + }} + marginTop={'10px'} + keepWithinRange={false} + clampValueOnBlur={false} + value={inputInfo.rawAmount} + isDisabled={maxAmount.isZero()} + > + + + + + + + + {/* Validation error messages */} + {isMinAmountError && dirty && ( + + Amount must be greater than 0 + + )} + {inputInfo.amount.gt(maxAmount.toEtherStr()) && ( + + Amount must be less than {maxAmount.toEtherToFixedDecimals(2)} + + )} +
+ ); +} diff --git a/src/components/Deposit.tsx b/src/components/Deposit.tsx index f44075b7..d85910bd 100755 --- a/src/components/Deposit.tsx +++ b/src/components/Deposit.tsx @@ -1,354 +1,343 @@ -import { DUMMY_BAL_ATOM } from '@/store/balance.atoms'; import { StrategyInfo } from '@/store/strategies.atoms'; import { StrategyTxProps } from '@/store/transactions.atom'; import { DepositActionInputs, IStrategyActionHook, - TokenInfo, + onStratAmountsChangeFn, } from '@/strategies/IStrategy'; -import { MyMenuItemProps, MyMenuListProps } from '@/utils'; +import { convertToMyNumber, convertToV1TokenInfo } from '@/utils'; import MyNumber from '@/utils/MyNumber'; -import { ChevronDownIcon } from '@chakra-ui/icons'; import { Alert, AlertIcon, Box, - Button, Center, Flex, - Grid, - GridItem, - Image as ImageC, - Menu, - MenuButton, - MenuItem, - MenuList, - NumberDecrementStepper, - NumberIncrementStepper, - NumberInput, - NumberInputField, - NumberInputStepper, Progress, Spinner, Text, - Tooltip, + VStack, } from '@chakra-ui/react'; import { useAccount } from '@starknet-react/core'; -import { useAtomValue } from 'jotai'; -import mixpanel from 'mixpanel-browser'; +import { atom, PrimitiveAtom, useAtom, useAtomValue, useSetAtom } from 'jotai'; import { useEffect, useMemo, useState } from 'react'; -import LoadingWrap from './LoadingWrap'; import TxButton from './TxButton'; import { provider } from '@/constants'; +import { + SingleActionAmount, + TokenInfo as TokenInfoV2, + Web3Number, +} from '@strkfarm/sdk'; +import { AmountInput } from './AmountInput'; +import { addressAtom } from '@/store/claims.atoms'; interface DepositProps { strategy: StrategyInfo; // ? If you want to add more button text, you can add here // ? @dev ensure below actionType is updated accordingly buttonText: 'Deposit' | 'Redeem'; - callsInfo: (inputs: DepositActionInputs) => IStrategyActionHook[]; + callsInfo: (inputs: DepositActionInputs) => Promise; + isDualToken: boolean; +} +/** + * Information about a token amount input field + */ +export interface AmountInputInfo { + /** Whether the max button was clicked */ + isMaxClicked: boolean; + /** Raw string value entered in input field (e.g. '', '0.1') */ + rawAmount: string; + /** Converted Web3Number value for calculations and transactions */ + amount: Web3Number; + /** Token information, null if not yet selected */ + tokenInfo: TokenInfoV2 | null; } +/** + * State shape for deposit form + */ +export type DepositAtomType = { + /** Array of atoms containing input info for each token */ + inputsInfo: PrimitiveAtom[]; + // deposit/withdrawMethods can return multiple options (which are actions) + actionIndex: number; + loading?: boolean; + /** Optional callback when amounts change */ + onAmountsChange?: onStratAmountsChangeFn; +}; + +function getInputInfoAtoms() { + return [1, 2].map((i) => { + return atom({ + isMaxClicked: false, + amount: Web3Number.fromWei('0', 0), + tokenInfo: null, + rawAmount: '', + }); + }); +} +/** + * Derived atom of input infos + */ +export const inputsInfoAtoms = getInputInfoAtoms(); + +/** + * Derived atom of input infos + */ +export const inputsInfoAtom = atom((get) => { + return inputsInfoAtoms.map((i) => get(i)); +}); + +// Create deposit atom with 2 token inputs (current max supported) +export const depositAtom = atom({ + inputsInfo: inputsInfoAtoms, + actionIndex: 0, + loading: false, + onAmountsChange: undefined, +}); + +/** + * Derived atom that checks if max button was clicked for any input + */ +const isMaxClickedAtom = atom((get) => { + const inputInfos = get(inputsInfoAtom); + return inputInfos.some((a) => a.isMaxClicked); +}); + +export const updateInputInfoAtom = atom( + null, + ( + get, + set, + { index, info }: { index: number; info: Partial }, + ) => { + const inputInfo = get(inputsInfoAtoms[index]); + const newInputInfo = { ...inputInfo, ...info }; + console.log(`onAmountsChange [2]`, index, info, newInputInfo); + set(inputsInfoAtoms[index], newInputInfo); + }, +); + +export const resetDepositFormAtom = atom(null, (get, set) => { + const inputInfos = get(inputsInfoAtom); + set(depositAtom, { + inputsInfo: getInputInfoAtoms(), + actionIndex: 0, + loading: false, + onAmountsChange: undefined, + }); + inputInfos.map((item, index) => { + set(inputsInfoAtoms[index], { + ...item, + isMaxClicked: false, + rawAmount: '', + amount: Web3Number.fromWei('0', 0), + }); + }); +}); + export default function Deposit(props: DepositProps) { + return ; +} + +function InternalDeposit(props: DepositProps) { const { address } = useAccount(); - const [dirty, setDirty] = useState(false); - const [isMaxClicked, setIsMaxClicked] = useState(false); + const [callsInfo, setCallsInfo] = useState([]); + const [depositInfo, setDepositInfo] = useAtom(depositAtom); + const firstInputInfo = useAtomValue(inputsInfoAtoms[0]); + const isMaxClicked = useAtomValue(isMaxClickedAtom); + const inputsInfo = useAtomValue(inputsInfoAtom); + const resetDepositForm = useSetAtom(resetDepositFormAtom); - const tvlInfo = useAtomValue(props.strategy.tvlAtom); + useEffect(() => { + resetDepositForm(); + }, []); - // This is the selected market token - const [selectedMarket, setSelectedMarket] = useState( - props.callsInfo({ - amount: MyNumber.fromZero(), - address: address || '0x0', - provider, - isMax: isMaxClicked, - })[0].tokenInfo, - ); + // since we use a separate jotai provider, + // need to set this again here + const setAddress = useSetAtom(addressAtom); + useEffect(() => { + setAddress(address); + }, [address]); - // This is processed amount stored in MyNumber format and meant for sending tx - const [amount, setAmount] = useState( - MyNumber.fromEther('0', selectedMarket.decimals), - ); + useEffect(() => { + const amount1 = new MyNumber( + firstInputInfo.amount.toWei() || '0', + firstInputInfo.tokenInfo?.decimals || 0, + ); + let amount2: MyNumber | undefined = undefined; + if (inputsInfo[1].tokenInfo) { + amount2 = new MyNumber( + inputsInfo[1].amount.toWei() || '0', + inputsInfo[1].tokenInfo?.decimals || 0, + ); + } + console.log( + 'Deposit calls [0]', + amount1.toString(), + amount2?.toString(), + address, + firstInputInfo.tokenInfo?.decimals, + inputsInfo[1].tokenInfo?.decimals, + ); + props + .callsInfo({ + amount: amount1, + amount2, + address: address || '0x0', + provider, + isMax: isMaxClicked, + }) + .then((calls) => { + console.log('Deposit calls', calls); + setCallsInfo(calls); + setDepositInfo({ + ...depositInfo, + onAmountsChange: calls[0].onAmountsChange, + }); + }) + .catch((e) => { + console.error('Error in deposit methods', e); + }); + }, [props.callsInfo, address, inputsInfo, firstInputInfo, isMaxClicked]); // This is used to store the raw amount entered by the user - const [rawAmount, setRawAmount] = useState(''); - const isDeposit = useMemo(() => props.buttonText === 'Deposit', [props]); + const [loadingInvestmentSummary, setLoadingInvestmentSummary] = + useState(false); + const [investedSummary, setInvestedSummary] = useState( + null, + ); + useEffect(() => { + if (!callsInfo.length) { + setInvestedSummary(null); + return; + } + if (callsInfo[0].amounts.length == 1) { + setInvestedSummary(firstInputInfo.amount); + setLoadingInvestmentSummary(false); + return; + } + setLoadingInvestmentSummary(true); + const amounts: SingleActionAmount[] = inputsInfo.map((a) => { + return { + amount: a.amount, + tokenInfo: a.tokenInfo!, + }; + }); + props.strategy + .computeSummaryValue(amounts, props.strategy.settings.quoteToken) + .then((summary) => { + setInvestedSummary(summary); + setLoadingInvestmentSummary(false); + }) + .catch((e) => { + console.error('Error in computeSummaryValue', e); + setInvestedSummary(null); + setLoadingInvestmentSummary(false); + }); + }, [ + inputsInfo, + props.strategy.settings.quoteToken, + callsInfo, + firstInputInfo, + ]); + // use to maintain tx history and show toasts const txInfo: StrategyTxProps = useMemo(() => { return { strategyId: props.strategy.id, actionType: isDeposit ? 'deposit' : 'withdraw', - amount, - tokenAddr: selectedMarket.token, + amount: investedSummary + ? convertToMyNumber(investedSummary) + : MyNumber.fromZero(), + tokenAddr: props.strategy.settings.quoteToken.address.address, }; - }, [amount, props]); + }, [props]); - // Function to reset the input fields to their initial state - const resetDepositForm = () => { - setAmount(MyNumber.fromEther('0', selectedMarket.decimals)); - setRawAmount(''); - setDirty(false); - }; + useEffect(() => { + console.log('Deposit txInfo', txInfo); + }, [txInfo]); // constructs tx calls - const { calls, actions } = useMemo(() => { - const actions = props.callsInfo({ - amount, - address: address || '0x0', - provider, - isMax: isMaxClicked, - }); - const hook = actions.find((a) => a.tokenInfo.name === selectedMarket.name); - if (!hook) return { calls: [], actions }; - return { calls: hook.calls, actions }; - }, [selectedMarket, amount, address, provider, isMaxClicked]); - - const balData = useAtomValue( - actions.find((a) => a.tokenInfo.name === selectedMarket.name) - ?.balanceAtom || DUMMY_BAL_ATOM, - ); - const balance = useMemo(() => { - return balData.data?.amount || MyNumber.fromZero(); - }, [balData]); - // const { balance, isLoading, isError } = useERC20Balance(selectedMarket); - - const maxAmount: MyNumber = useMemo(() => { - const currentTVl = tvlInfo.data?.amount || MyNumber.fromZero(); - const maxAllowed = - props.buttonText == 'Deposit' && props.strategy.settings.maxTVL != 0 - ? props.strategy.settings.maxTVL - Number(currentTVl.toEtherStr()) - : Number(balance.toEtherToFixedDecimals(8)); - const adjustedMaxAllowed = MyNumber.fromEther( - maxAllowed.toFixed(6), - selectedMarket.decimals, - ); - let reducedBalance = balance; - if (props.buttonText === 'Deposit') { - if (selectedMarket.name === 'STRK') { - reducedBalance = balance.subtract( - MyNumber.fromEther('1.5', selectedMarket.decimals), - ); - } else if (selectedMarket.name === 'ETH') { - reducedBalance = balance.subtract( - MyNumber.fromEther('0.001', selectedMarket.decimals), - ); - } - } - console.log('Deposit:: reducedBalance2', reducedBalance.toEtherStr()); - const min = MyNumber.min(reducedBalance, adjustedMaxAllowed); - return MyNumber.max(min, MyNumber.fromEther('0', selectedMarket.decimals)); - }, [balance, props.strategy, selectedMarket]); + const { calls } = useMemo(() => { + const hook = callsInfo[depositInfo.actionIndex]; + if (!hook) return { calls: [] }; + return { calls: hook.calls }; + }, [address, provider, isMaxClicked, callsInfo, depositInfo]); + const tvlInfo = useAtomValue(props.strategy.tvlAtom); const isTVLFull = useMemo(() => { return ( props.strategy.settings.maxTVL != 0 && - tvlInfo.data?.amount.compare( + tvlInfo.data?.amounts[0].amount.greaterThan( props.strategy.settings.maxTVL.toFixed(6), - 'gt', ) ); }, [tvlInfo]); - useEffect(() => { - if (isMaxClicked) { - setRawAmount(maxAmount.toEtherStr()); - setAmount(maxAmount); + const canSubmit = useMemo(() => { + if (isTVLFull && isDeposit) { + return false; + } + if (depositInfo.loading) { + return false; + } + if (!investedSummary || loadingInvestmentSummary) { + return false; } - }, [maxAmount, isMaxClicked]); + // todo consider max cap of each token as well + return inputsInfo.some((a) => a.amount.greaterThan(0)); + }, [ + depositInfo, + loadingInvestmentSummary, + investedSummary, + inputsInfo, + isTVLFull, + isDeposit, + ]); - function BalanceComponent(props: { - token: TokenInfo; - strategy: StrategyInfo; - buttonText: string; - }) { - return ( - - Available balance - - - - {balance.toEtherToFixedDecimals(4)} - - - - - - ); - } return ( - - - - } - bgColor={'highlight'} - borderColor={'bg'} - borderWidth={'1px'} - color="color2" - _hover={{ - bg: 'bg', - }} - > -
- {/* */} - {balData.data && balData.data.tokenInfo - ? balData.data.tokenInfo.name - : '-'} -
-
- - {actions.map((dep) => ( - { - if (selectedMarket.name != dep.tokenInfo.name) { - setSelectedMarket(dep.tokenInfo); - setAmount(new MyNumber('0', dep.tokenInfo.decimals)); - setDirty(false); - setRawAmount(''); - } - }} - > -
- {' '} - {dep.tokenInfo.name} -
-
- ))} -
-
-
- - - -
- - {/* add min max validations and show err */} - { - if (value && Number(value) > 0) - setAmount(MyNumber.fromEther(value, selectedMarket.decimals)); - else { - setAmount(new MyNumber('0', selectedMarket.decimals)); - } - setIsMaxClicked(false); - setRawAmount(value); - setDirty(true); - mixpanel.track('Enter amount', { - strategyId: props.strategy.id, - strategyName: props.strategy.name, - buttonText: props.buttonText, - amount: amount.toEtherStr(), - token: selectedMarket.name, - maxAmount: maxAmount.toEtherStr(), - address, - }); - }} - marginTop={'10px'} - keepWithinRange={false} - clampValueOnBlur={false} - value={rawAmount} - isDisabled={maxAmount.isZero()} - > - - - - - - - {amount.isZero() && dirty && ( - - Require amount {'>'} 0 - - )} - {amount.compare(maxAmount.toEtherStr(), 'gt') && ( - - Amount to be less than {maxAmount.toEtherToFixedDecimals(2)} - - )} + + {/* // todo wont work with multiple token options for now */} + {callsInfo.length && + callsInfo[0].amounts.map((inputAmtInfo, index) => { + return ( + c.amounts[index].tokenInfo, + )} + /> + ); + })} +
@@ -364,11 +353,13 @@ export default function Deposit(props: DepositProps) { {!tvlInfo || !tvlInfo?.data ? ( ) : ( - Number(tvlInfo.data?.amount.toFixedStr(2)).toLocaleString() + Number( + tvlInfo.data?.amounts[0].amount.toFixed(2), + ).toLocaleString() )} {' / '} {props.strategy.settings.maxTVL.toLocaleString()}{' '} - {selectedMarket.name} + {inputsInfo[0].tokenInfo?.symbol} = ({ strategy, balData }) => { return strategyInfo.leverage || 0; }, [strategyInfo]); + const defaultAPYTooltip = + 'Current APY including any fees. Net returns subject to change based on market conditions.'; return ( - + - - {pool.pool.logos.map((logo) => ( - + + {pool.pool.logos.map((logo, index) => ( + ))} @@ -235,8 +235,8 @@ export function getStrategyWiseHoldingsInfo( } return { usdValue: amount.usdValue, - amount: Number(amount.amount), - tokenInfo: amount.tokenInfo, + amount: Number(amount.holdings[0].amount), + tokenInfo: amount.holdings[0].tokenInfo, }; } diff --git a/src/constants.ts b/src/constants.ts index adc19460..47bbe3d6 100755 --- a/src/constants.ts +++ b/src/constants.ts @@ -56,8 +56,8 @@ export const CONSTANTS = { BASE_APR_API: '/haiko/markets?network=mainnet', }, STRKFarm: { - // BASE_APR_API: '/api/strategies', - BASE_APR_API: 'https://app.strkfarm.com/api/strategies', + BASE_APR_API: '/api/strategies', + // BASE_APR_API: 'https://app.strkfarm.com/api/strategies', }, MY_SWAP: { POOLS_API: '/myswap/data/pools/all.json', diff --git a/src/store/balance.atoms.ts b/src/store/balance.atoms.ts index 5b966af3..48f00544 100755 --- a/src/store/balance.atoms.ts +++ b/src/store/balance.atoms.ts @@ -20,7 +20,7 @@ export interface BalanceResult { tokenInfo: TokenInfo | undefined; } -function returnEmptyBal(): BalanceResult { +export function returnEmptyBal(): BalanceResult { return { amount: MyNumber.fromZero(), tokenInfo: undefined, @@ -31,6 +31,7 @@ export async function getERC20Balance( token: TokenInfo | undefined, address: string | undefined, ) { + console.log('getERC20Balance', token?.token, address); if (!token) return returnEmptyBal(); if (!address) return returnEmptyBal(); @@ -39,7 +40,6 @@ export async function getERC20Balance( }); const erc20Contract = new Contract(ERC20Abi, token.token, provider); const balance = await erc20Contract.call('balanceOf', [address]); - console.log('erc20 balData', token.token, balance.toString()); return { amount: new MyNumber(balance.toString(), token.decimals), tokenInfo: token, @@ -50,7 +50,6 @@ export async function getERC4626Balance( token: TokenInfo | undefined, address: string | undefined, ) { - console.log('balData isERC4626', token?.token); if (!token) return returnEmptyBal(); if (!address) return returnEmptyBal(); @@ -64,12 +63,6 @@ export async function getERC4626Balance( ]); const asset = await erc4626Contract.call('asset', []); - console.log( - 'erc4626 balData', - token.token, - balance, - standariseAddress(asset as string), - ); const assetInfo = getTokenInfoFromAddr(standariseAddress(asset as string)); if (!assetInfo) { throw new Error('ERC4626: Asset not found'); @@ -108,7 +101,6 @@ export async function getERC721PositionValue( const tokenId = num.getDecimalString(address); result = await erc721Contract.call('describe_position', [tokenId]); } - console.log('erc721 position balData', token.address, result); const tokenInfo = getTokenInfoFromName(token.config.mainTokenName); return { amount: new MyNumber( @@ -122,7 +114,7 @@ export async function getERC721PositionValue( export function getERC20BalanceAtom(token: TokenInfo | undefined) { return atomWithQuery((get) => { return { - queryKey: ['getERC20Balance', token?.token], + queryKey: ['getERC20Balance', token?.token, get(addressAtom)], queryFn: async ({ queryKey }: any): Promise => { return getERC20Balance(token, get(addressAtom)); }, @@ -148,11 +140,9 @@ function getERC721PositionValueAtom(token: NFTInfo | undefined) { return { queryKey: ['getERC721PositionValue', token?.address], queryFn: async ({ queryKey }: any): Promise => { - console.log('getERC721PositionValueAtom', token); try { return await getERC721PositionValue(token, get(addressAtom)); } catch (e) { - console.error('getERC721PositionValueAtome', e); return returnEmptyBal(); } }, @@ -166,10 +156,8 @@ export async function getBalance( address: string, ) { if (token) { - console.log('token getBalance', token); if (Object.prototype.hasOwnProperty.call(token, 'isERC4626')) { const _token = token; - console.log('token getBalance isERC4626', _token.isERC4626); if (_token.isERC4626) return getERC4626Balance(_token, address); } else { const _token = token; @@ -187,10 +175,8 @@ export function getBalanceAtom( enabledAtom: Atom, ) { if (token) { - console.log('token getBalanceAtom', token); if (Object.prototype.hasOwnProperty.call(token, 'isERC4626')) { const _token = token; - console.log('token getBalanceAtom isERC4626', _token.isERC4626); if (_token.isERC4626) return getERC4626BalanceAtom(_token); } else { const _token = token; diff --git a/src/store/endur.store.ts b/src/store/endur.store.ts index bad2f41b..734d1590 100644 --- a/src/store/endur.store.ts +++ b/src/store/endur.store.ts @@ -1,15 +1,8 @@ import { atom } from 'jotai'; -import RewardsAbi from '@/abi/rewards.abi.json'; - -import CONSTANTS, { provider } from '@/constants'; -import { AutoXSTRKStrategy } from '@/strategies/auto_xstrk.strat'; import { StrategyLiveStatus } from '@/strategies/IStrategy'; import { getTokenInfoFromName } from '@/utils'; import { customAtomWithFetch } from '@/utils/customAtomWithFetch'; -import { customAtomWithQuery } from '@/utils/customAtomWithQuery'; -import MyNumber from '@/utils/MyNumber'; -import { Contract } from 'starknet'; import { IDapp } from './IDapp.store'; import { Category, PoolInfo, PoolType } from './pools'; @@ -41,40 +34,6 @@ const EndurAtoms = { url: 'https://app.endur.fi/api/stats', queryKey: 'Endur_stats', }), - rewardInfo: customAtomWithQuery({ - queryKey: 'Endur_reward', - queryFn: async () => { - const REWARDS_CONTRACT = - '0x3065fe1dacfaa108a764a9db51d9a5d1cbe7e23a8a9c9e13f12c291da1c1dbb'; - const contract = new Contract(RewardsAbi, REWARDS_CONTRACT, provider); - const data: any = await contract.call('get_config', []); - - const autoxSTRK = new AutoXSTRKStrategy( - 'autoxstrk', - 'autoxstrk', - CONSTANTS.CONTRACTS.AutoxSTRKFarm, - { - maxTVL: 2000000, - }, - ); - const STRK = getTokenInfoFromName('STRK'); - const rewardsPerSecond = new MyNumber( - data.rewards_per_second.toString(), - STRK.decimals, - ); - const tvl = await autoxSTRK.getTVL(); - - const apy = - Number( - rewardsPerSecond - .operate('mul', 365 * 24 * 60 * 60) - .toEtherToFixedDecimals(2), - ) / Number(tvl.amount.toEtherToFixedDecimals(2)); - const fee = 0.15; - const netApy = apy * (1 - fee); - return netApy; - }, - }), pools: atom((get) => { const empty: PoolInfo[] = []; const stats = get(EndurAtoms.endurStats); diff --git a/src/store/protocols.ts b/src/store/protocols.ts index 568fa3d4..939c4117 100644 --- a/src/store/protocols.ts +++ b/src/store/protocols.ts @@ -10,15 +10,15 @@ import NostraDegenAtoms, { nostraDegen } from './nostradegen.store'; import NostraDexAtoms, { nostraDex } from './nostradex.store'; import NostraLendingAtoms, { nostraLending } from './nostralending.store'; import { Category, isPoolRetired, PoolInfo, PoolType } from './pools'; -import { getLiveStatusEnum } from './strategies.atoms'; import STRKFarmAtoms, { strkfarm, STRKFarmStrategyAPIResult, } from './strkfarm.atoms'; import VesuAtoms, { vesu } from './vesu.store'; import ZkLendAtoms, { zkLend } from './zklend.store'; +import { getLiveStatusEnum } from '@/strategies/IStrategy'; -export const PROTOCOLS = [ +export const getProtocols = () => [ { name: endur.name, class: endur, @@ -103,16 +103,19 @@ export const PROTOCOLS = [ export const ALL_FILTER = 'All'; -const allProtocols = PROTOCOLS.map((p) => ({ - name: p.name, - logo: p.class.logo, -})); +const allProtocols = () => { + return getProtocols().map((p) => ({ + name: p.name, + logo: p.class.logo, + })); +}; export const filters = { categories: [...Object.values(Category)], types: [...Object.values(PoolType)], - protocols: allProtocols.filter( - (p, index) => allProtocols.findIndex((_p) => _p.name === p.name) === index, + protocols: allProtocols().filter( + (p, index) => + allProtocols().findIndex((_p) => _p.name === p.name) === index, ), }; @@ -167,7 +170,7 @@ export const privatePoolsAtom = atom((get) => { export const allPoolsAtomUnSorted = atom((get) => { const pools: PoolInfo[] = []; - return PROTOCOLS.reduce( + return getProtocols().reduce( (_pools, p) => _pools.concat(get(p.atoms.pools)), pools, ); @@ -188,7 +191,7 @@ export function getPoolInfoFromStrategy( pool: { id: strat.id, name: strat.name, - logos: [strat.logo], + logos: [...strat.logos], }, protocol: { name: 'STRKFarm', diff --git a/src/store/strategies.atoms.tsx b/src/store/strategies.atoms.tsx index 2b7bb056..70335662 100755 --- a/src/store/strategies.atoms.tsx +++ b/src/store/strategies.atoms.tsx @@ -6,18 +6,19 @@ import { } from '@/strategies/IStrategy'; import CONSTANTS from '@/constants'; import Mustache from 'mustache'; -import { getTokenInfoFromName } from '@/utils'; +import { convertToV2TokenInfo, getTokenInfoFromName } from '@/utils'; import { allPoolsAtomUnSorted, privatePoolsAtom } from './protocols'; -import EndurAtoms, { endur } from './endur.store'; -import { getDefaultPoolInfo, PoolInfo } from './pools'; +import { endur } from './endur.store'; +import { PoolInfo } from './pools'; import { AutoTokenStrategy } from '@/strategies/auto_strk.strat'; import { DeltaNeutralMM } from '@/strategies/delta_neutral_mm'; import { DeltaNeutralMM2 } from '@/strategies/delta_neutral_mm_2'; import { DeltaNeutralMMVesuEndur } from '@/strategies/delta_neutral_mm_vesu_endur'; import { Box, Link } from '@chakra-ui/react'; -import { VesuRebalanceStrategies } from '@strkfarm/sdk'; +import { EkuboCLVaultStrategies, VesuRebalanceStrategies } from '@strkfarm/sdk'; import { VesuRebalanceStrategy } from '@/strategies/vesu_rebalance'; import { atomWithQuery } from 'jotai-tanstack-query'; +import { EkuboClStrategy } from '@/strategies/ekubo_cl_vault'; export interface StrategyInfo extends IStrategyProps { name: string; @@ -73,6 +74,7 @@ export function getStrategies() { isAudited: true, isPaused: false, alerts: alerts2, + quoteToken: convertToV2TokenInfo(getTokenInfoFromName('STRK')), }, ); const autoUSDCStrategy = new AutoTokenStrategy( @@ -86,6 +88,7 @@ export function getStrategies() { isAudited: true, isPaused: false, alerts: alerts2, + quoteToken: convertToV2TokenInfo(getTokenInfoFromName('USDC')), }, ); @@ -124,6 +127,7 @@ export function getStrategies() { isAudited: true, alerts, isPaused: true, + quoteToken: convertToV2TokenInfo(getTokenInfoFromName('USDC')), }, ); @@ -140,6 +144,7 @@ export function getStrategies() { alerts, isAudited: true, isPaused: true, + quoteToken: convertToV2TokenInfo(getTokenInfoFromName('ETH')), }, ); const deltaNeutralMMSTRKETH = new DeltaNeutralMM( @@ -155,6 +160,7 @@ export function getStrategies() { isAudited: true, alerts, isPaused: true, + quoteToken: convertToV2TokenInfo(getTokenInfoFromName('STRK')), }, ); @@ -171,6 +177,7 @@ export function getStrategies() { alerts, isAudited: false, isPaused: true, + quoteToken: convertToV2TokenInfo(getTokenInfoFromName('ETH')), }, ); @@ -203,12 +210,13 @@ export function getStrategies() { }, ], isAudited: false, + quoteToken: convertToV2TokenInfo(getTokenInfoFromName('STRK')), }, ); const vesuRebalanceStrats = VesuRebalanceStrategies.map((v) => { return new VesuRebalanceStrategy( - getTokenInfoFromName(v.depositTokens[0].symbol), + getTokenInfoFromName(v.depositTokens[0]?.symbol || ''), v.name, v.description, v, @@ -225,6 +233,34 @@ export function getStrategies() { tab: 'all', }, ], + quoteToken: convertToV2TokenInfo( + getTokenInfoFromName(v.depositTokens[0]?.symbol || ''), + ), + }, + ); + }); + + const ekuboCLStrats = EkuboCLVaultStrategies.map((v) => { + return new EkuboClStrategy( + v.name, + v.description, + v, + StrategyLiveStatus.HOT, + { + maxTVL: 0, + isAudited: v.auditUrl ? true : false, + auditUrl: v.auditUrl, + isPaused: false, + alerts: [ + { + type: 'info', + text: 'Depending on the current position range and price, your input amounts are automatially adjusted to nearest required amounts', + tab: 'all', + }, + ], + quoteToken: convertToV2TokenInfo( + getTokenInfoFromName(v.depositTokens[1]?.symbol || ''), + ), }, ); }); @@ -240,6 +276,7 @@ export function getStrategies() { // }, // ); + // undo const strategies: IStrategy[] = [ autoStrkStrategy, autoUSDCStrategy, @@ -249,6 +286,7 @@ export function getStrategies() { deltaNeutralMMETHUSDCReverse, deltaNeutralxSTRKSTRK, ...vesuRebalanceStrats, + ...ekuboCLStrats, // xSTRKStrategy, ]; @@ -260,17 +298,8 @@ export const STRATEGIES_INFO = getStrategies(); export const getPrivatePools = (get: any) => { // A placeholder to fetch any external pools/rewards info // that is not necessarily available in the allPools (i.e. not public) - const endurRewardInfo = get(EndurAtoms.rewardInfo); - const endurRewardPoolInfo = getDefaultPoolInfo(); - endurRewardPoolInfo.pool.id = 'endur_strk_reward'; - endurRewardPoolInfo.protocol.name = endur.name; - endurRewardPoolInfo.protocol.link = endur.link; - endurRewardPoolInfo.protocol.logo = endur.logo; - endurRewardPoolInfo.pool.name = 'STRK'; - endurRewardPoolInfo.pool.logos = [getTokenInfoFromName('STRK').logo]; - endurRewardPoolInfo.apr = endurRewardInfo.data || 0; - return [endurRewardPoolInfo]; + return []; }; const strategiesAtomAsync = atomWithQuery((get) => { @@ -325,17 +354,3 @@ export function getLiveStatusNumber(status: StrategyLiveStatus) { } return 5; } - -export function getLiveStatusEnum(status: number) { - if (status == 1) { - return StrategyLiveStatus.HOT; - } - if (status == 2) { - return StrategyLiveStatus.NEW; - } else if (status == 3) { - return StrategyLiveStatus.ACTIVE; - } else if (status == 4) { - return StrategyLiveStatus.COMING_SOON; - } - return StrategyLiveStatus.RETIRED; -} diff --git a/src/store/strkfarm.atoms.ts b/src/store/strkfarm.atoms.ts index 9901e676..68c3ec5f 100644 --- a/src/store/strkfarm.atoms.ts +++ b/src/store/strkfarm.atoms.ts @@ -12,8 +12,8 @@ import { PoolType, ProtocolAtoms, } from './pools'; -import { getLiveStatusEnum } from './strategies.atoms'; import { IInvestmentFlow } from '@strkfarm/sdk'; +import { getLiveStatusEnum } from '@/strategies/IStrategy'; export interface STRKFarmStrategyAPIResult { name: string; @@ -28,7 +28,7 @@ export interface STRKFarmStrategyAPIResult { value: string; }; riskFactor: number; - logo: string; + logos: string[]; isAudited: boolean; auditUrl?: string; actions: { @@ -67,7 +67,7 @@ export class STRKFarm extends IDapp { pool: { id: rawPool.id, name: poolName, - logos: [rawPool.logo], + logos: [...rawPool.logos], }, protocol: { name: this.name, @@ -94,6 +94,7 @@ export class STRKFarm extends IDapp { is_promoted: poolName.includes('Stake'), }, }; + console.log('rawPool', poolName, poolInfo); return poolInfo; }); } diff --git a/src/store/transactions.atom.ts b/src/store/transactions.atom.ts index 81a44faf..18706ac1 100755 --- a/src/store/transactions.atom.ts +++ b/src/store/transactions.atom.ts @@ -187,11 +187,14 @@ async function waitForTransaction( set(transactionsAtom, txs); let newTxs = get(newTxsAtom); + console.log('waitForTransaction newTxs', newTxs); const txExists = newTxs.find( (t) => t.txHash.toLowerCase() === tx.txHash.toLowerCase(), ); + console.log('waitForTransaction txExists', txExists); if (!txExists) { newTxs = [...newTxs, tx]; + console.log('waitForTransaction newTxs2', newTxs); set(newTxsAtom, newTxs); } } @@ -240,6 +243,8 @@ async function isTxAccepted(txHash: string) { } async function initToast(tx: TransactionInfo, get: Getter, set: Setter) { + console.log('Deposit txInfo 2', tx, tx.info.amount.toEtherStr()); + const msg = StrategyTxPropsToMessage(tx.info, get); await toast.promise( waitForTransaction(tx, get, set), diff --git a/src/store/utils.atoms.ts b/src/store/utils.atoms.ts index 12faccf9..9d9db431 100755 --- a/src/store/utils.atoms.ts +++ b/src/store/utils.atoms.ts @@ -3,6 +3,7 @@ import { atomWithQuery } from 'jotai-tanstack-query'; import { atomWithStorage, createJSONStorage } from 'jotai/utils'; import { addressAtom } from './claims.atoms'; import fetchWithRetry from '@/utils/fetchWithRetry'; +import { SingleTokenInfo } from '@strkfarm/sdk'; export interface BlockInfo { data: { @@ -85,17 +86,10 @@ export const dAppStatsAtom = atomWithQuery((get) => ({ }, })); -interface StrategyWise { +export interface StrategyWise { id: string; usdValue: number; - amount: string; - tokenInfo: { - name: string; - symbol: string; - logo: string; - decimals: number; - displayDecimals: number; - }; + holdings: SingleTokenInfo[]; } export interface UserStats { diff --git a/src/strategies/IStrategy.ts b/src/strategies/IStrategy.ts index c0d2cc57..4cb08552 100755 --- a/src/strategies/IStrategy.ts +++ b/src/strategies/IStrategy.ts @@ -1,11 +1,28 @@ import { IDapp } from '@/store/IDapp.store'; -import { BalanceResult, getBalanceAtom } from '@/store/balance.atoms'; +import { + BalanceResult, + getBalanceAtom, + returnEmptyBal, +} from '@/store/balance.atoms'; import { IndexedPoolData } from '@/store/endur.store'; import { LendingSpace } from '@/store/lending.base'; import { Category, PoolInfo } from '@/store/pools'; import { zkLend } from '@/store/zklend.store'; +import { + convertToV2TokenInfo, + convertToV2Web3Number, + getPrice, + MyTokenInfo, + MyWeb3Number, +} from '@/utils'; import MyNumber from '@/utils/MyNumber'; -import { IInvestmentFlow, IStrategyMetadata } from '@strkfarm/sdk'; +import { + IInvestmentFlow, + IStrategyMetadata, + SingleActionAmount, + TokenInfo as TokenInfoV2, + Web3Number, +} from '@strkfarm/sdk'; import { Atom, atom } from 'jotai'; import { AtomWithQueryResult, atomWithQuery } from 'jotai-tanstack-query'; import { ReactNode } from 'react'; @@ -69,10 +86,24 @@ export enum StrategyLiveStatus { HOT = 'Hot & New 🔥', } +export type onStratAmountsChangeFn = ( + change: { + amountInfo: SingleActionAmount; + index: number; + }, + allAmounts: SingleActionAmount[], +) => Promise; + export interface IStrategyActionHook { - tokenInfo: TokenInfo; calls: Call[]; - balanceAtom: Atom>; + amounts: { + tokenInfo: TokenInfoV2; + balanceAtom: Atom>; + }[]; + + // if strategy wants to relate different input amounts, + // config this fn + onAmountsChange?: onStratAmountsChangeFn; } export interface IStrategySettings { @@ -87,16 +118,23 @@ export interface IStrategySettings { isAudited?: boolean; auditUrl?: string; isPaused?: boolean; + quoteToken: TokenInfoV2; // used to show the holdings in this token } export interface AmountInfo { - amount: MyNumber; + amount: Web3Number; usdValue: number; - tokenInfo: TokenInfo; + tokenInfo: TokenInfoV2; +} + +export interface AmountsInfo { + usdValue: number; + amounts: AmountInfo[]; } export interface DepositActionInputs { amount: MyNumber; + amount2?: MyNumber; // used in dual token deposits address: string; provider: ProviderInterface; isMax: boolean; @@ -130,13 +168,19 @@ export class IStrategyProps { leverage: number = 0; fee_factor = 0; // in absolute terms, not % status = StrategyStatus.UNINTIALISED; + isSingleTokenDepositView = true; readonly rewardTokens: { logo: string }[]; readonly holdingTokens: (TokenInfo | NFTInfo)[]; balEnabled = atom(false); - readonly balanceAtom: Atom>; - readonly tvlAtom: Atom>; + // summary of balance in some quote token + // as required by the strategy + balanceSummaryAtom: Atom>; + // a strategy can have multiple balance tokens, this is for that + balanceAtoms: Atom>[] = []; + balancesAtom: Atom; + readonly tvlAtom: Atom>; riskFactor: number = 5; risks: string[] = [ @@ -151,19 +195,23 @@ export class IStrategyProps { return `Risk factor: ${this.riskFactor}/5 (${factorLevel} risk)`; } - depositMethods = (inputs: DepositActionInputs): IStrategyActionHook[] => { + depositMethods = async ( + inputs: DepositActionInputs, + ): Promise => { return []; }; - withdrawMethods = (inputs: WithdrawActionInputs): IStrategyActionHook[] => { + withdrawMethods = async ( + inputs: WithdrawActionInputs, + ): Promise => { return []; }; - getTVL = async (): Promise => { + getTVL = async (): Promise => { throw new Error('getTVL: Not implemented'); }; - getUserTVL = async (user: string): Promise => { + getUserTVL = async (user: string): Promise => { throw new Error('getTVL: Not implemented'); }; @@ -184,26 +232,87 @@ export class IStrategyProps { liveStatus: StrategyLiveStatus, settings: IStrategySettings, metadata: IStrategyMetadata, + balanceAtom?: Atom>, ) { this.id = id; this.name = name; this.description = description; this.rewardTokens = rewardTokens; this.holdingTokens = holdingTokens; - console.log('calling getBalanceAtom', id, holdingTokens[0]); - this.balanceAtom = getBalanceAtom(holdingTokens[0], this.balEnabled); + this.balanceSummaryAtom = + balanceAtom || getBalanceAtom(holdingTokens[0], this.balEnabled); this.liveStatus = liveStatus; this.settings = settings; this.metadata = metadata; this.tvlAtom = atomWithQuery((get) => { return { queryKey: ['tvl', this.id], - queryFn: async ({ queryKey }: any): Promise => { + queryFn: async ({ queryKey }: any): Promise => { return this.getTVL(); }, refetchInterval: 15000, }; }); + this.balancesAtom = this.getBalancesAtom(); + } + + getBalancesAtom() { + return atom((get) => { + return this.balanceAtoms.map((atom) => { + const res = get(atom); + if (!res.data) { + return returnEmptyBal(); + } + return res.data; + }); + }); + } + + async computeSummaryValue( + amounts: SingleActionAmount[], + quoteToken: MyTokenInfo, + ): Promise { + const valuesProm = amounts.map((amount) => { + return this.getValueInQuoteToken( + convertToV2Web3Number(amount.amount), + convertToV2TokenInfo(amount.tokenInfo), + quoteToken, + ); + }); + const values = await Promise.all(valuesProm); + const total = values.reduce( + (acc, amount) => { + return acc.plus(amount); + }, + Web3Number.fromWei('0', quoteToken.decimals), + ); + return total; + } + + async getValueInQuoteToken( + amount: MyWeb3Number, + tokenInfo: MyTokenInfo, + quoteToken: MyTokenInfo, + ): Promise { + if (tokenInfo.address.eq(quoteToken.address)) { + return amount; + } + + const price = await getPrice(tokenInfo); + const priceQuote = await getPrice(quoteToken); + + const amt = amount.multipliedBy(price).dividedBy(priceQuote); + + // adjust decimals + const decimals = tokenInfo.decimals; + const quoteDecimals = quoteToken.decimals; + if (decimals > quoteDecimals) { + return amt.dividedBy(10 ** (decimals - quoteDecimals)); + } + if (decimals < quoteDecimals) { + return amt.multipliedBy(10 ** (quoteDecimals - decimals)); + } + return amt; } } @@ -220,6 +329,7 @@ export class IStrategy extends IStrategyProps { liveStatus = StrategyLiveStatus.ACTIVE, settings: IStrategySettings, metadata: IStrategyMetadata, + balanceAtom?: Atom>, ) { super( id, @@ -230,6 +340,7 @@ export class IStrategy extends IStrategyProps { liveStatus, settings, metadata, + balanceAtom, ); this.tag = tag; } @@ -390,3 +501,17 @@ export class IStrategy extends IStrategyProps { return this.status === StrategyStatus.SOLVING; } } + +export function getLiveStatusEnum(status: number) { + if (status == 1) { + return StrategyLiveStatus.HOT; + } + if (status == 2) { + return StrategyLiveStatus.NEW; + } else if (status == 3) { + return StrategyLiveStatus.ACTIVE; + } else if (status == 4) { + return StrategyLiveStatus.COMING_SOON; + } + return StrategyLiveStatus.RETIRED; +} diff --git a/src/strategies/auto_strk.strat.ts b/src/strategies/auto_strk.strat.ts index 35f3f576..f1377d09 100755 --- a/src/strategies/auto_strk.strat.ts +++ b/src/strategies/auto_strk.strat.ts @@ -12,17 +12,16 @@ import { import ERC20Abi from '@/abi/erc20.abi.json'; import AutoStrkAbi from '@/abi/autoStrk.abi.json'; import MasterAbi from '@/abi/master.abi.json'; -import MyNumber from '@/utils/MyNumber'; import { Contract, uint256 } from 'starknet'; -import { atom } from 'jotai'; +import { getBalance, getERC20Balance } from '@/store/balance.atoms'; import { - DUMMY_BAL_ATOM, - getBalance, - getBalanceAtom, - getERC20Balance, - getERC20BalanceAtom, -} from '@/store/balance.atoms'; -import { getPrice, getTokenInfoFromName } from '@/utils'; + buildStrategyActionHook, + convertToV2TokenInfo, + DummyStrategyActionHook, + getPrice, + getTokenInfoFromName, + ZeroAmountsInfo, +} from '@/utils'; import { zkLend } from '@/store/zklend.store'; import { ContractAddr, IStrategyMetadata, Web3Number } from '@strkfarm/sdk'; @@ -73,6 +72,7 @@ export class AutoTokenStrategy extends IStrategy { decimals: tokenInfo.decimals, address: ContractAddr.from(tokenInfo.token), logo: '', + displayDecimals: tokenInfo.displayDecimals, }, ], protocols: [], @@ -147,45 +147,50 @@ export class AutoTokenStrategy extends IStrategy { getUserTVL = async (user: string) => { if (this.liveStatus == StrategyLiveStatus.COMING_SOON) - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + return ZeroAmountsInfo([this.token]); // returns zToken const balanceInfo = await getBalance(this.holdingTokens[0], user); if (!balanceInfo.tokenInfo) { - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + return ZeroAmountsInfo([this.token]); } const price = await getPrice(this.token); console.log('getUserTVL autoc', price, balanceInfo.amount.toEtherStr()); + const usdValue = Number(balanceInfo.amount.toEtherStr()) * price; return { - amount: balanceInfo.amount, - usdValue: Number(balanceInfo.amount.toEtherStr()) * price, - tokenInfo: balanceInfo.tokenInfo, + usdValue, + amounts: [ + { + amount: Web3Number.fromWei( + balanceInfo.amount.toString(), + balanceInfo.tokenInfo.decimals, + ), + usdValue: Number(balanceInfo.amount.toEtherStr()) * price, + tokenInfo: convertToV2TokenInfo(balanceInfo.tokenInfo), + }, + ], }; }; getTVL = async () => { - if (!this.isLive()) - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + if (!this.isLive()) return ZeroAmountsInfo([this.token]); const zTokenInfo = getTokenInfoFromName(this.lpTokenName); const bal = await getERC20Balance(zTokenInfo, this.strategyAddress); const price = await getPrice(this.token); + const usdValue = Number(bal.amount.toEtherStr()) * price; return { - amount: bal.amount, - usdValue: Number(bal.amount.toEtherStr()) * price, - tokenInfo: this.token, + usdValue, + amounts: [ + { + amount: Web3Number.fromWei( + bal.amount.toString(), + bal.amount.decimals, + ), + usdValue: Number(bal.amount.toEtherStr()) * price, + tokenInfo: convertToV2TokenInfo(this.token), + }, + ], }; }; @@ -195,7 +200,7 @@ export class AutoTokenStrategy extends IStrategy { // this.leverage = this.netYield / normalYield; // } - depositMethods = (inputs: DepositActionInputs) => { + depositMethods = async (inputs: DepositActionInputs) => { const { amount, address, provider } = inputs; const baseTokenInfo: TokenInfo = TOKENS.find( (t) => t.name == this.token.name, @@ -206,16 +211,8 @@ export class AutoTokenStrategy extends IStrategy { if (!address || address == '0x0') { return [ - { - tokenInfo: baseTokenInfo, - calls: [], - balanceAtom: DUMMY_BAL_ATOM, - }, - { - tokenInfo: zTokenInfo, - calls: [], - balanceAtom: DUMMY_BAL_ATOM, - }, + DummyStrategyActionHook([baseTokenInfo]), + DummyStrategyActionHook([zTokenInfo]), ]; } @@ -261,33 +258,19 @@ export class AutoTokenStrategy extends IStrategy { const calls2 = [call21, call22]; return [ - { - tokenInfo: baseTokenInfo, - calls: calls1, - balanceAtom: getBalanceAtom(baseTokenInfo, atom(true)), - }, - { - tokenInfo: zTokenInfo, - calls: calls2, - balanceAtom: getBalanceAtom(zTokenInfo, atom(true)), - }, + buildStrategyActionHook(calls1, [baseTokenInfo]), + buildStrategyActionHook(calls2, [zTokenInfo]), ]; }; - withdrawMethods = (inputs: WithdrawActionInputs) => { + withdrawMethods = async (inputs: WithdrawActionInputs) => { const { amount, address, provider } = inputs; const frmToken: TokenInfo = TOKENS.find( (t) => t.token == this.strategyAddress, ) as TokenInfo; if (!address || address == '0x0') { - return [ - { - tokenInfo: frmToken, - calls: [], - balanceAtom: DUMMY_BAL_ATOM, - }, - ]; + return [DummyStrategyActionHook([frmToken])]; } // const baseTokenContract = new Contract(ERC20Abi, baseTokenInfo.token, provider); @@ -316,12 +299,6 @@ export class AutoTokenStrategy extends IStrategy { const calls = [call1, call2]; - return [ - { - tokenInfo: frmToken, - calls, - balanceAtom: getERC20BalanceAtom(frmToken), - }, - ]; + return [buildStrategyActionHook(calls, [frmToken])]; }; } diff --git a/src/strategies/auto_xstrk.strat.ts b/src/strategies/auto_xstrk.strat.ts index 1266f459..e3950f3a 100644 --- a/src/strategies/auto_xstrk.strat.ts +++ b/src/strategies/auto_xstrk.strat.ts @@ -1,6 +1,7 @@ import CONSTANTS, { TOKENS, provider } from '@/constants'; import { PoolInfo } from '@/store/pools'; import { + AmountsInfo, DepositActionInputs, IStrategy, IStrategySettings, @@ -14,14 +15,15 @@ import AutoStrkAbi from '@/abi/autoStrk.abi.json'; import MasterAbi from '@/abi/master.abi.json'; import MyNumber from '@/utils/MyNumber'; import { Contract, num, uint256 } from 'starknet'; -import { atom } from 'jotai'; +import { getBalance } from '@/store/balance.atoms'; import { - DUMMY_BAL_ATOM, - getBalance, - getBalanceAtom, - getERC20BalanceAtom, -} from '@/store/balance.atoms'; -import { getPrice, getTokenInfoFromName } from '@/utils'; + buildStrategyActionHook, + convertToV2TokenInfo, + DummyStrategyActionHook, + getPrice, + getTokenInfoFromName, + ZeroAmountsInfo, +} from '@/utils'; import { endur } from '@/store/endur.store'; import { ContractAddr, IStrategyMetadata, Web3Number } from '@strkfarm/sdk'; @@ -69,6 +71,7 @@ export class AutoXSTRKStrategy extends IStrategy { decimals: tokenInfo.decimals, address: ContractAddr.from(tokenInfo.token), logo: '', + displayDecimals: tokenInfo.displayDecimals, }, ], protocols: [], @@ -165,37 +168,33 @@ export class AutoXSTRKStrategy extends IStrategy { getUserTVL = async (user: string) => { if (this.liveStatus == StrategyLiveStatus.COMING_SOON) - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + return ZeroAmountsInfo([this.token]); // returns zToken const balanceInfo = await getBalance(this.holdingTokens[0], user); if (!balanceInfo.tokenInfo) { - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + return ZeroAmountsInfo([this.token]); } const price = await getPrice(this.token); console.log('getUserTVL autoc', price, balanceInfo.amount.toEtherStr()); + const usdValue = Number(balanceInfo.amount.toEtherStr()) * price; return { - amount: balanceInfo.amount, - usdValue: Number(balanceInfo.amount.toEtherStr()) * price, - tokenInfo: balanceInfo.tokenInfo, + usdValue, + amounts: [ + { + amount: Web3Number.fromWei( + balanceInfo.amount.toString(), + balanceInfo.tokenInfo.decimals, + ), + usdValue: Number(balanceInfo.amount.toEtherStr()) * price, + tokenInfo: convertToV2TokenInfo(balanceInfo.tokenInfo), + }, + ], }; }; - getTVL = async () => { - if (!this.isLive()) - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + getTVL = async (): Promise => { + if (!this.isLive()) return ZeroAmountsInfo([this.token]); const strategyContract = new Contract( AutoStrkAbi, @@ -217,10 +216,19 @@ export class AutoXSTRKStrategy extends IStrategy { STRKINfo.decimals, ); const price = await getPrice(this.token); + const usdValue = Number(totalAssets.toEtherStr()) * price; return { - amount: totalAssets, - usdValue: Number(totalAssets.toEtherStr()) * price, - tokenInfo: STRKINfo, + usdValue, + amounts: [ + { + amount: Web3Number.fromWei( + totalAssets.toString(), + totalAssets.decimals, + ), + usdValue: Number(totalAssets.toEtherStr()) * price, + tokenInfo: convertToV2TokenInfo(STRKINfo), + }, + ], }; } else if (isxSTRK) { const xSTRKTotalAssets = new MyNumber( @@ -241,16 +249,25 @@ export class AutoXSTRKStrategy extends IStrategy { STRKINfo.decimals, ); const price = await getPrice(this.token); + const usdValue = Number(strkAmount.toEtherStr()) * price; return { - amount: strkAmount, - usdValue: Number(strkAmount.toEtherStr()) * price, - tokenInfo: STRKINfo, + usdValue, + amounts: [ + { + amount: Web3Number.fromWei( + strkAmount.toString(), + strkAmount.decimals, + ), + usdValue: Number(strkAmount.toEtherStr()) * price, + tokenInfo: convertToV2TokenInfo(STRKINfo), + }, + ], }; } throw new Error(`getTVL asset not STRK or xSTRK`); }; - depositMethods = (inputs: DepositActionInputs) => { + depositMethods = async (inputs: DepositActionInputs) => { const { amount, address, provider } = inputs; const baseTokenInfo: TokenInfo = TOKENS.find( (t) => t.name == this.token.name, @@ -261,16 +278,8 @@ export class AutoXSTRKStrategy extends IStrategy { if (!address || address == '0x0') { return [ - { - tokenInfo: baseTokenInfo, - calls: [], - balanceAtom: DUMMY_BAL_ATOM, - }, - { - tokenInfo: xTokenInfo, - calls: [], - balanceAtom: DUMMY_BAL_ATOM, - }, + DummyStrategyActionHook([baseTokenInfo]), + DummyStrategyActionHook([xTokenInfo]), ]; } @@ -317,33 +326,19 @@ export class AutoXSTRKStrategy extends IStrategy { const calls2 = [call21, call22]; return [ - { - tokenInfo: baseTokenInfo, - calls: calls1, - balanceAtom: getBalanceAtom(baseTokenInfo, atom(true)), - }, - { - tokenInfo: xTokenInfo, - calls: calls2, - balanceAtom: getBalanceAtom(xTokenInfo, atom(true)), - }, + buildStrategyActionHook(calls1, [baseTokenInfo]), + buildStrategyActionHook(calls2, [xTokenInfo]), ]; }; - withdrawMethods = (inputs: WithdrawActionInputs) => { + withdrawMethods = async (inputs: WithdrawActionInputs) => { const { amount, address, provider } = inputs; const frmToken: TokenInfo = TOKENS.find( (t) => t.token == this.strategyAddress, ) as TokenInfo; if (!address || address == '0x0') { - return [ - { - tokenInfo: frmToken, - calls: [], - balanceAtom: DUMMY_BAL_ATOM, - }, - ]; + return [DummyStrategyActionHook([frmToken])]; } // const baseTokenContract = new Contract(ERC20Abi, baseTokenInfo.token, provider); @@ -372,12 +367,6 @@ export class AutoXSTRKStrategy extends IStrategy { const calls = [call2]; - return [ - { - tokenInfo: frmToken, - calls, - balanceAtom: getERC20BalanceAtom(frmToken), - }, - ]; + return [buildStrategyActionHook(calls, [frmToken])]; }; } diff --git a/src/strategies/delta_neutral_mm.ts b/src/strategies/delta_neutral_mm.ts index 49ddc9d2..7cfb26df 100755 --- a/src/strategies/delta_neutral_mm.ts +++ b/src/strategies/delta_neutral_mm.ts @@ -1,6 +1,7 @@ import CONSTANTS, { NFTS, TokenName } from '@/constants'; import { PoolInfo } from '@/store/pools'; import { + AmountsInfo, DepositActionInputs, IStrategy, IStrategySettings, @@ -16,9 +17,16 @@ import DeltaNeutralAbi from '@/abi/deltraNeutral.abi.json'; import MyNumber from '@/utils/MyNumber'; import { Call, Contract, uint256 } from 'starknet'; import { nostraLending } from '@/store/nostralending.store'; -import { getPrice, getTokenInfoFromName, standariseAddress } from '@/utils'; import { - DUMMY_BAL_ATOM, + buildStrategyActionHook, + convertToV2TokenInfo, + DummyStrategyActionHook, + getPrice, + getTokenInfoFromName, + standariseAddress, + ZeroAmountsInfo, +} from '@/utils'; +import { getBalance, getBalanceAtom, getERC20Balance, @@ -73,6 +81,7 @@ export class DeltaNeutralMM extends IStrategy { decimals: tokenInfo.decimals, address: ContractAddr.from(tokenInfo.token), logo: '', + displayDecimals: tokenInfo.displayDecimals, }, ], protocols: [], @@ -289,18 +298,12 @@ export class DeltaNeutralMM extends IStrategy { ]; } - depositMethods = (inputs: DepositActionInputs) => { + depositMethods = async (inputs: DepositActionInputs) => { const { amount, address, provider } = inputs; const baseTokenInfo = this.token; if (!address || address == '0x0') { - return [ - { - tokenInfo: baseTokenInfo, - calls: [], - balanceAtom: DUMMY_BAL_ATOM, - }, - ]; + return [DummyStrategyActionHook([baseTokenInfo])]; } const baseTokenContract = new Contract( @@ -326,46 +329,36 @@ export class DeltaNeutralMM extends IStrategy { const calls1 = [call11, call12]; - return [ - { - tokenInfo: baseTokenInfo, - calls: calls1, - balanceAtom: getBalanceAtom(baseTokenInfo, atom(true)), - }, - ]; + return [buildStrategyActionHook(calls1, [baseTokenInfo])]; }; - getUserTVL = async (user: string) => { + getUserTVL = async (user: string): Promise => { if (this.liveStatus == StrategyLiveStatus.COMING_SOON) - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + return ZeroAmountsInfo([this.token]); const balanceInfo = await getBalance(this.holdingTokens[0], user); if (!balanceInfo.tokenInfo) { - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + return ZeroAmountsInfo([this.token]); } const price = await getPrice(balanceInfo.tokenInfo); console.log('getUserTVL dnmm', price, balanceInfo.amount.toEtherStr()); + const usdValue = Number(balanceInfo.amount.toEtherStr()) * price; return { - amount: balanceInfo.amount, - usdValue: Number(balanceInfo.amount.toEtherStr()) * price, - tokenInfo: balanceInfo.tokenInfo, + usdValue, + amounts: [ + { + amount: Web3Number.fromWei( + balanceInfo.amount.toString(), + balanceInfo.tokenInfo.decimals, + ), + usdValue: Number(balanceInfo.amount.toEtherStr()) * price, + tokenInfo: convertToV2TokenInfo(balanceInfo.tokenInfo), + }, + ], }; }; - getTVL = async () => { - if (!this.isLive()) - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + getTVL = async (): Promise => { + if (!this.isLive()) return ZeroAmountsInfo([this.token]); try { const mainTokenName = this.token.name; @@ -378,22 +371,24 @@ export class DeltaNeutralMM extends IStrategy { const amount = bal.amount.operate('div', 1 + discountFactor); console.log('getTVL1', amount.toString()); const price = await getPrice(this.token); + const usdValue = Number(amount.toEtherStr()) * price; return { - amount, - usdValue: Number(amount.toEtherStr()) * price, - tokenInfo: this.token, + usdValue, + amounts: [ + { + usdValue, + amount: Web3Number.fromWei(amount.toString(), amount.decimals), + tokenInfo: convertToV2TokenInfo(this.token), + }, + ], }; } catch (error) { console.error('Error fetching TVL:', error); - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + return ZeroAmountsInfo([this.token]); } }; - withdrawMethods = (inputs: WithdrawActionInputs) => { + withdrawMethods = async (inputs: WithdrawActionInputs) => { const { amount, address, provider, isMax } = inputs; const mainToken = { ...this.token }; @@ -404,13 +399,7 @@ export class DeltaNeutralMM extends IStrategy { ); if (!address || address == '0x0') { - return [ - { - tokenInfo: mainToken, - calls: [], - balanceAtom: DUMMY_BAL_ATOM, - }, - ]; + return [DummyStrategyActionHook([mainToken])]; } const strategyContract = new Contract( @@ -439,11 +428,11 @@ export class DeltaNeutralMM extends IStrategy { throw new Error('DeltaMM: NFT not found'); } return [ - { - tokenInfo: mainToken, + buildStrategyActionHook( calls, - balanceAtom: getBalanceAtom(nftInfo, atom(true)), - }, + [mainToken], + [getBalanceAtom(nftInfo, atom(true))], + ), ]; }; } diff --git a/src/strategies/delta_neutral_mm_2.ts b/src/strategies/delta_neutral_mm_2.ts index 4f1bcc1b..e48d2229 100644 --- a/src/strategies/delta_neutral_mm_2.ts +++ b/src/strategies/delta_neutral_mm_2.ts @@ -1,11 +1,21 @@ import { TokenName } from '@/constants'; import { DeltaNeutralMM } from './delta_neutral_mm'; -import { IStrategySettings, StrategyLiveStatus, TokenInfo } from './IStrategy'; +import { + AmountsInfo, + IStrategySettings, + StrategyLiveStatus, + TokenInfo, +} from './IStrategy'; import { nostraLending } from '@/store/nostralending.store'; import { zkLend } from '@/store/zklend.store'; -import MyNumber from '@/utils/MyNumber'; -import { getPrice, getTokenInfoFromName } from '@/utils'; +import { + convertToV2TokenInfo, + getPrice, + getTokenInfoFromName, + ZeroAmountsInfo, +} from '@/utils'; import { getERC20Balance } from '@/store/balance.atoms'; +import { Web3Number } from '@strkfarm/sdk'; export class DeltaNeutralMM2 extends DeltaNeutralMM { constructor( @@ -32,13 +42,8 @@ export class DeltaNeutralMM2 extends DeltaNeutralMM { ); } - getTVL = async () => { - if (!this.isLive()) - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + getTVL = async (): Promise => { + if (!this.isLive()) return ZeroAmountsInfo([this.token]); try { const mainTokenName = this.token.name; @@ -51,18 +56,20 @@ export class DeltaNeutralMM2 extends DeltaNeutralMM { const amount = bal.amount.operate('div', 1 + discountFactor); console.log('getTVL1', amount.toString()); const price = await getPrice(this.token); + const usdValue = Number(amount.toEtherStr()) * price; return { - amount, - usdValue: Number(amount.toEtherStr()) * price, - tokenInfo: this.token, + usdValue, + amounts: [ + { + amount: Web3Number.fromWei(amount.toString(), amount.decimals), + usdValue, + tokenInfo: convertToV2TokenInfo(this.token), + }, + ], }; } catch (error) { console.error('Error fetching TVL:', error); - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + return ZeroAmountsInfo([this.token]); } }; } diff --git a/src/strategies/delta_neutral_mm_vesu_endur.ts b/src/strategies/delta_neutral_mm_vesu_endur.ts index c90cfbb6..fe981248 100644 --- a/src/strategies/delta_neutral_mm_vesu_endur.ts +++ b/src/strategies/delta_neutral_mm_vesu_endur.ts @@ -1,6 +1,7 @@ import { provider, TokenName } from '@/constants'; import { DeltaNeutralMM } from './delta_neutral_mm'; import { + AmountsInfo, IStrategySettings, Step, StrategyAction, @@ -8,12 +9,18 @@ import { TokenInfo, } from './IStrategy'; import MyNumber from '@/utils/MyNumber'; -import { getEndpoint, getTokenInfoFromName } from '@/utils'; +import { + convertToV2TokenInfo, + getEndpoint, + getTokenInfoFromName, + ZeroAmountsInfo, +} from '@/utils'; import { vesu } from '@/store/vesu.store'; import { endur } from '@/store/endur.store'; import { PoolInfo } from '@/store/pools'; import { Contract } from 'starknet'; import { fetchQuotes, QuoteRequest } from '@avnu/avnu-sdk'; +import { Web3Number } from '@strkfarm/sdk'; export class DeltaNeutralMMVesuEndur extends DeltaNeutralMM { vesuPoolName = 'Re7 xSTRK'; @@ -197,13 +204,8 @@ export class DeltaNeutralMMVesuEndur extends DeltaNeutralMM { return [...actions, strategyAction]; } - getTVL = async () => { - if (!this.isLive()) - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + getTVL = async (): Promise => { + if (!this.isLive()) return ZeroAmountsInfo([this.token]); try { const resp = await fetch( @@ -232,25 +234,27 @@ export class DeltaNeutralMMVesuEndur extends DeltaNeutralMM { const xSTRKPrice = await this.getXSTRKPrice(); const collateralInSTRK = Number(collateralXSTRK.toEtherToFixedDecimals(6)) * xSTRKPrice; + const usdValue = + Number(collateralUSDValue.toEtherStr()) - + Number(debtUSDValue.toEtherStr()); return { - amount: MyNumber.fromEther( - ( - collateralInSTRK - Number(debtSTRK.toEtherToFixedDecimals(6)) - ).toFixed(6), - data.data[0].collateral.decimals, - ), - usdValue: - Number(collateralUSDValue.toEtherStr()) - - Number(debtUSDValue.toEtherStr()), - tokenInfo: this.token, + usdValue, + amounts: [ + { + amount: new Web3Number( + ( + collateralInSTRK - Number(debtSTRK.toEtherToFixedDecimals(6)) + ).toFixed(6), + data.data[0].collateral.decimals, + ), + usdValue, + tokenInfo: convertToV2TokenInfo(this.token), + }, + ], }; } catch (error) { console.error('Error fetching TVL:', error); - return { - amount: MyNumber.fromEther('0', this.token.decimals), - usdValue: 0, - tokenInfo: this.token, - }; + return ZeroAmountsInfo([this.token]); } }; diff --git a/src/strategies/ekubo_cl_vault.ts b/src/strategies/ekubo_cl_vault.ts new file mode 100644 index 00000000..e389c0b4 --- /dev/null +++ b/src/strategies/ekubo_cl_vault.ts @@ -0,0 +1,368 @@ +import CONSTANTS from '@/constants'; +import { + AmountsInfo, + DepositActionInputs, + IStrategy, + IStrategyActionHook, + IStrategySettings, + onStratAmountsChangeFn, + StrategyLiveStatus, + StrategyStatus, + TokenInfo, + WithdrawActionInputs, +} from './IStrategy'; +import { + ContractAddr, + getMainnetConfig, + Global, + IStrategyMetadata, + PricerFromApi, + Web3Number, + CLVaultStrategySettings, + EkuboCLVault, + SingleActionAmount, +} from '@strkfarm/sdk'; +import MyNumber from '@/utils/MyNumber'; +import { PoolInfo } from '@/store/pools'; +import { + BalanceResult, + getBalanceAtom, + returnEmptyBal, +} from '@/store/balance.atoms'; +import { atom } from 'jotai'; +import { + buildStrategyActionHook, + convertToMyNumber, + convertToV1TokenInfo, + convertToV2TokenInfo, + convertToV2Web3Number, + getTokenInfoFromName, +} from '@/utils'; +import { atomWithQuery } from 'jotai-tanstack-query'; +import { addressAtom } from '@/store/claims.atoms'; + +export class EkuboClStrategy extends IStrategy { + clVault: EkuboCLVault; + isSingleTokenDepositView: boolean = false; + constructor( + name: string, + description: string, + strategy: IStrategyMetadata, + liveStatus: StrategyLiveStatus, + settings: IStrategySettings, + ) { + const rewardTokens = [{ logo: CONSTANTS.LOGOS.STRK }]; + const holdingTokens: TokenInfo[] = [ + { + name: strategy.name, + token: strategy.address.address, + address: strategy.address.address, + isERC4626: false, + decimals: 18, + displayDecimals: 2, + logo: CONSTANTS.LOGOS.STRK, // todo make it to dual token + minAmount: MyNumber.fromEther('0.01', 18), + maxAmount: MyNumber.fromEther('10000000000000', 18), + stepAmount: MyNumber.fromEther('0.01', 18), + }, + ]; + + const config = getMainnetConfig( + process.env.NEXT_PUBLIC_RPC_URL!, + 'pending', + ); + const tokens = Global.getDefaultTokens(); + const pricer = new PricerFromApi(config, tokens); + const clVault = new EkuboCLVault(config, pricer, strategy); + + const token0Info = getTokenInfoFromName(strategy.depositTokens[0].symbol); + const token1Info = getTokenInfoFromName(strategy.depositTokens[1].symbol); + super( + `ekubo_cl_${strategy.name.split(' ')[1].toLowerCase().replaceAll('/', '')}`, + name, + name, + description, + rewardTokens, + holdingTokens, + liveStatus, + settings, + clVault.metadata, + ); + + this.clVault = clVault; + this.riskFactor = strategy.risk.netRisk; + + const risks = [...this.risks]; + this.risks = [ + this.getSafetyFactorLine(), + 'Your original investment is safe. If you deposit 100 tokens, you will always get at least 100 tokens back, unless due to below reasons.', + 'The deposits are supplied on Ekubo, a concentrated liquidity AMM, which can experience impermanent loss. Though, given this a pool of highly corelated tokens, the chances of a loss are very low.', + // `The strategy tries to keep the position around ${this.metadata.additionalInfo.newBounds.lower} to ${this.metadata.additionalInfo.newBounds.upper} range in tick space to provide maximum utility of the capital, but this can lead to relatively high impermanent loss sometimes`, + 'Sometimes, the strategy may not earn yield for a short period. This happens when its temporarily out of range. During this time, we pause and observe before making any changes. Rebalancing too often could lead to unnecessary fees from withdrawals and swaps on Ekubo, so we try to avoid that unless its really needed.', + ...risks, + ]; + + this.balanceSummaryAtom = this.getSummaryBalanceAtom(); + this.balanceAtoms = [ + this.getEkuboStratBalanceAtom(token0Info), + this.getEkuboStratBalanceAtom(token1Info), + ]; + this.balancesAtom = this.getBalancesAtom(); + } + + getTVL = async (): Promise => { + const res = await this.clVault.getTVL(); + return { + usdValue: res.usdValue, + amounts: [res.token0, res.token1], + }; + }; + + getUserTVL = async (user: string): Promise => { + const res = await this.clVault.getUserTVL(ContractAddr.from(user)); + return { + usdValue: res.usdValue, + amounts: [res.token0, res.token1], + }; + }; + + async onAmountsChange( + ...args: Parameters + ): Promise { + console.log('onAmountsChange [1]'); + const changes = args[0]; + const allAmounts = args[1]; + console.log('onAmountsChange [1.1]', changes, allAmounts); + const isToken0Change = changes.index == 0; + const input = { + token0: isToken0Change + ? { + ...changes.amountInfo, + } + : { + amount: Web3Number.fromWei('0', allAmounts[0].tokenInfo.decimals), + tokenInfo: allAmounts[0].tokenInfo, + }, + token1: isToken0Change + ? { + amount: Web3Number.fromWei('0', allAmounts[1].tokenInfo.decimals), + tokenInfo: allAmounts[1].tokenInfo, + } + : { ...changes.amountInfo }, + }; + console.log( + 'onAmountsChange [1.2]', + [input.token0, input.token1].map((item) => ({ + amount: item.amount.toFixed(6), + tokenInfo: item.tokenInfo, + })), + ); + const output = await this.clVault.matchInputAmounts(input); + console.log( + 'onAmountsChange [1.3]', + [output.token0, output.token1].map((item) => ({ + amount: item.amount.toFixed(6), + tokenInfo: item.tokenInfo, + })), + ); + return [output.token0, output.token1]; + } + + depositMethods = async (inputs: DepositActionInputs) => { + const { amount, address, provider, amount2 } = inputs; + const token0Info = getTokenInfoFromName( + this.metadata.depositTokens[0].symbol, + ); + const token1Info = getTokenInfoFromName( + this.metadata.depositTokens[1].symbol, + ); + console.log( + 'Deposit calls [1]', + amount.toString(), + amount2?.toString(), + address, + ); + if (!address || address == '0x0' || !amount2) { + return [ + { + ...buildStrategyActionHook([], [token0Info, token1Info]), + onAmountsChange: this.onAmountsChange.bind(this), + }, + ]; + } + console.log('Deposit calls [2]', amount, amount2); + const amt = Web3Number.fromWei(amount.toString(), token0Info.decimals); + const amt2 = Web3Number.fromWei(amount2.toString(), token1Info.decimals); + const calls = await this.clVault.depositCall( + { + token0: { + tokenInfo: this.clVault.metadata.depositTokens[0], + amount: amt, + }, + token1: { + tokenInfo: this.clVault.metadata.depositTokens[1], + amount: amt2, + }, + }, + ContractAddr.from(address), + ); + console.log('Deposit calls [3]', calls); + return [ + { + ...buildStrategyActionHook(calls, [token0Info, token1Info]), + onAmountsChange: this.onAmountsChange.bind(this), + }, + ]; + }; + + withdrawMethods = async ( + inputs: WithdrawActionInputs, + ): Promise => { + const { amount, address, provider, amount2 } = inputs; + const token0Info = getTokenInfoFromName( + this.metadata.depositTokens[0].symbol, + ); + const token1Info = getTokenInfoFromName( + this.metadata.depositTokens[1].symbol, + ); + const output = { + calls: [], + amounts: [ + { + tokenInfo: this.metadata.depositTokens[0], + balanceAtom: this.getEkuboStratBalanceAtom(token0Info), + }, + { + tokenInfo: this.metadata.depositTokens[1], + balanceAtom: this.getEkuboStratBalanceAtom(token1Info), + }, + ], + onAmountsChange: this.onAmountsChange.bind(this), + }; + if (!address || address == '0x0' || !amount2) { + return [output]; + } + + const amt = Web3Number.fromWei(amount.toString(), amount.decimals); + const amt2 = Web3Number.fromWei(amount2.toString(), amount.decimals); + const calls = await this.clVault.withdrawCall( + { + token0: { + tokenInfo: this.clVault.metadata.depositTokens[0], + amount: amt, + }, + token1: { + tokenInfo: this.clVault.metadata.depositTokens[1], + amount: amt2, + }, + }, + ContractAddr.from(address), + ContractAddr.from(address), + ); + + return [ + { + ...output, + calls, + }, + ]; + }; + + async solve(pools: PoolInfo[], amount: string) { + const yieldInfo = await this.clVault.netAPY('pending', 2000); + this.netYield = yieldInfo; + this.leverage = 1; + + this.investmentFlows = await this.clVault.getInvestmentFlows(); + + this.postSolve(); + + this.status = StrategyStatus.SOLVED; + } + + getEkuboStratBalanceAtom = (underlyingToken: TokenInfo) => { + return atomWithQuery((get) => { + return { + queryKey: [ + 'getEkuboStratBalanceAtom', + this.holdingTokens[0].address, + underlyingToken.token, + get(addressAtom), + ], + queryFn: async ({ queryKey }: any): Promise => { + try { + console.log('getEkuboStratBalanceAtom', queryKey); + const bal = get(getBalanceAtom(this.holdingTokens[0], atom(true))); + if (!bal.data) { + return returnEmptyBal(); + } + console.log('getEkuboStratBalanceAtom [0]', bal.data); + const userTVL = await this.getUserTVL(get(addressAtom) || ''); + const amountInfo = userTVL.amounts.find((amountInfo) => + amountInfo.tokenInfo.address.eqString(underlyingToken.token), + ); + if (!amountInfo) { + return returnEmptyBal(); + } + console.log('getEkuboStratBalanceAtom [1]', amountInfo); + return { + amount: MyNumber.fromEther( + amountInfo.amount.toString(), + amountInfo.tokenInfo.decimals, + ), + tokenInfo: underlyingToken, + }; + } catch (e) { + console.error('getEkuboStratBalanceAtom err', e); + return returnEmptyBal(); + } + }, + refetchInterval: 5000, + }; + }); + }; + + getSummaryBalanceAtom = () => { + return atomWithQuery((get) => { + const bal1 = get(this.balanceAtoms[0]); + const bal2 = get(this.balanceAtoms[1]); + return { + queryKey: [ + 'getEkuboStratBalanceAtom', + ...[bal1, bal2].map( + (b) => `${b.data?.amount.toString()}-${b.data?.tokenInfo?.address}`, + ), + ], + queryFn: async ({ queryKey }: any): Promise => { + const bal1 = get(this.balanceAtoms[0]); + const bal2 = get(this.balanceAtoms[1]); + if ( + !bal1.data || + !bal2.data || + !bal1.data.tokenInfo || + !bal2.data.tokenInfo + ) { + return returnEmptyBal(); + } + const bal1Data = bal1.data; + const bal2Data = bal2.data; + const amounts: SingleActionAmount[] = [bal1Data, bal2Data].map( + (b) => ({ + amount: convertToV2Web3Number(b.amount), + tokenInfo: convertToV2TokenInfo(b.tokenInfo!), + }), + ); + const amountWeb3Number = await this.computeSummaryValue( + amounts, + this.settings.quoteToken, + ); + return { + amount: convertToMyNumber(amountWeb3Number), + tokenInfo: convertToV1TokenInfo(this.settings.quoteToken), + }; + }, + refetchInterval: 5000, + }; + }); + }; +} diff --git a/src/strategies/vesu_rebalance.ts b/src/strategies/vesu_rebalance.ts index c0207577..87a0be9e 100644 --- a/src/strategies/vesu_rebalance.ts +++ b/src/strategies/vesu_rebalance.ts @@ -1,8 +1,9 @@ import CONSTANTS from '@/constants'; import { - AmountInfo, + AmountsInfo, DepositActionInputs, IStrategy, + IStrategyActionHook, IStrategySettings, StrategyLiveStatus, StrategyStatus, @@ -19,9 +20,13 @@ import { Web3Number, VesuRebalanceSettings, } from '@strkfarm/sdk'; -import MyNumber from '@/utils/MyNumber'; import { PoolInfo } from '@/store/pools'; -import { DUMMY_BAL_ATOM, getBalanceAtom } from '@/store/balance.atoms'; +import { + buildStrategyActionHook, + DummyStrategyActionHook, + ZeroAmountsInfo, +} from '@/utils'; +import { getBalanceAtom } from '@/store/balance.atoms'; import { atom } from 'jotai'; export class VesuRebalanceStrategy extends IStrategy { @@ -79,38 +84,35 @@ export class VesuRebalanceStrategy extends IStrategy { ]; } - getTVL = async (): Promise => { + getTVL = async (): Promise => { const res = await this.vesuRebalance.getTVL(); return { - amount: new MyNumber(res.amount.toWei(), res.amount.decimals), usdValue: res.usdValue, - tokenInfo: this.asset, + amounts: [res], }; }; - getUserTVL = async (user: string): Promise => { - const res = await this.vesuRebalance.getUserTVL(ContractAddr.from(user)); - return { - amount: new MyNumber(res.amount.toWei(), res.amount.decimals), - usdValue: res.usdValue, - tokenInfo: this.asset, - }; + getUserTVL = async (user: string): Promise => { + try { + const res = await this.vesuRebalance.getUserTVL(ContractAddr.from(user)); + return { + usdValue: res.usdValue, + amounts: [res], + }; + } catch (e) { + console.error('Error getting user TVL:', e); + return ZeroAmountsInfo([this.asset]); + } }; - depositMethods = (inputs: DepositActionInputs) => { + depositMethods = async (inputs: DepositActionInputs) => { const { amount, address, provider } = inputs; if (!address || address == '0x0') { - return [ - { - tokenInfo: this.asset, - calls: [], - balanceAtom: DUMMY_BAL_ATOM, - }, - ]; + return [DummyStrategyActionHook([this.asset])]; } const amt = Web3Number.fromWei(amount.toString(), amount.decimals); - const calls = this.vesuRebalance.depositCall( + const calls = await this.vesuRebalance.depositCall( { tokenInfo: this.vesuRebalance.asset(), amount: amt, @@ -118,29 +120,19 @@ export class VesuRebalanceStrategy extends IStrategy { ContractAddr.from(address), ); - return [ - { - tokenInfo: this.asset, - calls, - balanceAtom: getBalanceAtom(this.asset, atom(true)), - }, - ]; + return [buildStrategyActionHook(calls, [this.asset])]; }; - withdrawMethods = (inputs: WithdrawActionInputs) => { + withdrawMethods = async ( + inputs: WithdrawActionInputs, + ): Promise => { const { amount, address, provider } = inputs; if (!address || address == '0x0') { - return [ - { - tokenInfo: this.holdingTokens[0] as TokenInfo, - calls: [], - balanceAtom: DUMMY_BAL_ATOM, - }, - ]; + return [DummyStrategyActionHook([this.holdingTokens[0] as TokenInfo])]; } const amt = Web3Number.fromWei(amount.toString(), amount.decimals); - const calls = this.vesuRebalance.withdrawCall( + const calls = await this.vesuRebalance.withdrawCall( { tokenInfo: this.vesuRebalance.asset(), amount: amt, @@ -151,9 +143,13 @@ export class VesuRebalanceStrategy extends IStrategy { return [ { - tokenInfo: this.holdingTokens[0] as TokenInfo, calls, - balanceAtom: getBalanceAtom(this.holdingTokens[0], atom(true)), + amounts: [ + { + balanceAtom: getBalanceAtom(this.holdingTokens[0], atom(true)), + tokenInfo: this.vesuRebalance.asset(), + }, + ], }, ]; }; diff --git a/src/utils.ts b/src/utils.ts index 02d9c1da..82ed1aa2 100755 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,9 +1,27 @@ import { MenuItemProps, MenuListProps } from '@chakra-ui/react'; -import { num } from 'starknet'; +import { Call, num } from 'starknet'; import { TOKENS } from './constants'; import toast from 'react-hot-toast'; -import { TokenInfo } from './strategies/IStrategy'; +import { + AmountsInfo, + IStrategyActionHook, + TokenInfo, +} from './strategies/IStrategy'; +import { + ContractAddr, + TokenInfo as TokenInfoV2, + Web3Number, +} from '@strkfarm/sdk'; import fetchWithRetry from './utils/fetchWithRetry'; +import { + BalanceResult, + DUMMY_BAL_ATOM, + getBalanceAtom, +} from './store/balance.atoms'; +import { Atom, atom } from 'jotai'; +import { AtomWithQueryResult } from 'jotai-tanstack-query'; +import assert from 'assert'; +import MyNumber from './utils/MyNumber'; export function getUniqueStrings(arr: Array) { const _arr: string[] = []; @@ -84,7 +102,7 @@ export function getTokenInfoFromName(tokenName: string) { (t) => t.name.toLowerCase() === tokenName.toLowerCase(), ); if (!info) { - throw new Error('Token not found'); + throw new Error(`Token not found: ${tokenName}`); } return info; } @@ -150,7 +168,7 @@ export function copyReferralLink(refCode: string) { }); } -export async function getPrice(tokenInfo: TokenInfo) { +export async function getPrice(tokenInfo: MyMultiTokenInfo) { try { return await getPriceFromMyAPI(tokenInfo); } catch (e) { @@ -158,7 +176,7 @@ export async function getPrice(tokenInfo: TokenInfo) { } console.log('getPrice coinbase', tokenInfo.name); const priceInfo = await fetchWithRetry( - `https://api.coinbase.com/v2/prices/${tokenInfo.name}-USDT/spot`, + `https://api.coinbase.com/v2/prices/${convertToV2TokenInfo(tokenInfo).symbol}-USDT/spot`, {}, `Error fetching price for ${tokenInfo.name}`, ); @@ -191,11 +209,11 @@ export function getHosturl() { } } -export async function getPriceFromMyAPI(tokenInfo: TokenInfo) { +export async function getPriceFromMyAPI(tokenInfo: MyMultiTokenInfo) { console.log('getPrice from redis', tokenInfo.name); const endpoint = getEndpoint(); - const url = `${endpoint}/api/price/${tokenInfo.name}`; + const url = `${endpoint}/api/price/${convertToV2TokenInfo(tokenInfo).symbol}`; console.log('getPrice url', url); const priceInfoRes = await fetch(url); const priceInfo = await priceInfoRes.json(); @@ -203,6 +221,8 @@ export async function getPriceFromMyAPI(tokenInfo: TokenInfo) { const priceTime = new Date(priceInfo.timestamp); if (now.getTime() - priceTime.getTime() > 900000) { // 15 mins + console.log('getPrice priceInfo', priceInfo); + console.log('getPrice priceTime', now, tokenInfo.name); throw new Error('Price is stale'); } const price = Number(priceInfo.price); @@ -231,3 +251,129 @@ export function timeAgo(date: Date): string { year: '2-digit', }); } + +export type MyMultiTokenInfo = TokenInfo | TokenInfoV2; +export type MyTokenInfo = TokenInfoV2; + +export function convertToV2TokenInfo(token: MyMultiTokenInfo): MyTokenInfo { + const _token: any = token; + const isTokenInfoV1 = _token.token !== undefined; + if (!isTokenInfoV1) { + return token as TokenInfoV2; + } + return { + name: token.name, + symbol: token.name, + address: ContractAddr.from((token as TokenInfo).token), + decimals: token.decimals, + logo: token.logo, + displayDecimals: token.displayDecimals, + }; +} + +export function convertToV1TokenInfo( + token: MyMultiTokenInfo, + isERC4626 = false, +): TokenInfo { + const _token: any = token; + const isTokenInfoV1 = _token.token !== undefined; + if (isTokenInfoV1) { + return token as TokenInfo; + } + + const v2Token = token as TokenInfoV2; + return { + name: v2Token.symbol, + address: v2Token.address.address, + decimals: v2Token.decimals, + logo: v2Token.logo, + displayDecimals: v2Token.displayDecimals, + token: v2Token.address.address, + isERC4626, + minAmount: MyNumber.fromEther('0', v2Token.decimals), + maxAmount: MyNumber.fromEther('0', v2Token.decimals), + stepAmount: new MyNumber('1', v2Token.decimals), + }; +} + +export type MyMultiWeb3Number = Web3Number | MyNumber; +export type MyWeb3Number = Web3Number; +export function convertToV2Web3Number(amount: MyMultiWeb3Number): MyWeb3Number { + console.log( + 'convertToV2Web3Number', + typeof amount, + amount instanceof Web3Number, + ); + if (amount instanceof Web3Number) { + return amount; + } + return Web3Number.fromWei(amount.toString(), amount.decimals); +} + +export function convertToMyNumber(amount: MyWeb3Number): MyNumber { + return new MyNumber(amount.toWei(), amount.decimals); +} + +export function ZeroAmountsInfo(tokens: MyMultiTokenInfo[]): AmountsInfo { + const res: AmountsInfo = { + usdValue: 0, + amounts: [], + }; + for (let i = 0; i < tokens.length; i++) { + const token: any = tokens[i]; + const isTokenInfoV1 = token.token !== undefined; + res.amounts.push({ + amount: Web3Number.fromWei('0', tokens[i].decimals), + tokenInfo: isTokenInfoV1 + ? convertToV2TokenInfo(TOKENS[i]) + : (tokens[i] as TokenInfoV2), + usdValue: 0, + }); + } + return res; +} + +export function DummyStrategyActionHook( + tokens: MyMultiTokenInfo[], +): IStrategyActionHook { + return buildStrategyActionHook([], tokens, null, true); +} + +export function buildStrategyActionHook( + calls: Call[], + tokens: MyMultiTokenInfo[], + balanceAtoms: Atom>[] | null = null, + isDummy: boolean = false, +): IStrategyActionHook { + if (balanceAtoms) { + assert( + balanceAtoms.length === tokens.length, + 'balanceAtoms length mismatch', + ); + } + return { + calls, + amounts: tokens.map((token, index) => { + const _token: any = token; + const isTokenInfoV1 = _token.token !== undefined; + const tokenInfoV1 = getTokenInfoFromName(_token.symbol || _token.name); + if (!tokenInfoV1) { + if (!tokenInfoV1) { + throw new Error('Token not found'); + } + } + let balanceAtom = balanceAtoms ? balanceAtoms[index] : null; + if (!balanceAtom) { + balanceAtom = isDummy + ? DUMMY_BAL_ATOM + : getBalanceAtom(tokenInfoV1, atom(true)); + } + return { + balanceAtom, + tokenInfo: isTokenInfoV1 + ? convertToV2TokenInfo(_token) + : (token as TokenInfoV2), + }; + }), + }; +} diff --git a/src/utils/MyNumber.ts b/src/utils/MyNumber.ts index 85da1ae7..f31199aa 100755 --- a/src/utils/MyNumber.ts +++ b/src/utils/MyNumber.ts @@ -2,6 +2,10 @@ import BigNumber from 'bignumber.js'; import { ethers } from 'ethers'; const customInspectSymbol = Symbol.for('nodejs.util.inspect.custom'); +BigNumber.config({ + DECIMAL_PLACES: 18, +}); + export default class MyNumber { bigNumber: BigNumber; decimals: number; diff --git a/yarn.lock b/yarn.lock index 7cce3eb7..edc8f4f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1922,10 +1922,10 @@ dependencies: "@prisma/debug" "5.18.0" -"@puppeteer/browsers@2.8.0": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.8.0.tgz#9d592933cbefc66c37823770844b8cbac52607dd" - integrity sha512-yTwt2KWRmCQAfhvbCRjebaSX8pV1//I0Y3g+A7f/eS7gf0l4eRJoUCvcYdVtboeU4CTOZQuqYbZNS8aBYb8ROQ== +"@puppeteer/browsers@2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.9.0.tgz#744a2395b196530d9fffbc64df549689f06bc24e" + integrity sha512-8+xM+cFydYET4X/5/3yZMHs7sjS6c9I6H5I3xJdb6cinzxWUT/I2QVw4avxCQ8QDndwdHkG/FiSZIrCjAbaKvQ== dependencies: debug "^4.4.0" extract-zip "^2.0.1" @@ -2205,10 +2205,10 @@ viem "^2.19.1" zod "^3.22.4" -"@strkfarm/sdk@^1.0.28": - version "1.0.28" - resolved "https://registry.yarnpkg.com/@strkfarm/sdk/-/sdk-1.0.28.tgz#1fad880609c3e323593671c32c2abb6163f847d9" - integrity sha512-0ghvlHm432T9sc1HBWVNZ8eRYen0nY2/Vb5EzomW9mAjXdglcr35ho3J237ZhWi7FJvimCxxb4fKDtMlXTS4YA== +"@strkfarm/sdk@^1.0.29": + version "1.0.29" + resolved "https://registry.yarnpkg.com/@strkfarm/sdk/-/sdk-1.0.29.tgz#8e8dc65b12e83bddd57dbc53db90bd4af7f62978" + integrity sha512-qifA8dyu0agL0+yYXRuo6gjqiNzR6vJsw10tZOx3KGrKYcZ7U//hKlAWXIiZpCyQN+KD5E9jZLNEV4ArdKQ04g== dependencies: "@avnu/avnu-sdk" "^3.0.2" axios "^1.7.2" @@ -2315,6 +2315,13 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/lodash.debounce@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz#0f5f21c507bce7521b5e30e7a24440975ac860a5" + integrity sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ== + dependencies: + "@types/lodash" "*" + "@types/lodash.mergewith@4.6.7": version "4.6.7" resolved "https://registry.yarnpkg.com/@types/lodash.mergewith/-/lodash.mergewith-4.6.7.tgz#eaa65aa5872abdd282f271eae447b115b2757212" @@ -2345,11 +2352,11 @@ "@types/node" "*" "@types/node@*", "@types/node@^22.5.5": - version "22.13.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.14.tgz#70d84ec91013dcd2ba2de35532a5a14c2b4cc912" - integrity sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w== + version "22.14.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.0.tgz#d3bfa3936fef0dbacd79ea3eb17d521c628bb47e" + integrity sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA== dependencies: - undici-types "~6.20.0" + undici-types "~6.21.0" "@types/node@18.15.13": version "18.15.13" @@ -3256,9 +3263,9 @@ bare-events@^2.2.0, bare-events@^2.5.4: integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== bare-fs@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.0.2.tgz#a879c7b5d9242663ef80d75d6b99c2c6701664d6" - integrity sha512-S5mmkMesiduMqnz51Bfh0Et9EX0aTCJxhsI4bvzFFLs8Z1AV8RDHadfY5CyLwdoLHgXbNBEN1gQcbEtGwuvixw== + version "4.1.2" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.1.2.tgz#5b048298019f489979d5a6afb480f5204ad4e89b" + integrity sha512-8wSeOia5B7LwD4+h465y73KOdj5QHsbbuoUfPBi+pXgFJIPuG7SsiOdJuijWMyfid49eD+WivpfY7KT8gbAzBA== dependencies: bare-events "^2.5.4" bare-path "^3.0.0" @@ -3489,10 +3496,10 @@ chroma.ts@1.0.10: resolved "https://registry.yarnpkg.com/chroma.ts/-/chroma.ts-1.0.10.tgz#2b965d8f2c2eee44d25072902e5787fe259d4565" integrity sha512-0FOQiB6LaiOwoyaxP+a4d3sCIOSf7YvBKj3TfeQM4ZBb2yskRxe4FlT2P4YNpHz7kIB5rXsfmpyniyrYRRyVHw== -chromium-bidi@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-2.1.2.tgz#b0710279f993128d4e0b41c892209ea093217d97" - integrity sha512-vtRWBK2uImo5/W2oG6/cDkkHSm+2t6VHgnj+Rcwhb0pP74OoUb4GipyRX/T/y39gYQPhioP0DPShn+A7P6CHNw== +chromium-bidi@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-3.0.0.tgz#bfb0549db96552d42377401aadc0198a1bbb3e9f" + integrity sha512-ZOGRDAhBMX1uxL2Cm2TDuhImbrsEz5A/tTcVU6RpXEWaTNUNwsHW6njUXizh51Ir6iqHbKAfhA2XK33uBcLo5A== dependencies: mitt "^3.0.1" zod "^3.24.1" @@ -4123,10 +4130,10 @@ detect-node-es@^1.1.0: resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== -devtools-protocol@0.0.1413902: - version "0.0.1413902" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1413902.tgz#a0f00fe9eb25ab337a8f9656a29e0a1a69f42401" - integrity sha512-yRtvFD8Oyk7C9Os3GmnFZLu53yAfsnyw1s+mLmHHUK0GQEc9zthHWvS1r67Zqzm5t7v56PILHIVZ7kmFMaL2yQ== +devtools-protocol@0.0.1425554: + version "0.0.1425554" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1425554.tgz#51ed2fed1405f56783d24a393f7c75b6bbb58029" + integrity sha512-uRfxR6Nlzdzt0ihVIkV+sLztKgs7rgquY/Mhcv1YNCWDh5IZgl5mnn2aeEnW5stYTE0wwiF4RYVz8eMEpV1SEw== didyoumean@^1.2.2: version "1.2.2" @@ -6336,6 +6343,11 @@ lodash-es@^4.17.21: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + lodash.isequal@4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" @@ -7234,28 +7246,28 @@ punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -puppeteer-core@24.4.0: - version "24.4.0" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-24.4.0.tgz#a301c58344fe939b487704593681ea9f913fe6f8" - integrity sha512-eFw66gCnWo0X8Hyf9KxxJtms7a61NJVMiSaWfItsFPzFBsjsWdmcNlBdsA1WVwln6neoHhsG+uTVesKmTREn/g== +puppeteer-core@24.6.0: + version "24.6.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-24.6.0.tgz#cea180600cd539d69517a63d8321c882f287ad06" + integrity sha512-Cukxysy12m0v350bhl/Gzof0XQYmtON9l2VvGp3D4BOQZVgyf+y5wIpcjDZQ/896Okoi95dKRGRV8E6a7SYAQQ== dependencies: - "@puppeteer/browsers" "2.8.0" - chromium-bidi "2.1.2" + "@puppeteer/browsers" "2.9.0" + chromium-bidi "3.0.0" debug "^4.4.0" - devtools-protocol "0.0.1413902" + devtools-protocol "0.0.1425554" typed-query-selector "^2.12.0" ws "^8.18.1" puppeteer@^24.4.0: - version "24.4.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-24.4.0.tgz#fb45a67e72f4e6e34db8f404ef61cdd42099e6e6" - integrity sha512-E4JhJzjS8AAI+6N/b+Utwarhz6zWl3+MR725fal+s3UlOlX2eWdsvYYU+Q5bXMjs9eZEGkNQroLkn7j11s2k1Q== + version "24.6.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-24.6.0.tgz#39f3d58c89f1e2c97eafd4284e56488e2dd844cf" + integrity sha512-wYTB8WkzAr7acrlsp+0at1PZjOJPOxe6dDWKOG/kaX4Zjck9RXCFx3CtsxsAGzPn/Yv6AzgJC/CW1P5l+qxsqw== dependencies: - "@puppeteer/browsers" "2.8.0" - chromium-bidi "2.1.2" + "@puppeteer/browsers" "2.9.0" + chromium-bidi "3.0.0" cosmiconfig "^9.0.0" - devtools-protocol "0.0.1413902" - puppeteer-core "24.4.0" + devtools-protocol "0.0.1425554" + puppeteer-core "24.6.0" typed-query-selector "^2.12.0" qs@6.14.0, qs@^6.7.0: @@ -8822,10 +8834,10 @@ undici-types@~6.19.2: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== unenv@^1.9.0: version "1.10.0" From 3a6e83333fdf0b0bf752addd43386a0942791e41 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Sun, 6 Apr 2025 04:41:36 +0530 Subject: [PATCH 03/30] comment --- src/app/api/strategies/route.ts | 1138 +++++++++++++++---------------- 1 file changed, 569 insertions(+), 569 deletions(-) diff --git a/src/app/api/strategies/route.ts b/src/app/api/strategies/route.ts index a798aff4..112267d2 100755 --- a/src/app/api/strategies/route.ts +++ b/src/app/api/strategies/route.ts @@ -152,572 +152,572 @@ export async function GET(req: Request) { } } -export async function GETTT() { - return NextResponse.json({ - status: true, - strategies: [ - { - name: 'Vesu Fusion STRK', - id: 'vesu_fusion_strk', - apy: 0.09792071607840036, - depositToken: [ - '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', - ], - leverage: 1, - contract: [ - { - name: 'STRK', - address: - '0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929', - }, - ], - tvlUsd: 239.321076172105, - status: { number: 1, value: 'Hot & New 🔥' }, - riskFactor: 0.75, - logos: [ - 'https://assets.coingecko.com/coins/images/26433/small/starknet.png', - ], - isAudited: true, - auditUrl: - 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', - actions: [], - investmentFlows: [ - { - title: 'Your Deposit', - subItems: [ - { key: 'Net yield', value: '9.79%' }, - { key: 'Performance Fee', value: '10.00%' }, - ], - linkedFlows: [ - { - title: 'Pool name: Re7 xSTRK', - subItems: [ - { key: 'APY', value: '11.01%' }, - { key: 'Weight', value: '98.00 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Genesis', - subItems: [ - { key: 'APY', value: '4.32%' }, - { key: 'Weight', value: '2.00 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Re7 USDC', - subItems: [ - { key: 'APY', value: '4.32%' }, - { key: 'Weight', value: '0.00 / 100.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Re7 Starknet Ecosystem', - subItems: [ - { key: 'APY', value: '4.32%' }, - { key: 'Weight', value: '0.00 / 100.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope wstETH', - subItems: [ - { key: 'APY', value: '4.32%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope Cornerstone', - subItems: [ - { key: 'APY', value: '4.32%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope CASH', - subItems: [ - { key: 'APY', value: '4.32%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope xSTRK', - subItems: [ - { key: 'APY', value: '4.32%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Re7 rUSDC', - subItems: [ - { key: 'APY', value: '4.32%' }, - { key: 'Weight', value: '0.00 / 100.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - ], - style: { backgroundColor: '#6e53dc' }, - }, - ], - }, - { - name: 'Vesu Fusion USDC', - id: 'vesu_fusion_usdc', - apy: 0.0849054883852517, - depositToken: [ - '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', - ], - leverage: 1, - contract: [ - { - name: 'USDC', - address: - '0xa858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c', - }, - ], - tvlUsd: 1006.076823806659, - status: { number: 1, value: 'Hot & New 🔥' }, - riskFactor: 0.75, - logos: [ - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png', - ], - isAudited: true, - auditUrl: - 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', - actions: [], - investmentFlows: [ - { - title: 'Your Deposit', - subItems: [ - { key: 'Net yield', value: '8.49%' }, - { key: 'Performance Fee', value: '10.00%' }, - ], - linkedFlows: [ - { - title: 'Pool name: Re7 Starknet Ecosystem', - subItems: [ - { key: 'APY', value: '9.55%' }, - { key: 'Weight', value: '97.81 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Re7 USDC', - subItems: [ - { key: 'APY', value: '4.36%' }, - { key: 'Weight', value: '1.99 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Genesis', - subItems: [ - { key: 'APY', value: '3.95%' }, - { key: 'Weight', value: '0.20 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Alterscope wstETH', - subItems: [ - { key: 'APY', value: '3.85%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope Cornerstone', - subItems: [ - { key: 'APY', value: '3.85%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope CASH', - subItems: [ - { key: 'APY', value: '3.85%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope xSTRK', - subItems: [ - { key: 'APY', value: '3.85%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Re7 rUSDC', - subItems: [ - { key: 'APY', value: '3.85%' }, - { key: 'Weight', value: '0.00 / 100.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - ], - style: { backgroundColor: '#6e53dc' }, - }, - ], - }, - { - name: 'Vesu Fusion ETH', - id: 'vesu_fusion_eth', - apy: 0.047693629534058146, - depositToken: [ - '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', - ], - leverage: 1, - contract: [ - { - name: 'ETH', - address: - '0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca', - }, - ], - tvlUsd: 123.41689619165199, - status: { number: 1, value: 'Hot & New 🔥' }, - riskFactor: 0.75, - logos: ['https://opbnb.bscscan.com/token/images/ether.svg'], - isAudited: true, - auditUrl: - 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', - actions: [], - investmentFlows: [ - { - title: 'Your Deposit', - subItems: [ - { key: 'Net yield', value: '4.77%' }, - { key: 'Performance Fee', value: '10.00%' }, - ], - linkedFlows: [ - { - title: 'Pool name: Re7 wstETH', - subItems: [ - { key: 'APY', value: '5.31%' }, - { key: 'Weight', value: '98.00 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Genesis', - subItems: [ - { key: 'APY', value: '4.92%' }, - { key: 'Weight', value: '2.00 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Re7 USDC', - subItems: [ - { key: 'APY', value: '4.82%' }, - { key: 'Weight', value: '0.00 / 100.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope wstETH', - subItems: [ - { key: 'APY', value: '4.82%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope Cornerstone', - subItems: [ - { key: 'APY', value: '4.82%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope CASH', - subItems: [ - { key: 'APY', value: '4.82%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope xSTRK', - subItems: [ - { key: 'APY', value: '4.82%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Re7 rUSDC', - subItems: [ - { key: 'APY', value: '4.82%' }, - { key: 'Weight', value: '0.00 / 100.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - ], - style: { backgroundColor: '#6e53dc' }, - }, - ], - }, - { - name: 'Vesu Fusion USDT', - id: 'vesu_fusion_usdt', - apy: 0.035171100000000004, - depositToken: [ - '0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8', - ], - leverage: 1, - contract: [ - { - name: 'USDT', - address: - '0x115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c', - }, - ], - tvlUsd: 2.000052, - status: { number: 1, value: 'Hot & New 🔥' }, - riskFactor: 0.75, - logos: [ - 'https://assets.coingecko.com/coins/images/325/small/Tether.png', - ], - isAudited: true, - auditUrl: - 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', - actions: [], - investmentFlows: [ - { - title: 'Your Deposit', - subItems: [ - { key: 'Net yield', value: '3.52%' }, - { key: 'Performance Fee', value: '10.00%' }, - ], - linkedFlows: [ - { - title: 'Pool name: Genesis', - subItems: [ - { key: 'APY', value: '3.91%' }, - { key: 'Weight', value: '100.00 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Alterscope wstETH', - subItems: [ - { key: 'APY', value: '3.84%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope Cornerstone', - subItems: [ - { key: 'APY', value: '3.84%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope CASH', - subItems: [ - { key: 'APY', value: '3.84%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope xSTRK', - subItems: [ - { key: 'APY', value: '3.84%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - ], - style: { backgroundColor: '#6e53dc' }, - }, - ], - }, - { - name: 'Ekubo xSTRK/STRK', - id: 'ekubo_cl_xstrkstrk', - apy: 1.1308996660059625, - depositToken: [ - '0x28d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a', - ], - leverage: 1, - contract: [ - { - name: 'Ekubo xSTRK/STRK', - address: - '0x1f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324', - }, - ], - tvlUsd: 20.53792646308871, - status: { number: 1, value: 'Hot & New 🔥' }, - riskFactor: 0.875, - logos: [ - 'https://dashboard.endur.fi/endur-fi.svg', - 'https://assets.coingecko.com/coins/images/26433/small/starknet.png', - ], - isAudited: true, - auditUrl: - 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', - actions: [], - investmentFlows: [ - { - id: 'base', - title: 'Your Deposit', - subItems: [ - { key: 'Net yield', value: '50.23%' }, - { key: 'Performance Fee', value: '10.00%' }, - ], - linkedFlows: [ - { - title: 'Ekubo xSTRK/STRK', - subItems: [{ key: 'Pool', value: '0.01%, 200 tick spacing' }], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - ], - style: { backgroundColor: '#6e53dc' }, - }, - { - id: 'rebalance', - title: 'Automated Rebalance', - subItems: [{ key: 'Range selection', value: '-200 to 200 ticks' }], - linkedFlows: [ - { - title: 'Ekubo xSTRK/STRK', - subItems: [{ key: 'Pool', value: '0.01%, 200 tick spacing' }], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - ], - style: { backgroundColor: 'purple' }, - }, - ], - }, - { - name: 'xSTRK Sensei', - id: 'xstrk_sensei', - apy: 0.27397975107434713, - depositToken: [ - '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', - ], - leverage: 2.374827546066231, - contract: [ - { - name: 'frmDNMMSTRKxSTRK', - address: - '0x7023a5cadc8a5db80e4f0fde6b330cbd3c17bbbf9cb145cbabd7bd5e6fb7b0b', - }, - ], - tvlUsd: 51663.98830321935, - status: { number: 3, value: 'Active' }, - riskFactor: 0.75, - logos: [''], - isAudited: false, - actions: [ - { - name: 'Stake STRK to Endur', - protocol: { name: 'Endur', logo: 'https://endur.fi/favicon.ico' }, - token: { name: 'STRK', logo: '/zklend/icons/tokens/strk.svg?w=20' }, - amount: '1000.00', - isDeposit: true, - apy: 0.11536827233126012, - }, - { - name: "Supply's your xSTRK to Vesu", - protocol: { - name: 'Vesu', - logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', - }, - token: { - name: 'xSTRK (Re7 xSTRK)', - logo: '/imagedelivery/c1f44170-c1b0-4531-3d3b-5f0bacfe1300/logo', - }, - amount: '1000.00', - isDeposit: true, - apy: 0.025090809515230683, - }, - { - name: 'Borrow STRK from Vesu', - protocol: { - name: 'Vesu', - logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', - }, - token: { - name: 'STRK (Re7 xSTRK)', - logo: '/zklend/icons/tokens/strk.svg?w=20', - }, - amount: '725.00', - isDeposit: false, - apy: -0.080942, - }, - { - name: 'Loop back to step 1, repeat 3 more times', - protocol: { - name: 'Vesu', - logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', - }, - token: { - name: 'STRK (Re7 xSTRK)', - logo: '/zklend/icons/tokens/strk.svg?w=20', - }, - amount: '541.1958750000001', - isDeposit: true, - apy: 0.2973677521690575, - }, - { - name: 'Re-invest your STRK Rewards every 7 days (Compound)', - protocol: { name: 'Endur', logo: 'https://endur.fi/favicon.ico' }, - token: { name: 'STRK', logo: '/zklend/icons/tokens/strk.svg?w=20' }, - amount: '1000.00', - isDeposit: true, - apy: 0.03126941839594008, - }, - ], - investmentFlows: [], - }, - ], - }); -} +// export async function GETTT() { +// return NextResponse.json({ +// status: true, +// strategies: [ +// { +// name: 'Vesu Fusion STRK', +// id: 'vesu_fusion_strk', +// apy: 0.09792071607840036, +// depositToken: [ +// '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', +// ], +// leverage: 1, +// contract: [ +// { +// name: 'STRK', +// address: +// '0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929', +// }, +// ], +// tvlUsd: 239.321076172105, +// status: { number: 1, value: 'Hot & New 🔥' }, +// riskFactor: 0.75, +// logos: [ +// 'https://assets.coingecko.com/coins/images/26433/small/starknet.png', +// ], +// isAudited: true, +// auditUrl: +// 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', +// actions: [], +// investmentFlows: [ +// { +// title: 'Your Deposit', +// subItems: [ +// { key: 'Net yield', value: '9.79%' }, +// { key: 'Performance Fee', value: '10.00%' }, +// ], +// linkedFlows: [ +// { +// title: 'Pool name: Re7 xSTRK', +// subItems: [ +// { key: 'APY', value: '11.01%' }, +// { key: 'Weight', value: '98.00 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { backgroundColor: '#35484f' }, +// }, +// { +// title: 'Pool name: Genesis', +// subItems: [ +// { key: 'APY', value: '4.32%' }, +// { key: 'Weight', value: '2.00 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { backgroundColor: '#35484f' }, +// }, +// { +// title: 'Pool name: Re7 USDC', +// subItems: [ +// { key: 'APY', value: '4.32%' }, +// { key: 'Weight', value: '0.00 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Re7 Starknet Ecosystem', +// subItems: [ +// { key: 'APY', value: '4.32%' }, +// { key: 'Weight', value: '0.00 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope wstETH', +// subItems: [ +// { key: 'APY', value: '4.32%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope Cornerstone', +// subItems: [ +// { key: 'APY', value: '4.32%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope CASH', +// subItems: [ +// { key: 'APY', value: '4.32%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope xSTRK', +// subItems: [ +// { key: 'APY', value: '4.32%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Re7 rUSDC', +// subItems: [ +// { key: 'APY', value: '4.32%' }, +// { key: 'Weight', value: '0.00 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// ], +// style: { backgroundColor: '#6e53dc' }, +// }, +// ], +// }, +// { +// name: 'Vesu Fusion USDC', +// id: 'vesu_fusion_usdc', +// apy: 0.0849054883852517, +// depositToken: [ +// '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', +// ], +// leverage: 1, +// contract: [ +// { +// name: 'USDC', +// address: +// '0xa858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c', +// }, +// ], +// tvlUsd: 1006.076823806659, +// status: { number: 1, value: 'Hot & New 🔥' }, +// riskFactor: 0.75, +// logos: [ +// 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png', +// ], +// isAudited: true, +// auditUrl: +// 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', +// actions: [], +// investmentFlows: [ +// { +// title: 'Your Deposit', +// subItems: [ +// { key: 'Net yield', value: '8.49%' }, +// { key: 'Performance Fee', value: '10.00%' }, +// ], +// linkedFlows: [ +// { +// title: 'Pool name: Re7 Starknet Ecosystem', +// subItems: [ +// { key: 'APY', value: '9.55%' }, +// { key: 'Weight', value: '97.81 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { backgroundColor: '#35484f' }, +// }, +// { +// title: 'Pool name: Re7 USDC', +// subItems: [ +// { key: 'APY', value: '4.36%' }, +// { key: 'Weight', value: '1.99 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { backgroundColor: '#35484f' }, +// }, +// { +// title: 'Pool name: Genesis', +// subItems: [ +// { key: 'APY', value: '3.95%' }, +// { key: 'Weight', value: '0.20 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { backgroundColor: '#35484f' }, +// }, +// { +// title: 'Pool name: Alterscope wstETH', +// subItems: [ +// { key: 'APY', value: '3.85%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope Cornerstone', +// subItems: [ +// { key: 'APY', value: '3.85%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope CASH', +// subItems: [ +// { key: 'APY', value: '3.85%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope xSTRK', +// subItems: [ +// { key: 'APY', value: '3.85%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Re7 rUSDC', +// subItems: [ +// { key: 'APY', value: '3.85%' }, +// { key: 'Weight', value: '0.00 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// ], +// style: { backgroundColor: '#6e53dc' }, +// }, +// ], +// }, +// { +// name: 'Vesu Fusion ETH', +// id: 'vesu_fusion_eth', +// apy: 0.047693629534058146, +// depositToken: [ +// '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', +// ], +// leverage: 1, +// contract: [ +// { +// name: 'ETH', +// address: +// '0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca', +// }, +// ], +// tvlUsd: 123.41689619165199, +// status: { number: 1, value: 'Hot & New 🔥' }, +// riskFactor: 0.75, +// logos: ['https://opbnb.bscscan.com/token/images/ether.svg'], +// isAudited: true, +// auditUrl: +// 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', +// actions: [], +// investmentFlows: [ +// { +// title: 'Your Deposit', +// subItems: [ +// { key: 'Net yield', value: '4.77%' }, +// { key: 'Performance Fee', value: '10.00%' }, +// ], +// linkedFlows: [ +// { +// title: 'Pool name: Re7 wstETH', +// subItems: [ +// { key: 'APY', value: '5.31%' }, +// { key: 'Weight', value: '98.00 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { backgroundColor: '#35484f' }, +// }, +// { +// title: 'Pool name: Genesis', +// subItems: [ +// { key: 'APY', value: '4.92%' }, +// { key: 'Weight', value: '2.00 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { backgroundColor: '#35484f' }, +// }, +// { +// title: 'Pool name: Re7 USDC', +// subItems: [ +// { key: 'APY', value: '4.82%' }, +// { key: 'Weight', value: '0.00 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope wstETH', +// subItems: [ +// { key: 'APY', value: '4.82%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope Cornerstone', +// subItems: [ +// { key: 'APY', value: '4.82%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope CASH', +// subItems: [ +// { key: 'APY', value: '4.82%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope xSTRK', +// subItems: [ +// { key: 'APY', value: '4.82%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Re7 rUSDC', +// subItems: [ +// { key: 'APY', value: '4.82%' }, +// { key: 'Weight', value: '0.00 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// ], +// style: { backgroundColor: '#6e53dc' }, +// }, +// ], +// }, +// { +// name: 'Vesu Fusion USDT', +// id: 'vesu_fusion_usdt', +// apy: 0.035171100000000004, +// depositToken: [ +// '0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8', +// ], +// leverage: 1, +// contract: [ +// { +// name: 'USDT', +// address: +// '0x115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c', +// }, +// ], +// tvlUsd: 2.000052, +// status: { number: 1, value: 'Hot & New 🔥' }, +// riskFactor: 0.75, +// logos: [ +// 'https://assets.coingecko.com/coins/images/325/small/Tether.png', +// ], +// isAudited: true, +// auditUrl: +// 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', +// actions: [], +// investmentFlows: [ +// { +// title: 'Your Deposit', +// subItems: [ +// { key: 'Net yield', value: '3.52%' }, +// { key: 'Performance Fee', value: '10.00%' }, +// ], +// linkedFlows: [ +// { +// title: 'Pool name: Genesis', +// subItems: [ +// { key: 'APY', value: '3.91%' }, +// { key: 'Weight', value: '100.00 / 100.00%' }, +// ], +// linkedFlows: [], +// style: { backgroundColor: '#35484f' }, +// }, +// { +// title: 'Pool name: Alterscope wstETH', +// subItems: [ +// { key: 'APY', value: '3.84%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope Cornerstone', +// subItems: [ +// { key: 'APY', value: '3.84%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope CASH', +// subItems: [ +// { key: 'APY', value: '3.84%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// { +// title: 'Pool name: Alterscope xSTRK', +// subItems: [ +// { key: 'APY', value: '3.84%' }, +// { key: 'Weight', value: '0.00 / 20.00%' }, +// ], +// linkedFlows: [], +// style: { color: 'gray' }, +// }, +// ], +// style: { backgroundColor: '#6e53dc' }, +// }, +// ], +// }, +// { +// name: 'Ekubo xSTRK/STRK', +// id: 'ekubo_cl_xstrkstrk', +// apy: 1.1308996660059625, +// depositToken: [ +// '0x28d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a', +// ], +// leverage: 1, +// contract: [ +// { +// name: 'Ekubo xSTRK/STRK', +// address: +// '0x1f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324', +// }, +// ], +// tvlUsd: 20.53792646308871, +// status: { number: 1, value: 'Hot & New 🔥' }, +// riskFactor: 0.875, +// logos: [ +// 'https://dashboard.endur.fi/endur-fi.svg', +// 'https://assets.coingecko.com/coins/images/26433/small/starknet.png', +// ], +// isAudited: true, +// auditUrl: +// 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', +// actions: [], +// investmentFlows: [ +// { +// id: 'base', +// title: 'Your Deposit', +// subItems: [ +// { key: 'Net yield', value: '50.23%' }, +// { key: 'Performance Fee', value: '10.00%' }, +// ], +// linkedFlows: [ +// { +// title: 'Ekubo xSTRK/STRK', +// subItems: [{ key: 'Pool', value: '0.01%, 200 tick spacing' }], +// linkedFlows: [], +// style: { backgroundColor: '#35484f' }, +// }, +// ], +// style: { backgroundColor: '#6e53dc' }, +// }, +// { +// id: 'rebalance', +// title: 'Automated Rebalance', +// subItems: [{ key: 'Range selection', value: '-200 to 200 ticks' }], +// linkedFlows: [ +// { +// title: 'Ekubo xSTRK/STRK', +// subItems: [{ key: 'Pool', value: '0.01%, 200 tick spacing' }], +// linkedFlows: [], +// style: { backgroundColor: '#35484f' }, +// }, +// ], +// style: { backgroundColor: 'purple' }, +// }, +// ], +// }, +// { +// name: 'xSTRK Sensei', +// id: 'xstrk_sensei', +// apy: 0.27397975107434713, +// depositToken: [ +// '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', +// ], +// leverage: 2.374827546066231, +// contract: [ +// { +// name: 'frmDNMMSTRKxSTRK', +// address: +// '0x7023a5cadc8a5db80e4f0fde6b330cbd3c17bbbf9cb145cbabd7bd5e6fb7b0b', +// }, +// ], +// tvlUsd: 51663.98830321935, +// status: { number: 3, value: 'Active' }, +// riskFactor: 0.75, +// logos: [''], +// isAudited: false, +// actions: [ +// { +// name: 'Stake STRK to Endur', +// protocol: { name: 'Endur', logo: 'https://endur.fi/favicon.ico' }, +// token: { name: 'STRK', logo: '/zklend/icons/tokens/strk.svg?w=20' }, +// amount: '1000.00', +// isDeposit: true, +// apy: 0.11536827233126012, +// }, +// { +// name: "Supply's your xSTRK to Vesu", +// protocol: { +// name: 'Vesu', +// logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', +// }, +// token: { +// name: 'xSTRK (Re7 xSTRK)', +// logo: '/imagedelivery/c1f44170-c1b0-4531-3d3b-5f0bacfe1300/logo', +// }, +// amount: '1000.00', +// isDeposit: true, +// apy: 0.025090809515230683, +// }, +// { +// name: 'Borrow STRK from Vesu', +// protocol: { +// name: 'Vesu', +// logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', +// }, +// token: { +// name: 'STRK (Re7 xSTRK)', +// logo: '/zklend/icons/tokens/strk.svg?w=20', +// }, +// amount: '725.00', +// isDeposit: false, +// apy: -0.080942, +// }, +// { +// name: 'Loop back to step 1, repeat 3 more times', +// protocol: { +// name: 'Vesu', +// logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', +// }, +// token: { +// name: 'STRK (Re7 xSTRK)', +// logo: '/zklend/icons/tokens/strk.svg?w=20', +// }, +// amount: '541.1958750000001', +// isDeposit: true, +// apy: 0.2973677521690575, +// }, +// { +// name: 'Re-invest your STRK Rewards every 7 days (Compound)', +// protocol: { name: 'Endur', logo: 'https://endur.fi/favicon.ico' }, +// token: { name: 'STRK', logo: '/zklend/icons/tokens/strk.svg?w=20' }, +// amount: '1000.00', +// isDeposit: true, +// apy: 0.03126941839594008, +// }, +// ], +// investmentFlows: [], +// }, +// ], +// }); +// } From c708b7ca4c5b034140147876c4bd8f303beb5c04 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Sun, 6 Apr 2025 04:48:36 +0530 Subject: [PATCH 04/30] fix build --- src/app/api/raffle/_route.ts | 157 +++++++++++++++++++++++++++++++++++ src/app/api/raffle/route.ts | 157 ----------------------------------- src/app/raffle/_page.tsx | 115 +++++++++++++++++++++++++ src/app/raffle/page.tsx | 115 ------------------------- 4 files changed, 272 insertions(+), 272 deletions(-) create mode 100644 src/app/api/raffle/_route.ts delete mode 100644 src/app/api/raffle/route.ts create mode 100644 src/app/raffle/_page.tsx delete mode 100644 src/app/raffle/page.tsx diff --git a/src/app/api/raffle/_route.ts b/src/app/api/raffle/_route.ts new file mode 100644 index 00000000..df33e809 --- /dev/null +++ b/src/app/api/raffle/_route.ts @@ -0,0 +1,157 @@ +// import { NextResponse } from 'next/server'; + +// import { db } from '@/db'; +// import { getStrategies } from '@/store/strategies.atoms'; +// import { standariseAddress } from '@/utils'; + +// export async function POST(req: Request) { +// const { address, type } = await req.json(); + +// if (!address || !type) { +// return NextResponse.json({ +// success: false, +// message: 'address not found', +// user: null, +// }); +// } + +// if (!type || !['SHARED_ON_X', 'ACTIVE_DEPOSITS', 'REGISTER'].includes(type)) { +// return NextResponse.json({ +// success: false, +// message: 'Invalid type', +// }); +// } + +// // standardised address +// let parsedAddress = address; +// try { +// parsedAddress = standariseAddress(address); +// } catch (e) { +// throw new Error('Invalid address'); +// } + +// const user = await db.user.findFirst({ +// where: { +// address: parsedAddress, +// }, +// }); + +// if (!user) { +// return NextResponse.json({ +// success: false, +// message: 'User not found', +// user: null, +// }); +// } + +// if (type === 'REGISTER') { +// const raffleUser = await db.raffle.findFirst({ +// where: { +// userId: user.id, +// }, +// }); + +// if (raffleUser) { +// return NextResponse.json({ +// success: false, +// message: 'User already registered', +// user: raffleUser, +// }); +// } + +// const createdUser = await db.raffle.create({ +// data: { +// isRaffleParticipant: true, +// User: { +// connect: { +// address: parsedAddress, +// }, +// }, +// }, +// }); + +// return NextResponse.json({ +// success: true, +// message: 'User registered for raffle successfully', +// user: createdUser, +// }); +// } + +// const raffleUser = await db.raffle.findFirst({ +// where: { +// userId: user.id, +// isRaffleParticipant: true, +// }, +// }); + +// if (!raffleUser) { +// return NextResponse.json({ +// success: false, +// message: 'Registered user not found', +// user: null, +// }); +// } + +// if (type === 'SHARED_ON_X') { +// const updatedUser = await db.raffle.update({ +// where: { +// raffleId: raffleUser.raffleId, +// }, +// data: { +// sharedOnX: true, +// }, +// }); + +// return NextResponse.json({ +// success: true, +// message: 'Shared on X successfully', +// user: updatedUser, +// }); +// } + +// if (type === 'ACTIVE_DEPOSITS') { +// const strategies = getStrategies(); + +// const values = strategies.map(async (strategy) => { +// const balanceInfo = await strategy.getUserTVL(parsedAddress); +// return { +// id: strategy.id, +// usdValue: balanceInfo.usdValue, +// tokenInfo: { +// name: balanceInfo.tokenInfo.name, +// symbol: balanceInfo.tokenInfo.name, +// logo: balanceInfo.tokenInfo.logo, +// decimals: balanceInfo.tokenInfo.decimals, +// displayDecimals: balanceInfo.tokenInfo.displayDecimals, +// }, +// amount: balanceInfo.amount.toEtherStr(), +// }; +// }); + +// const result = await Promise.all(values); +// const sum = result.reduce((acc, item) => acc + item.usdValue, 0); + +// if (sum > 10) { +// const createdUser = await db.raffle.update({ +// where: { +// raffleId: raffleUser.raffleId, +// }, +// data: { +// activeDeposits: true, +// }, +// }); + +// return NextResponse.json({ +// success: true, +// message: 'Active deposits found', +// user: createdUser, +// }); +// } + +// return NextResponse.json({ +// success: false, +// message: 'No active deposits found', +// user: null, +// }); +// } +// } diff --git a/src/app/api/raffle/route.ts b/src/app/api/raffle/route.ts deleted file mode 100644 index d4182be3..00000000 --- a/src/app/api/raffle/route.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { NextResponse } from 'next/server'; - -import { db } from '@/db'; -import { getStrategies } from '@/store/strategies.atoms'; -import { standariseAddress } from '@/utils'; - -export async function POST(req: Request) { - const { address, type } = await req.json(); - - if (!address || !type) { - return NextResponse.json({ - success: false, - message: 'address not found', - user: null, - }); - } - - if (!type || !['SHARED_ON_X', 'ACTIVE_DEPOSITS', 'REGISTER'].includes(type)) { - return NextResponse.json({ - success: false, - message: 'Invalid type', - }); - } - - // standardised address - let parsedAddress = address; - try { - parsedAddress = standariseAddress(address); - } catch (e) { - throw new Error('Invalid address'); - } - - const user = await db.user.findFirst({ - where: { - address: parsedAddress, - }, - }); - - if (!user) { - return NextResponse.json({ - success: false, - message: 'User not found', - user: null, - }); - } - - if (type === 'REGISTER') { - const raffleUser = await db.raffle.findFirst({ - where: { - userId: user.id, - }, - }); - - if (raffleUser) { - return NextResponse.json({ - success: false, - message: 'User already registered', - user: raffleUser, - }); - } - - const createdUser = await db.raffle.create({ - data: { - isRaffleParticipant: true, - User: { - connect: { - address: parsedAddress, - }, - }, - }, - }); - - return NextResponse.json({ - success: true, - message: 'User registered for raffle successfully', - user: createdUser, - }); - } - - const raffleUser = await db.raffle.findFirst({ - where: { - userId: user.id, - isRaffleParticipant: true, - }, - }); - - if (!raffleUser) { - return NextResponse.json({ - success: false, - message: 'Registered user not found', - user: null, - }); - } - - if (type === 'SHARED_ON_X') { - const updatedUser = await db.raffle.update({ - where: { - raffleId: raffleUser.raffleId, - }, - data: { - sharedOnX: true, - }, - }); - - return NextResponse.json({ - success: true, - message: 'Shared on X successfully', - user: updatedUser, - }); - } - - if (type === 'ACTIVE_DEPOSITS') { - const strategies = getStrategies(); - - const values = strategies.map(async (strategy) => { - const balanceInfo = await strategy.getUserTVL(parsedAddress); - return { - id: strategy.id, - usdValue: balanceInfo.usdValue, - tokenInfo: { - name: balanceInfo.tokenInfo.name, - symbol: balanceInfo.tokenInfo.name, - logo: balanceInfo.tokenInfo.logo, - decimals: balanceInfo.tokenInfo.decimals, - displayDecimals: balanceInfo.tokenInfo.displayDecimals, - }, - amount: balanceInfo.amount.toEtherStr(), - }; - }); - - const result = await Promise.all(values); - const sum = result.reduce((acc, item) => acc + item.usdValue, 0); - - if (sum > 10) { - const createdUser = await db.raffle.update({ - where: { - raffleId: raffleUser.raffleId, - }, - data: { - activeDeposits: true, - }, - }); - - return NextResponse.json({ - success: true, - message: 'Active deposits found', - user: createdUser, - }); - } - - return NextResponse.json({ - success: false, - message: 'No active deposits found', - user: null, - }); - } -} diff --git a/src/app/raffle/_page.tsx b/src/app/raffle/_page.tsx new file mode 100644 index 00000000..0db1e8ed --- /dev/null +++ b/src/app/raffle/_page.tsx @@ -0,0 +1,115 @@ +// import { NextPage } from 'next'; +// import Image from 'next/image'; +// import React from 'react'; +// import { Button } from '@chakra-ui/react'; + +// import ActiveDeposits from './_components/active-deposits'; +// import RaffleTimer from './_components/raffle-timer'; +// import RegisterRaffle from './_components/register-raffle'; +// import ShareOnX from './_components/share-on-x'; +// import TotalTickets from './_components/total-tickets'; +// import { getHosturl } from '@/utils'; + +// const Raffle: NextPage = () => { +// return ( +//
+//
+//
+//

+// Devcon raffle +//

+//

+// Each day, we shall select 3 winners who will receive exclusive merch +// during Starkspace (Devcon, Bangkok) +//

+ +// +//
+ +// Raffle Hero Image +//
+ +//
+//
+//

+// Earn Raffle tickets for every task and increase chances to win +//

+ +//
+//

+// Raffle end's in +//

+// +//
+//
+//
+ +//
+//
+//

Tasks

+//
+//

+// Participate and +// +// {' '} +// get Raffle tickets +// +//

+ +// +//
+ +//
+// + +// + +// +//
+//
+//
+ +//
+//
+// Rules: +//
+//

+// 1. 3 unique winners will be selected each day +//

+//

+// 2. You just have to register once and you will be part of each round +// automatically +//

+//

+// 3. You have to register if you want to participate. This mean you or +// anyone on your behalf will be available to collect the merch.{' '} +//

+//

+// 4. The rewards will be in the form of exclusive merch reserved for you +//

+//

+// 5. Selected winners can collect their merch on 13th Nov, from The Fig +// Lobby, Bangkok +//

+//

+// 6. Winners will be announced on our socials (i.e. X, TG, etc.) +// everyday +//

+//
+//
+// ); +// }; + +// export default Raffle; diff --git a/src/app/raffle/page.tsx b/src/app/raffle/page.tsx deleted file mode 100644 index e260a452..00000000 --- a/src/app/raffle/page.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { NextPage } from 'next'; -import Image from 'next/image'; -import React from 'react'; -import { Button } from '@chakra-ui/react'; - -import ActiveDeposits from './_components/active-deposits'; -import RaffleTimer from './_components/raffle-timer'; -import RegisterRaffle from './_components/register-raffle'; -import ShareOnX from './_components/share-on-x'; -import TotalTickets from './_components/total-tickets'; -import { getHosturl } from '@/utils'; - -const Raffle: NextPage = () => { - return ( -
-
-
-

- Devcon raffle -

-

- Each day, we shall select 3 winners who will receive exclusive merch - during Starkspace (Devcon, Bangkok) -

- - -
- - Raffle Hero Image -
- -
-
-

- Earn Raffle tickets for every task and increase chances to win -

- -
-

- Raffle end's in -

- -
-
-
- -
-
-

Tasks

-
-

- Participate and - - {' '} - get Raffle tickets - -

- - -
- -
- - - - - -
-
-
- -
-
- Rules: -
-

- 1. 3 unique winners will be selected each day -

-

- 2. You just have to register once and you will be part of each round - automatically -

-

- 3. You have to register if you want to participate. This mean you or - anyone on your behalf will be available to collect the merch.{' '} -

-

- 4. The rewards will be in the form of exclusive merch reserved for you -

-

- 5. Selected winners can collect their merch on 13th Nov, from The Fig - Lobby, Bangkok -

-

- 6. Winners will be announced on our socials (i.e. X, TG, etc.) - everyday -

-
-
- ); -}; - -export default Raffle; From 447b484b31a418f7935330c40ac14af8ebf5e13f Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Mon, 7 Apr 2025 03:52:50 +0530 Subject: [PATCH 05/30] fix form reset bug, cache issue, stats processing --- src/app/api/stats/route.ts | 5 + src/app/api/strategies/route.ts | 1304 ++++++++++------- .../[strategyId]/_components/Strategy.tsx | 70 +- src/components/AmountInput.tsx | 819 ++++++----- src/components/Deposit.tsx | 21 +- src/components/YieldCard.tsx | 23 +- src/store/strategies.atoms.tsx | 1 + src/store/strkfarm.atoms.ts | 4 + src/strategies/IStrategy.ts | 3 +- src/strategies/auto_strk.strat.ts | 2 +- src/strategies/delta_neutral_mm.ts | 2 +- 11 files changed, 1246 insertions(+), 1008 deletions(-) diff --git a/src/app/api/stats/route.ts b/src/app/api/stats/route.ts index 45c2aee5..6ad5a313 100755 --- a/src/app/api/stats/route.ts +++ b/src/app/api/stats/route.ts @@ -35,7 +35,12 @@ export async function GET(_req: Request) { const response = NextResponse.json({ tvl: result.reduce((a, b) => a + b, 0), + lastUpdated: new Date().toISOString(), }); + response.headers.set( + 'Cache-Control', + `s-maxage=${revalidate}, stale-while-revalidate=180`, + ); return response; } diff --git a/src/app/api/strategies/route.ts b/src/app/api/strategies/route.ts index 112267d2..4c1c6f4c 100755 --- a/src/app/api/strategies/route.ts +++ b/src/app/api/strategies/route.ts @@ -61,6 +61,10 @@ async function getStrategyInfo( name: strategy.name, id: strategy.id, apy: strategy.netYield, + apySplit: { + baseApy: strategy.netYield, + rewardsApy: 0, + }, depositToken: ( await strategy.depositMethods({ amount: MyNumber.fromZero(), @@ -139,585 +143,745 @@ export async function GET(req: Request) { const stratsData = await Promise.all(stratsDataProms); try { - return NextResponse.json({ + const response = NextResponse.json({ status: true, strategies: stratsData, + lastUpdated: new Date().toISOString(), }); + response.headers.set( + 'Cache-Control', + `s-maxage=${revalidate}, stale-while-revalidate=180`, + ); + return response; } catch (err) { console.error('Error /api/strategies', err); return NextResponse.json({ status: false, strategies: [], + lastUpdated: new Date().toISOString(), }); } } -// export async function GETTT() { -// return NextResponse.json({ -// status: true, -// strategies: [ -// { -// name: 'Vesu Fusion STRK', -// id: 'vesu_fusion_strk', -// apy: 0.09792071607840036, -// depositToken: [ -// '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', -// ], -// leverage: 1, -// contract: [ -// { -// name: 'STRK', -// address: -// '0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929', -// }, -// ], -// tvlUsd: 239.321076172105, -// status: { number: 1, value: 'Hot & New 🔥' }, -// riskFactor: 0.75, -// logos: [ -// 'https://assets.coingecko.com/coins/images/26433/small/starknet.png', -// ], -// isAudited: true, -// auditUrl: -// 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', -// actions: [], -// investmentFlows: [ -// { -// title: 'Your Deposit', -// subItems: [ -// { key: 'Net yield', value: '9.79%' }, -// { key: 'Performance Fee', value: '10.00%' }, -// ], -// linkedFlows: [ -// { -// title: 'Pool name: Re7 xSTRK', -// subItems: [ -// { key: 'APY', value: '11.01%' }, -// { key: 'Weight', value: '98.00 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { backgroundColor: '#35484f' }, -// }, -// { -// title: 'Pool name: Genesis', -// subItems: [ -// { key: 'APY', value: '4.32%' }, -// { key: 'Weight', value: '2.00 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { backgroundColor: '#35484f' }, -// }, -// { -// title: 'Pool name: Re7 USDC', -// subItems: [ -// { key: 'APY', value: '4.32%' }, -// { key: 'Weight', value: '0.00 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Re7 Starknet Ecosystem', -// subItems: [ -// { key: 'APY', value: '4.32%' }, -// { key: 'Weight', value: '0.00 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope wstETH', -// subItems: [ -// { key: 'APY', value: '4.32%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope Cornerstone', -// subItems: [ -// { key: 'APY', value: '4.32%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope CASH', -// subItems: [ -// { key: 'APY', value: '4.32%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope xSTRK', -// subItems: [ -// { key: 'APY', value: '4.32%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Re7 rUSDC', -// subItems: [ -// { key: 'APY', value: '4.32%' }, -// { key: 'Weight', value: '0.00 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// ], -// style: { backgroundColor: '#6e53dc' }, -// }, -// ], -// }, -// { -// name: 'Vesu Fusion USDC', -// id: 'vesu_fusion_usdc', -// apy: 0.0849054883852517, -// depositToken: [ -// '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', -// ], -// leverage: 1, -// contract: [ -// { -// name: 'USDC', -// address: -// '0xa858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c', -// }, -// ], -// tvlUsd: 1006.076823806659, -// status: { number: 1, value: 'Hot & New 🔥' }, -// riskFactor: 0.75, -// logos: [ -// 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png', -// ], -// isAudited: true, -// auditUrl: -// 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', -// actions: [], -// investmentFlows: [ -// { -// title: 'Your Deposit', -// subItems: [ -// { key: 'Net yield', value: '8.49%' }, -// { key: 'Performance Fee', value: '10.00%' }, -// ], -// linkedFlows: [ -// { -// title: 'Pool name: Re7 Starknet Ecosystem', -// subItems: [ -// { key: 'APY', value: '9.55%' }, -// { key: 'Weight', value: '97.81 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { backgroundColor: '#35484f' }, -// }, -// { -// title: 'Pool name: Re7 USDC', -// subItems: [ -// { key: 'APY', value: '4.36%' }, -// { key: 'Weight', value: '1.99 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { backgroundColor: '#35484f' }, -// }, -// { -// title: 'Pool name: Genesis', -// subItems: [ -// { key: 'APY', value: '3.95%' }, -// { key: 'Weight', value: '0.20 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { backgroundColor: '#35484f' }, -// }, -// { -// title: 'Pool name: Alterscope wstETH', -// subItems: [ -// { key: 'APY', value: '3.85%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope Cornerstone', -// subItems: [ -// { key: 'APY', value: '3.85%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope CASH', -// subItems: [ -// { key: 'APY', value: '3.85%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope xSTRK', -// subItems: [ -// { key: 'APY', value: '3.85%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Re7 rUSDC', -// subItems: [ -// { key: 'APY', value: '3.85%' }, -// { key: 'Weight', value: '0.00 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// ], -// style: { backgroundColor: '#6e53dc' }, -// }, -// ], -// }, -// { -// name: 'Vesu Fusion ETH', -// id: 'vesu_fusion_eth', -// apy: 0.047693629534058146, -// depositToken: [ -// '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', -// ], -// leverage: 1, -// contract: [ -// { -// name: 'ETH', -// address: -// '0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca', -// }, -// ], -// tvlUsd: 123.41689619165199, -// status: { number: 1, value: 'Hot & New 🔥' }, -// riskFactor: 0.75, -// logos: ['https://opbnb.bscscan.com/token/images/ether.svg'], -// isAudited: true, -// auditUrl: -// 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', -// actions: [], -// investmentFlows: [ -// { -// title: 'Your Deposit', -// subItems: [ -// { key: 'Net yield', value: '4.77%' }, -// { key: 'Performance Fee', value: '10.00%' }, -// ], -// linkedFlows: [ -// { -// title: 'Pool name: Re7 wstETH', -// subItems: [ -// { key: 'APY', value: '5.31%' }, -// { key: 'Weight', value: '98.00 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { backgroundColor: '#35484f' }, -// }, -// { -// title: 'Pool name: Genesis', -// subItems: [ -// { key: 'APY', value: '4.92%' }, -// { key: 'Weight', value: '2.00 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { backgroundColor: '#35484f' }, -// }, -// { -// title: 'Pool name: Re7 USDC', -// subItems: [ -// { key: 'APY', value: '4.82%' }, -// { key: 'Weight', value: '0.00 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope wstETH', -// subItems: [ -// { key: 'APY', value: '4.82%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope Cornerstone', -// subItems: [ -// { key: 'APY', value: '4.82%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope CASH', -// subItems: [ -// { key: 'APY', value: '4.82%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope xSTRK', -// subItems: [ -// { key: 'APY', value: '4.82%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Re7 rUSDC', -// subItems: [ -// { key: 'APY', value: '4.82%' }, -// { key: 'Weight', value: '0.00 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// ], -// style: { backgroundColor: '#6e53dc' }, -// }, -// ], -// }, -// { -// name: 'Vesu Fusion USDT', -// id: 'vesu_fusion_usdt', -// apy: 0.035171100000000004, -// depositToken: [ -// '0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8', -// ], -// leverage: 1, -// contract: [ -// { -// name: 'USDT', -// address: -// '0x115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c', -// }, -// ], -// tvlUsd: 2.000052, -// status: { number: 1, value: 'Hot & New 🔥' }, -// riskFactor: 0.75, -// logos: [ -// 'https://assets.coingecko.com/coins/images/325/small/Tether.png', -// ], -// isAudited: true, -// auditUrl: -// 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', -// actions: [], -// investmentFlows: [ -// { -// title: 'Your Deposit', -// subItems: [ -// { key: 'Net yield', value: '3.52%' }, -// { key: 'Performance Fee', value: '10.00%' }, -// ], -// linkedFlows: [ -// { -// title: 'Pool name: Genesis', -// subItems: [ -// { key: 'APY', value: '3.91%' }, -// { key: 'Weight', value: '100.00 / 100.00%' }, -// ], -// linkedFlows: [], -// style: { backgroundColor: '#35484f' }, -// }, -// { -// title: 'Pool name: Alterscope wstETH', -// subItems: [ -// { key: 'APY', value: '3.84%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope Cornerstone', -// subItems: [ -// { key: 'APY', value: '3.84%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope CASH', -// subItems: [ -// { key: 'APY', value: '3.84%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// { -// title: 'Pool name: Alterscope xSTRK', -// subItems: [ -// { key: 'APY', value: '3.84%' }, -// { key: 'Weight', value: '0.00 / 20.00%' }, -// ], -// linkedFlows: [], -// style: { color: 'gray' }, -// }, -// ], -// style: { backgroundColor: '#6e53dc' }, -// }, -// ], -// }, -// { -// name: 'Ekubo xSTRK/STRK', -// id: 'ekubo_cl_xstrkstrk', -// apy: 1.1308996660059625, -// depositToken: [ -// '0x28d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a', -// ], -// leverage: 1, -// contract: [ -// { -// name: 'Ekubo xSTRK/STRK', -// address: -// '0x1f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324', -// }, -// ], -// tvlUsd: 20.53792646308871, -// status: { number: 1, value: 'Hot & New 🔥' }, -// riskFactor: 0.875, -// logos: [ -// 'https://dashboard.endur.fi/endur-fi.svg', -// 'https://assets.coingecko.com/coins/images/26433/small/starknet.png', -// ], -// isAudited: true, -// auditUrl: -// 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', -// actions: [], -// investmentFlows: [ -// { -// id: 'base', -// title: 'Your Deposit', -// subItems: [ -// { key: 'Net yield', value: '50.23%' }, -// { key: 'Performance Fee', value: '10.00%' }, -// ], -// linkedFlows: [ -// { -// title: 'Ekubo xSTRK/STRK', -// subItems: [{ key: 'Pool', value: '0.01%, 200 tick spacing' }], -// linkedFlows: [], -// style: { backgroundColor: '#35484f' }, -// }, -// ], -// style: { backgroundColor: '#6e53dc' }, -// }, -// { -// id: 'rebalance', -// title: 'Automated Rebalance', -// subItems: [{ key: 'Range selection', value: '-200 to 200 ticks' }], -// linkedFlows: [ -// { -// title: 'Ekubo xSTRK/STRK', -// subItems: [{ key: 'Pool', value: '0.01%, 200 tick spacing' }], -// linkedFlows: [], -// style: { backgroundColor: '#35484f' }, -// }, -// ], -// style: { backgroundColor: 'purple' }, -// }, -// ], -// }, -// { -// name: 'xSTRK Sensei', -// id: 'xstrk_sensei', -// apy: 0.27397975107434713, -// depositToken: [ -// '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', -// ], -// leverage: 2.374827546066231, -// contract: [ -// { -// name: 'frmDNMMSTRKxSTRK', -// address: -// '0x7023a5cadc8a5db80e4f0fde6b330cbd3c17bbbf9cb145cbabd7bd5e6fb7b0b', -// }, -// ], -// tvlUsd: 51663.98830321935, -// status: { number: 3, value: 'Active' }, -// riskFactor: 0.75, -// logos: [''], -// isAudited: false, -// actions: [ -// { -// name: 'Stake STRK to Endur', -// protocol: { name: 'Endur', logo: 'https://endur.fi/favicon.ico' }, -// token: { name: 'STRK', logo: '/zklend/icons/tokens/strk.svg?w=20' }, -// amount: '1000.00', -// isDeposit: true, -// apy: 0.11536827233126012, -// }, -// { -// name: "Supply's your xSTRK to Vesu", -// protocol: { -// name: 'Vesu', -// logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', -// }, -// token: { -// name: 'xSTRK (Re7 xSTRK)', -// logo: '/imagedelivery/c1f44170-c1b0-4531-3d3b-5f0bacfe1300/logo', -// }, -// amount: '1000.00', -// isDeposit: true, -// apy: 0.025090809515230683, -// }, -// { -// name: 'Borrow STRK from Vesu', -// protocol: { -// name: 'Vesu', -// logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', -// }, -// token: { -// name: 'STRK (Re7 xSTRK)', -// logo: '/zklend/icons/tokens/strk.svg?w=20', -// }, -// amount: '725.00', -// isDeposit: false, -// apy: -0.080942, -// }, -// { -// name: 'Loop back to step 1, repeat 3 more times', -// protocol: { -// name: 'Vesu', -// logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', -// }, -// token: { -// name: 'STRK (Re7 xSTRK)', -// logo: '/zklend/icons/tokens/strk.svg?w=20', -// }, -// amount: '541.1958750000001', -// isDeposit: true, -// apy: 0.2973677521690575, -// }, -// { -// name: 'Re-invest your STRK Rewards every 7 days (Compound)', -// protocol: { name: 'Endur', logo: 'https://endur.fi/favicon.ico' }, -// token: { name: 'STRK', logo: '/zklend/icons/tokens/strk.svg?w=20' }, -// amount: '1000.00', -// isDeposit: true, -// apy: 0.03126941839594008, -// }, -// ], -// investmentFlows: [], -// }, -// ], -// }); -// } +async function GETT() { + return NextResponse.json({ + status: true, + strategies: [ + { + name: 'Vesu Fusion STRK', + id: 'vesu_fusion_strk', + apy: 0.09702402495556883, + apySplit: { baseApy: 0.09702402495556883, rewardsApy: 0 }, + depositToken: [ + '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', + ], + leverage: 1, + contract: [ + { + name: 'STRK', + address: + '0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929', + }, + ], + tvlUsd: 213.84654751138, + status: { number: 1, value: 'Hot & New 🔥' }, + riskFactor: 0.75, + logos: [ + 'https://assets.coingecko.com/coins/images/26433/small/starknet.png', + ], + isAudited: true, + auditUrl: + 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', + actions: [], + investmentFlows: [ + { + title: 'Your Deposit', + subItems: [ + { key: 'Net yield', value: '9.70%' }, + { key: 'Performance Fee', value: '10.00%' }, + ], + linkedFlows: [ + { + title: 'Pool name: Re7 xSTRK', + subItems: [ + { key: 'APY', value: '10.91%' }, + { key: 'Weight', value: '98.00 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Genesis', + subItems: [ + { key: 'APY', value: '4.36%' }, + { key: 'Weight', value: '2.00 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Re7 USDC', + subItems: [ + { key: 'APY', value: '4.36%' }, + { key: 'Weight', value: '0.00 / 100.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Re7 Starknet Ecosystem', + subItems: [ + { key: 'APY', value: '4.36%' }, + { key: 'Weight', value: '0.00 / 100.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope wstETH', + subItems: [ + { key: 'APY', value: '4.36%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope Cornerstone', + subItems: [ + { key: 'APY', value: '4.36%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope CASH', + subItems: [ + { key: 'APY', value: '4.36%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope xSTRK', + subItems: [ + { key: 'APY', value: '4.36%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Re7 rUSDC', + subItems: [ + { key: 'APY', value: '4.36%' }, + { key: 'Weight', value: '0.00 / 100.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + ], + style: { backgroundColor: '#6e53dc' }, + }, + ], + }, + { + name: 'Vesu Fusion USDC', + id: 'vesu_fusion_usdc', + apy: 0.08222842193428995, + apySplit: { baseApy: 0.08222842193428995, rewardsApy: 0 }, + depositToken: [ + '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', + ], + leverage: 1, + contract: [ + { + name: 'USDC', + address: + '0xa858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c', + }, + ], + tvlUsd: 1016.454832861074, + status: { number: 1, value: 'Hot & New 🔥' }, + riskFactor: 0.75, + logos: [ + 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png', + ], + isAudited: true, + auditUrl: + 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', + actions: [], + investmentFlows: [ + { + title: 'Your Deposit', + subItems: [ + { key: 'Net yield', value: '8.22%' }, + { key: 'Performance Fee', value: '10.00%' }, + ], + linkedFlows: [ + { + title: 'Pool name: Re7 Starknet Ecosystem', + subItems: [ + { key: 'APY', value: '9.24%' }, + { key: 'Weight', value: '97.81 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Re7 USDC', + subItems: [ + { key: 'APY', value: '4.39%' }, + { key: 'Weight', value: '1.99 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Genesis', + subItems: [ + { key: 'APY', value: '3.98%' }, + { key: 'Weight', value: '0.20 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Alterscope wstETH', + subItems: [ + { key: 'APY', value: '3.87%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope Cornerstone', + subItems: [ + { key: 'APY', value: '3.87%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope CASH', + subItems: [ + { key: 'APY', value: '3.87%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope xSTRK', + subItems: [ + { key: 'APY', value: '3.87%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Re7 rUSDC', + subItems: [ + { key: 'APY', value: '3.87%' }, + { key: 'Weight', value: '0.00 / 100.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + ], + style: { backgroundColor: '#6e53dc' }, + }, + ], + }, + { + name: 'Vesu Fusion ETH', + id: 'vesu_fusion_eth', + apy: 0.047520955986261756, + apySplit: { baseApy: 0.047520955986261756, rewardsApy: 0 }, + depositToken: [ + '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', + ], + leverage: 1, + contract: [ + { + name: 'ETH', + address: + '0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca', + }, + ], + tvlUsd: 112.54521093847399, + status: { number: 1, value: 'Hot & New 🔥' }, + riskFactor: 0.75, + logos: ['https://opbnb.bscscan.com/token/images/ether.svg'], + isAudited: true, + auditUrl: + 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', + actions: [], + investmentFlows: [ + { + title: 'Your Deposit', + subItems: [ + { key: 'Net yield', value: '4.75%' }, + { key: 'Performance Fee', value: '10.00%' }, + ], + linkedFlows: [ + { + title: 'Pool name: Re7 wstETH', + subItems: [ + { key: 'APY', value: '5.29%' }, + { key: 'Weight', value: '98.00 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Genesis', + subItems: [ + { key: 'APY', value: '4.90%' }, + { key: 'Weight', value: '2.00 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Re7 USDC', + subItems: [ + { key: 'APY', value: '4.80%' }, + { key: 'Weight', value: '0.00 / 100.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope wstETH', + subItems: [ + { key: 'APY', value: '4.80%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope Cornerstone', + subItems: [ + { key: 'APY', value: '4.80%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope CASH', + subItems: [ + { key: 'APY', value: '4.80%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope xSTRK', + subItems: [ + { key: 'APY', value: '4.80%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Re7 rUSDC', + subItems: [ + { key: 'APY', value: '4.80%' }, + { key: 'Weight', value: '0.00 / 100.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + ], + style: { backgroundColor: '#6e53dc' }, + }, + ], + }, + { + name: 'Vesu Fusion USDT', + id: 'vesu_fusion_usdt', + apy: 0.0354024, + apySplit: { baseApy: 0.0354024, rewardsApy: 0 }, + depositToken: [ + '0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8', + ], + leverage: 1, + contract: [ + { + name: 'USDT', + address: + '0x115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c', + }, + ], + tvlUsd: 2.000055, + status: { number: 1, value: 'Hot & New 🔥' }, + riskFactor: 0.75, + logos: [ + 'https://assets.coingecko.com/coins/images/325/small/Tether.png', + ], + isAudited: true, + auditUrl: + 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', + actions: [], + investmentFlows: [ + { + title: 'Your Deposit', + subItems: [ + { key: 'Net yield', value: '3.54%' }, + { key: 'Performance Fee', value: '10.00%' }, + ], + linkedFlows: [ + { + title: 'Pool name: Genesis', + subItems: [ + { key: 'APY', value: '3.93%' }, + { key: 'Weight', value: '100.00 / 100.00%' }, + ], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + { + title: 'Pool name: Alterscope wstETH', + subItems: [ + { key: 'APY', value: '3.87%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope Cornerstone', + subItems: [ + { key: 'APY', value: '3.87%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope CASH', + subItems: [ + { key: 'APY', value: '3.87%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + { + title: 'Pool name: Alterscope xSTRK', + subItems: [ + { key: 'APY', value: '3.87%' }, + { key: 'Weight', value: '0.00 / 20.00%' }, + ], + linkedFlows: [], + style: { color: 'gray' }, + }, + ], + style: { backgroundColor: '#6e53dc' }, + }, + ], + }, + { + name: 'Ekubo xSTRK/STRK', + id: 'ekubo_cl_xstrkstrk', + apy: 0.2250861274873169, + apySplit: { baseApy: 0.2250861274873169, rewardsApy: 0 }, + depositToken: [ + '0x28d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a', + ], + leverage: 1, + contract: [ + { + name: 'Ekubo xSTRK/STRK', + address: + '0x1f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324', + }, + ], + tvlUsd: 116.1401966610899, + status: { number: 1, value: 'Hot & New 🔥' }, + riskFactor: 0.875, + logos: [ + 'https://dashboard.endur.fi/endur-fi.svg', + 'https://assets.coingecko.com/coins/images/26433/small/starknet.png', + ], + isAudited: true, + auditUrl: + 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', + actions: [], + investmentFlows: [ + { + id: 'base', + title: 'Your Deposit', + subItems: [ + { key: 'Net yield', value: '36.71%' }, + { key: 'Performance Fee', value: '10.00%' }, + ], + linkedFlows: [ + { + title: 'Ekubo xSTRK/STRK', + subItems: [{ key: 'Pool', value: '0.01%, 200 tick spacing' }], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + ], + style: { backgroundColor: '#6e53dc' }, + }, + { + id: 'rebalance', + title: 'Automated Rebalance', + subItems: [{ key: 'Range selection', value: '-200 to 200 ticks' }], + linkedFlows: [ + { + title: 'Ekubo xSTRK/STRK', + subItems: [{ key: 'Pool', value: '0.01%, 200 tick spacing' }], + linkedFlows: [], + style: { backgroundColor: '#35484f' }, + }, + ], + style: { backgroundColor: 'purple' }, + }, + ], + }, + { + name: 'xSTRK Sensei', + id: 'xstrk_sensei', + apy: 0.2789537137720841, + apySplit: { baseApy: 0.2789537137720841, rewardsApy: 0 }, + depositToken: [ + '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', + ], + leverage: 2.4164749547200968, + contract: [ + { + name: 'frmDNMMSTRKxSTRK', + address: + '0x7023a5cadc8a5db80e4f0fde6b330cbd3c17bbbf9cb145cbabd7bd5e6fb7b0b', + }, + ], + tvlUsd: 46290.62976632084, + status: { number: 3, value: 'Active' }, + riskFactor: 0.75, + logos: ['/zklend/icons/tokens/strk.svg?w=20'], + isAudited: false, + actions: [ + { + name: 'Stake STRK to Endur', + protocol: { name: 'Endur', logo: 'https://endur.fi/favicon.ico' }, + token: { name: 'STRK', logo: '/zklend/icons/tokens/strk.svg?w=20' }, + amount: '1000.00', + isDeposit: true, + apy: 0.11543828055292038, + }, + { + name: "Supply's your xSTRK to Vesu", + protocol: { + name: 'Vesu', + logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', + }, + token: { + name: 'xSTRK (Re7 xSTRK)', + logo: '/imagedelivery/c1f44170-c1b0-4531-3d3b-5f0bacfe1300/logo', + }, + amount: '1000.00', + isDeposit: true, + apy: 0.025260354362073953, + }, + { + name: 'Borrow STRK from Vesu', + protocol: { + name: 'Vesu', + logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', + }, + token: { + name: 'STRK (Re7 xSTRK)', + logo: '/zklend/icons/tokens/strk.svg?w=20', + }, + amount: '725.00', + isDeposit: false, + apy: -0.079453, + }, + { + name: 'Loop back to step 1, repeat 3 more times', + protocol: { + name: 'Vesu', + logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', + }, + token: { + name: 'STRK (Re7 xSTRK)', + logo: '/zklend/icons/tokens/strk.svg?w=20', + }, + amount: '541.1958750000001', + isDeposit: true, + apy: 0.3021643996908885, + }, + { + name: 'Re-invest your STRK Rewards every 7 days (Compound)', + protocol: { name: 'Endur', logo: 'https://endur.fi/favicon.ico' }, + token: { name: 'STRK', logo: '/zklend/icons/tokens/strk.svg?w=20' }, + amount: '1000.00', + isDeposit: true, + apy: 0.03232837717252962, + }, + ], + investmentFlows: [], + }, + { + name: 'Auto Compounding STRK', + id: 'auto_token_strk', + apy: 0, + apySplit: { baseApy: 0, rewardsApy: 0 }, + depositToken: [ + '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', + '0x6d8fa671ef84f791b7f601fa79fea8f6ceb70b5fa84189e3159d532162efc21', + ], + leverage: 0, + contract: [ + { + name: 'frmzSTRK', + address: + '0x541681b9ad63dff1b35f79c78d8477f64857de29a27902f7298f7b620838ea', + }, + ], + tvlUsd: 0, + status: { number: 5, value: 'Retired' }, + riskFactor: 0.5, + logos: [''], + isAudited: false, + actions: [], + investmentFlows: [], + }, + { + name: 'Auto Compounding USDC', + id: 'auto_token_usdc', + apy: 0, + apySplit: { baseApy: 0, rewardsApy: 0 }, + depositToken: [ + '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', + '0x47ad51726d891f972e74e4ad858a261b43869f7126ce7436ee0b2529a98f486', + ], + leverage: 0, + contract: [ + { + name: 'frmzUSDC', + address: + '0x16912b22d5696e95ffde888ede4bd69fbbc60c5f873082857a47c543172694f', + }, + ], + tvlUsd: 0, + status: { number: 5, value: 'Retired' }, + riskFactor: 0.5, + logos: [''], + isAudited: false, + actions: [], + investmentFlows: [], + }, + { + name: 'USDC Sensei', + id: 'usdc_sensei', + apy: 0, + apySplit: { baseApy: 0, rewardsApy: 0 }, + depositToken: [ + '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', + ], + leverage: 0, + contract: [ + { + name: 'frmDNMMUSDCETH', + address: + '0x04937b58e05a3a2477402d1f74e66686f58a61a5070fcc6f694fb9a0b3bae422', + }, + ], + tvlUsd: 0, + status: { number: 5, value: 'Retired' }, + riskFactor: 0.75, + logos: ['/zklend/icons/tokens/strk.svg?w=20'], + isAudited: false, + actions: [], + investmentFlows: [], + }, + { + name: 'ETH Sensei', + id: 'eth_sensei', + apy: 0, + apySplit: { baseApy: 0, rewardsApy: 0 }, + depositToken: [ + '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', + ], + leverage: 0, + contract: [ + { + name: 'frmDNMMETHUSDC', + address: + '0x9d23d9b1fa0db8c9d75a1df924c3820e594fc4ab1475695889286f3f6df250', + }, + ], + tvlUsd: 0, + status: { number: 5, value: 'Retired' }, + riskFactor: 0.75, + logos: ['/zklend/icons/tokens/strk.svg?w=20'], + isAudited: false, + actions: [], + investmentFlows: [], + }, + { + name: 'STRK Sensei', + id: 'strk_sensei', + apy: 0, + apySplit: { baseApy: 0, rewardsApy: 0 }, + depositToken: [ + '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', + ], + leverage: 0, + contract: [ + { + name: 'frmDNMMSTRKETH', + address: + '0x20d5fc4c9df4f943ebb36078e703369c04176ed00accf290e8295b659d2cea6', + }, + ], + tvlUsd: 0, + status: { number: 5, value: 'Retired' }, + riskFactor: 0.75, + logos: ['/zklend/icons/tokens/strk.svg?w=20'], + isAudited: false, + actions: [], + investmentFlows: [], + }, + { + name: 'ETH Sensei XL', + id: 'eth_sensei_xl', + apy: 0, + apySplit: { baseApy: 0, rewardsApy: 0 }, + depositToken: [ + '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', + ], + leverage: 0, + contract: [ + { + name: 'frmDNMMETHUSDC2', + address: + '0x9140757f8fb5748379be582be39d6daf704cc3a0408882c0d57981a885eed9', + }, + ], + tvlUsd: 0, + status: { number: 5, value: 'Retired' }, + riskFactor: 0.75, + logos: ['/zklend/icons/tokens/strk.svg?w=20'], + isAudited: false, + actions: [], + investmentFlows: [], + }, + ], + lastUpdated: '2025-04-06T18:52:26.899Z', + }); +} diff --git a/src/app/strategy/[strategyId]/_components/Strategy.tsx b/src/app/strategy/[strategyId]/_components/Strategy.tsx index 8c631794..3d3570f9 100755 --- a/src/app/strategy/[strategyId]/_components/Strategy.tsx +++ b/src/app/strategy/[strategyId]/_components/Strategy.tsx @@ -280,23 +280,29 @@ const Strategy = ({ params }: StrategyParams) => { : 'Connect wallet'}
- - - - Net earnings - - = 0 ? 'cyan' : 'red'} - > - {address && profit !== 0 && !strategy?.isRetired() - ? `${profit?.toFixed(balData.data.tokenInfo?.displayDecimals || 2)} ${balData.data.tokenInfo?.name}` - : '-'} - - - + {!strategy.settings.isTransactionHistDisabled && ( + + + + Net earnings + + = 0 ? 'cyan' : 'red'} + > + {address && + profit !== 0 && + !strategy?.isRetired() + ? `${profit?.toFixed(balData.data.tokenInfo?.displayDecimals || 2)} ${balData.data.tokenInfo?.name}` + : '-'} + + + + )}
)} {(balData.isLoading || !balData.data?.tokenInfo) && ( @@ -579,10 +585,16 @@ const Strategy = ({ params }: StrategyParams) => { Transaction history - - There may be delays fetching data. If your transaction{' '} - {`isn't`} found, try again later. - + {!strategy.settings.isTransactionHistDisabled && ( + + There may be delays fetching data. If your transaction{' '} + {`isn't`} found, try again later. + + )} {txHistoryResult.isSuccess && ( <> @@ -655,13 +667,25 @@ const Strategy = ({ params }: StrategyParams) => { )} {/* If no filtered tx */} - {txHistory.findManyInvestment_flows.length === 0 && ( + {!strategy.settings.isTransactionHistDisabled && + txHistory.findManyInvestment_flows.length === 0 && ( + + No transactions found + + )} + {strategy.settings.isTransactionHistDisabled && ( - No transactions found + Transaction history is not available for this strategy yet. + If enabled in future, will include the entire history. )} diff --git a/src/components/AmountInput.tsx b/src/components/AmountInput.tsx index 43a88f36..3e327325 100644 --- a/src/components/AmountInput.tsx +++ b/src/components/AmountInput.tsx @@ -1,4 +1,11 @@ -import { useState, useCallback, useMemo, useEffect } from 'react'; +import React, { + useState, + useCallback, + useMemo, + useEffect, + forwardRef, + useImperativeHandle, +} from 'react'; import { Box, Text, @@ -56,438 +63,450 @@ export interface AmountInputRef { * @param props Component properties including token info, strategy details, and mode * @param ref Ref to expose reset functionality to parent */ -export function AmountInput(props: AmountInputProps) { - // Input state - const [dirty, setDirty] = useState(false); +const AmountInput = forwardRef( + (props: AmountInputProps, ref: React.ForwardedRef) => { + // Input state + const [dirty, setDirty] = useState(false); - // External state - const tvlInfo = useAtomValue(props.strategy.tvlAtom); - const { address } = useAccount(); - const [depositInfo, setDepositInfo] = useAtom(depositAtom); - const setInputInfo = useSetAtom(updateInputInfoAtom); - const inputsInfo = useAtomValue(inputsInfoAtom); + // External state + const tvlInfo = useAtomValue(props.strategy.tvlAtom); + const { address } = useAccount(); + const [depositInfo, setDepositInfo] = useAtom(depositAtom); + const setInputInfo = useSetAtom(updateInputInfoAtom); + const inputsInfo = useAtomValue(inputsInfoAtom); - const inputInfo = useMemo(() => { - if (props.index < 0 || props.index >= inputsInfo.length) - throw new Error(`Invalid index: ${props.index}`); - return inputsInfo[props.index]; - }, [inputsInfo, props.index]); + const inputInfo = useMemo(() => { + if (props.index < 0 || props.index >= inputsInfo.length) + throw new Error(`Invalid index: ${props.index}`); + return inputsInfo[props.index]; + }, [inputsInfo, props.index]); - // Default token state - const [selectedMarket, setSelectedMarket] = useState( - props.tokenInfo, - ); - - // Get balance data - const balData = useAtomValue(props.balanceAtom || DUMMY_BAL_ATOM); - const balance = useMemo(() => { - return balData.data?.amount || MyNumber.fromZero(); - }, [balData]); + // Default token state + const [selectedMarket, setSelectedMarket] = useState( + props.tokenInfo, + ); - const isMinAmountError: boolean = useMemo(() => { - if (!dirty) return false; + useImperativeHandle(ref, () => ({ + reset: () => { + setDirty(false); + updateTokenInfo({ + amount: Web3Number.fromWei('0', props.tokenInfo.decimals), + tokenInfo: props.tokenInfo, + isMaxClicked: false, + rawAmount: '', + }); + }, + })); - const isAtleastOneNonZero = inputsInfo.some((item) => item.amount.gt(0)); - if (isAtleastOneNonZero) { - return false; - } - return true; - }, [inputsInfo]); - /** - * Calculate maximum allowed amount based on: - * - TVL limits for deposits - * - Balance minus gas reserves for specific tokens - * - Zero as minimum - */ - const maxAmount: MyNumber = useMemo(() => { - const currentTVL = Number(tvlInfo.data?.amounts[0].amount.toFixed(6) || 0); - const maxAllowed = - props.isDeposit && props.strategy.settings.maxTVL !== 0 - ? props.strategy.settings.maxTVL - currentTVL - : Number(balance.toEtherToFixedDecimals(8)); + // Get balance data + const balData = useAtomValue(props.balanceAtom || DUMMY_BAL_ATOM); + const balance = useMemo(() => { + return balData.data?.amount || MyNumber.fromZero(); + }, [balData]); - const adjustedMaxAllowed = MyNumber.fromEther( - maxAllowed.toFixed(6), - selectedMarket.decimals, - ); + const isMinAmountError: boolean = useMemo(() => { + if (!dirty) return false; - // Reserve gas amounts for specific tokens - let reducedBalance = balance; - if (props.isDeposit) { - if (selectedMarket.name === 'STRK') { - reducedBalance = balance.subtract( - MyNumber.fromEther('1.5', selectedMarket.decimals), - ); - } else if (selectedMarket.name === 'ETH') { - reducedBalance = balance.subtract( - MyNumber.fromEther('0.001', selectedMarket.decimals), - ); + const isAtleastOneNonZero = inputsInfo.some((item) => item.amount.gt(0)); + if (isAtleastOneNonZero) { + return false; } - } + return true; + }, [inputsInfo]); + /** + * Calculate maximum allowed amount based on: + * - TVL limits for deposits + * - Balance minus gas reserves for specific tokens + * - Zero as minimum + */ + const maxAmount: MyNumber = useMemo(() => { + const currentTVL = Number( + tvlInfo.data?.amounts[0].amount.toFixed(6) || 0, + ); + const maxAllowed = + props.isDeposit && props.strategy.settings.maxTVL !== 0 + ? props.strategy.settings.maxTVL - currentTVL + : Number(balance.toEtherToFixedDecimals(8)); - const min = MyNumber.min(reducedBalance, adjustedMaxAllowed); - return MyNumber.max(min, MyNumber.fromEther('0', selectedMarket.decimals)); - }, [balance, props.strategy, selectedMarket, props.isDeposit, tvlInfo]); + const adjustedMaxAllowed = MyNumber.fromEther( + maxAllowed.toFixed(6), + selectedMarket.decimals, + ); - function onAmountChange( - _amt: MyNumber, - isMaxClicked: boolean, - rawAmount = _amt.toEtherStr(), - _token = props.tokenInfo, - ) { - updateTokenInfo({ - tokenInfo: _token, - amount: Web3Number.fromWei(_amt.toString(), _token.decimals), - isMaxClicked, - rawAmount, - }); + // Reserve gas amounts for specific tokens + let reducedBalance = balance; + if (props.isDeposit) { + if (selectedMarket.name === 'STRK') { + reducedBalance = balance.subtract( + MyNumber.fromEther('1.5', selectedMarket.decimals), + ); + } else if (selectedMarket.name === 'ETH') { + reducedBalance = balance.subtract( + MyNumber.fromEther('0.001', selectedMarket.decimals), + ); + } + } - checkAndTriggerOnAmountsChange(_amt, _token); - } + const min = MyNumber.min(reducedBalance, adjustedMaxAllowed); + return MyNumber.max( + min, + MyNumber.fromEther('0', selectedMarket.decimals), + ); + }, [balance, props.strategy, selectedMarket, props.isDeposit, tvlInfo]); - function checkAndTriggerOnAmountsChange( - _amt: MyNumber, - _token: TokenInfoV2 = props.tokenInfo, - ) { - // if onAmountsChange defined - const isAllTokenInfosDefined = inputsInfo.every((item) => item.tokenInfo); - console.log( - 'onAmountsChange [11.3] [2.1]', - props.index, - isAllTokenInfosDefined, - props.buttonText, - inputsInfo, - depositInfo.onAmountsChange, - ); - if (!isAllTokenInfosDefined || !depositInfo.onAmountsChange) { - return; - } - const _amtWeb3 = Web3Number.fromWei(_amt.toString(), _token.decimals); - console.log('onAmountsChange [2.2]', _amtWeb3); - try { - setDepositInfo({ - ...depositInfo, - loading: true, + function onAmountChange( + _amt: MyNumber, + isMaxClicked: boolean, + rawAmount = _amt.toEtherStr(), + _token = props.tokenInfo, + ) { + updateTokenInfo({ + tokenInfo: _token, + amount: Web3Number.fromWei(_amt.toString(), _token.decimals), + isMaxClicked, + rawAmount, }); - depositInfo - .onAmountsChange( - { - amountInfo: { - amount: _amtWeb3, - tokenInfo: _token, - }, - index: props.index, - }, - inputsInfo.map((item, index) => { - if (index == props.index) { - return { + + checkAndTriggerOnAmountsChange(_amt, _token); + } + + function checkAndTriggerOnAmountsChange( + _amt: MyNumber, + _token: TokenInfoV2 = props.tokenInfo, + ) { + // if onAmountsChange defined + const isAllTokenInfosDefined = inputsInfo.every((item) => item.tokenInfo); + console.log( + 'onAmountsChange [11.3] [2.1]', + props.index, + isAllTokenInfosDefined, + props.buttonText, + inputsInfo, + depositInfo.onAmountsChange, + ); + if (!isAllTokenInfosDefined || !depositInfo.onAmountsChange) { + return; + } + const _amtWeb3 = Web3Number.fromWei(_amt.toString(), _token.decimals); + console.log('onAmountsChange [2.2]', _amtWeb3); + try { + setDepositInfo({ + ...depositInfo, + loading: true, + }); + depositInfo + .onAmountsChange( + { + amountInfo: { amount: _amtWeb3, tokenInfo: _token, - }; - } - return { - amount: item.amount, - tokenInfo: item.tokenInfo!, - }; - }), - ) - .then((output) => { - console.log('onAmountsChange [2.3]', output); - output.map((item, _index) => { - setInputInfo({ - index: _index, - info: { - ...inputsInfo[_index], - ...item, - rawAmount: Number(item.amount.toFixed(6)).toString(), }, + index: props.index, + }, + inputsInfo.map((item, index) => { + if (index == props.index) { + return { + amount: _amtWeb3, + tokenInfo: _token, + }; + } + return { + amount: item.amount, + tokenInfo: item.tokenInfo!, + }; + }), + ) + .then((output) => { + console.log('onAmountsChange [2.3]', output); + output.map((item, _index) => { + setInputInfo({ + index: _index, + info: { + ...inputsInfo[_index], + ...item, + rawAmount: Number(item.amount.toFixed(6)).toString(), + }, + }); + }); + setDepositInfo({ + ...depositInfo, + loading: false, + }); + }) + .catch((err) => { + console.log('onAmountsChange [2.4]', err); + setDepositInfo({ + ...depositInfo, + loading: false, }); }); - setDepositInfo({ - ...depositInfo, - loading: false, - }); - }) - .catch((err) => { - console.log('onAmountsChange [2.4]', err); - setDepositInfo({ - ...depositInfo, - loading: false, - }); - }); - } catch (err) { - console.log('onAmountsChange [2.5] err', err); + } catch (err) { + console.log('onAmountsChange [2.5] err', err); + } } - } - function BalanceComponent(props: { - token: TokenInfoV2; - strategy: StrategyInfo; - buttonText: string; - }) { - const handleMaxClick = useCallback(() => { - onAmountChange(maxAmount, true); - mixpanel.track('Chose max amount', { - strategyId: props.strategy.id, - strategyName: props.strategy.name, - buttonText: props.buttonText, - amount: inputInfo.amount.toFixed(2), - token: selectedMarket.name, - maxAmount: maxAmount.toEtherStr(), + function BalanceComponent(props: { + token: TokenInfoV2; + strategy: StrategyInfo; + buttonText: string; + }) { + const handleMaxClick = useCallback(() => { + onAmountChange(maxAmount, true); + mixpanel.track('Chose max amount', { + strategyId: props.strategy.id, + strategyName: props.strategy.name, + buttonText: props.buttonText, + amount: inputInfo.amount.toFixed(2), + token: selectedMarket.name, + maxAmount: maxAmount.toEtherStr(), + address, + }); + }, [ + maxAmount, + inputInfo, + selectedMarket, + props.strategy, + props.buttonText, address, - }); - }, [ - maxAmount, - inputInfo, - selectedMarket, - props.strategy, - props.buttonText, - address, - ]); + ]); - const isLoading = balData.isLoading || balData.isPending; + const isLoading = balData.isLoading || balData.isPending; - return ( - - Available balance - - - - {balance.toEtherToFixedDecimals(4)} - - - - - - ); - } + + + {balance.toEtherToFixedDecimals(4)} + + + + +
+ ); + } - function updateTokenInfo(inputInfo: AmountInputInfo) { - const { amount, tokenInfo: _t, isMaxClicked, rawAmount } = inputInfo; - console.log( - `onAmountsChange [10.1]`, - amount.toWei(), - inputInfo, - props.index, - props.buttonText, - ); - const tokenInfo = _t!; - const _amount = Web3Number.fromWei(amount.toWei(), tokenInfo.decimals); - setInputInfo({ - index: props.index, - info: { - amount: _amount, - tokenInfo, - isMaxClicked, - rawAmount, - }, - }); - } + function updateTokenInfo(inputInfo: AmountInputInfo) { + const { amount, tokenInfo: _t, isMaxClicked, rawAmount } = inputInfo; + console.log( + `onAmountsChange [10.1]`, + amount.toWei(), + inputInfo, + props.index, + props.buttonText, + ); + const tokenInfo = _t!; + const _amount = Web3Number.fromWei(amount.toWei(), tokenInfo.decimals); + setInputInfo({ + index: props.index, + info: { + amount: _amount, + tokenInfo, + isMaxClicked, + rawAmount, + }, + }); + } - useEffect(() => { - console.log( - 'onAmountsChange [11]', - inputInfo, - props.index, - props.buttonText, - ); - }, [inputInfo]); + useEffect(() => { + console.log('onAmountsChange [3]', props); + updateTokenInfo({ + amount: Web3Number.fromWei('0', props.tokenInfo.decimals), + tokenInfo: props.tokenInfo, + isMaxClicked: false, + rawAmount: '', + }); + }, []); - useEffect(() => { - const isAllTokenInfosDefined = inputsInfo.every((item) => item.tokenInfo); - console.log( - 'onAmountsChange [11.2]', - inputsInfo, - props.index, - isAllTokenInfosDefined, - props.buttonText, - ); - }, [inputsInfo]); + const handleDebouncedChange = debounce( + (newAmount: MyNumber, valueStr: string) => { + checkAndTriggerOnAmountsChange(newAmount, props.tokenInfo); - useEffect(() => { - console.log('onAmountsChange [3]', props); - updateTokenInfo({ - amount: Web3Number.fromWei('0', props.tokenInfo.decimals), - tokenInfo: props.tokenInfo, - isMaxClicked: false, - rawAmount: '', - }); - }, []); + // Track user input + mixpanel.track('Enter amount', { + strategyId: props.strategy.id, + strategyName: props.strategy.name, + buttonText: props.buttonText, + amount: inputInfo.amount.toFixed(2), + token: selectedMarket.name, + maxAmount: maxAmount.toEtherStr(), + address, + }); + }, + 100, + ); // ms delay - const handleDebouncedChange = debounce( - (newAmount: MyNumber, valueStr: string) => { - checkAndTriggerOnAmountsChange(newAmount, props.tokenInfo); + return ( + + {/* Token selection and balance display */} + + + + } + bgColor={'highlight'} + borderColor={'bg'} + borderWidth={'1px'} + color="color2" + _hover={{ + bg: 'bg', + }} + > +
+ + {props.tokenInfo.symbol} +
+
+ + {props.supportedTokens.map((token) => ( + { + if (selectedMarket.name !== token.symbol) { + setSelectedMarket(token); + setDirty(false); + onAmountChange( + new MyNumber('0', token.decimals), + inputInfo.isMaxClicked, + '', + token, + ); + } + }} + > +
+ + {token.symbol} +
+
+ ))} +
+
+
+ + + +
- // Track user input - mixpanel.track('Enter amount', { - strategyId: props.strategy.id, - strategyName: props.strategy.name, - buttonText: props.buttonText, - amount: inputInfo.amount.toFixed(2), - token: selectedMarket.name, - maxAmount: maxAmount.toEtherStr(), - address, - }); - }, - 100, - ); // ms delay + {/* Amount input with validation */} + { + const newAmount = + valueStr && Number(valueStr) > 0 + ? MyNumber.fromEther(valueStr, selectedMarket.decimals) + : new MyNumber('0', selectedMarket.decimals); - return ( - - {/* Token selection and balance display */} - - - - } - bgColor={'highlight'} - borderColor={'bg'} - borderWidth={'1px'} - color="color2" - _hover={{ - bg: 'bg', - }} - > -
- - {props.tokenInfo.symbol} -
-
- - {props.supportedTokens.map((token) => ( - { - if (selectedMarket.name !== token.symbol) { - setSelectedMarket(token); - setDirty(false); - onAmountChange( - new MyNumber('0', token.decimals), - inputInfo.isMaxClicked, - '', - token, - ); - } - }} - > -
- - {token.symbol} -
-
- ))} -
-
-
- - + - -
- - {/* Amount input with validation */} - { - const newAmount = - valueStr && Number(valueStr) > 0 - ? MyNumber.fromEther(valueStr, selectedMarket.decimals) - : new MyNumber('0', selectedMarket.decimals); + + + + + - setDirty(true); - updateTokenInfo({ - tokenInfo: props.tokenInfo, - amount: Web3Number.fromWei( - newAmount.toString(), - props.tokenInfo.decimals, - ), - isMaxClicked: inputInfo.isMaxClicked, - rawAmount: valueStr, - }); - handleDebouncedChange(newAmount, valueStr); - }} - marginTop={'10px'} - keepWithinRange={false} - clampValueOnBlur={false} - value={inputInfo.rawAmount} - isDisabled={maxAmount.isZero()} - > - - - - - -
+ {/* Validation error messages */} + {isMinAmountError && dirty && ( + + Amount must be greater than 0 + + )} + {inputInfo.amount.gt(maxAmount.toEtherStr()) && ( + + Amount must be less than {maxAmount.toEtherToFixedDecimals(2)} + + )} +
+ ); + }, +); - {/* Validation error messages */} - {isMinAmountError && dirty && ( - - Amount must be greater than 0 - - )} - {inputInfo.amount.gt(maxAmount.toEtherStr()) && ( - - Amount must be less than {maxAmount.toEtherToFixedDecimals(2)} - - )} - - ); -} +AmountInput.displayName = 'AmountInput'; +export default AmountInput; diff --git a/src/components/Deposit.tsx b/src/components/Deposit.tsx index d85910bd..a4adf499 100755 --- a/src/components/Deposit.tsx +++ b/src/components/Deposit.tsx @@ -20,7 +20,7 @@ import { } from '@chakra-ui/react'; import { useAccount } from '@starknet-react/core'; import { atom, PrimitiveAtom, useAtom, useAtomValue, useSetAtom } from 'jotai'; -import { useEffect, useMemo, useState } from 'react'; +import { useEffect, useMemo, useRef, useState } from 'react'; import TxButton from './TxButton'; import { provider } from '@/constants'; import { @@ -28,7 +28,7 @@ import { TokenInfo as TokenInfoV2, Web3Number, } from '@strkfarm/sdk'; -import { AmountInput } from './AmountInput'; +import AmountInput, { AmountInputRef } from './AmountInput'; import { addressAtom } from '@/store/claims.atoms'; interface DepositProps { @@ -153,6 +153,13 @@ function InternalDeposit(props: DepositProps) { resetDepositForm(); }, []); + const inputRef1 = useRef(null); + const inputRef2 = useRef(null); + + const inputRefs = useMemo(() => { + return [inputRef1, inputRef2]; + }, [inputRef1, inputRef2]); + // since we use a separate jotai provider, // need to set this again here const setAddress = useSetAtom(addressAtom); @@ -306,6 +313,7 @@ function InternalDeposit(props: DepositProps) { callsInfo[0].amounts.map((inputAmtInfo, index) => { return ( { + resetDepositForm(); + inputRefs.forEach((ref) => { + if (ref.current) { + ref.current.reset(); + } + }); + }} />
diff --git a/src/components/YieldCard.tsx b/src/components/YieldCard.tsx index 4e571203..423720b4 100644 --- a/src/components/YieldCard.tsx +++ b/src/components/YieldCard.tsx @@ -28,6 +28,7 @@ import { Tr, VStack, } from '@chakra-ui/react'; +import { ContractAddr } from '@strkfarm/sdk'; import { useAtomValue } from 'jotai'; import mixpanel from 'mixpanel-browser'; import { useMemo } from 'react'; @@ -220,23 +221,27 @@ export function getStrategyWiseHoldingsInfo( id: string, ) { const amount = userData?.strategyWise.find((item) => item.id === id); + const defaultTokenInfo = { + name: 'N/A', + symbol: 'N/A', + address: ContractAddr.from('0x0'), + decimals: 0, + logo: '', + displayDecimals: 2, + }; if (!amount) { return { usdValue: 0, amount: 0, - tokenInfo: { - symbol: '', - decimals: 0, - displayDecimals: 0, - logo: '', - name: '', - }, + tokenInfo: defaultTokenInfo, }; } return { usdValue: amount.usdValue, - amount: Number(amount.holdings[0].amount), - tokenInfo: amount.holdings[0].tokenInfo, + amount: amount.holdings.length ? Number(amount.holdings[0].amount) : 0, + tokenInfo: amount.holdings.length + ? amount.holdings[0].tokenInfo + : defaultTokenInfo, }; } diff --git a/src/store/strategies.atoms.tsx b/src/store/strategies.atoms.tsx index 70335662..d5bbde26 100755 --- a/src/store/strategies.atoms.tsx +++ b/src/store/strategies.atoms.tsx @@ -261,6 +261,7 @@ export function getStrategies() { quoteToken: convertToV2TokenInfo( getTokenInfoFromName(v.depositTokens[1]?.symbol || ''), ), + isTransactionHistDisabled: true, }, ); }); diff --git a/src/store/strkfarm.atoms.ts b/src/store/strkfarm.atoms.ts index 68c3ec5f..bbd47477 100644 --- a/src/store/strkfarm.atoms.ts +++ b/src/store/strkfarm.atoms.ts @@ -19,6 +19,10 @@ export interface STRKFarmStrategyAPIResult { name: string; id: string; apy: number; + apySplit: { + baseApy: number; + rewardsApy: number; + }; depositToken: string[]; leverage: number; contract: { name: string; address: string }[]; diff --git a/src/strategies/IStrategy.ts b/src/strategies/IStrategy.ts index 4cb08552..ef45efcd 100755 --- a/src/strategies/IStrategy.ts +++ b/src/strategies/IStrategy.ts @@ -118,7 +118,8 @@ export interface IStrategySettings { isAudited?: boolean; auditUrl?: string; isPaused?: boolean; - quoteToken: TokenInfoV2; // used to show the holdings in this token + quoteToken: TokenInfoV2; // used to show the holdings in this token, + isTransactionHistDisabled?: boolean; } export interface AmountInfo { diff --git a/src/strategies/auto_strk.strat.ts b/src/strategies/auto_strk.strat.ts index f1377d09..1003b077 100755 --- a/src/strategies/auto_strk.strat.ts +++ b/src/strategies/auto_strk.strat.ts @@ -71,7 +71,7 @@ export class AutoTokenStrategy extends IStrategy { symbol: tokenInfo.name, decimals: tokenInfo.decimals, address: ContractAddr.from(tokenInfo.token), - logo: '', + logo: tokenInfo.logo, displayDecimals: tokenInfo.displayDecimals, }, ], diff --git a/src/strategies/delta_neutral_mm.ts b/src/strategies/delta_neutral_mm.ts index 7cfb26df..b56ee1a4 100755 --- a/src/strategies/delta_neutral_mm.ts +++ b/src/strategies/delta_neutral_mm.ts @@ -80,7 +80,7 @@ export class DeltaNeutralMM extends IStrategy { symbol: tokenInfo.name, decimals: tokenInfo.decimals, address: ContractAddr.from(tokenInfo.token), - logo: '', + logo: tokenInfo.logo, displayDecimals: tokenInfo.displayDecimals, }, ], From 6f9a61b3f97905a07197fc08ebe48de5922073e3 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Mon, 7 Apr 2025 05:26:19 +0530 Subject: [PATCH 06/30] fixing cache issues --- src/app/api/price/[name]/route.ts | 1 + src/app/api/stats/route.ts | 1 + src/app/api/strategies/route.ts | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/api/price/[name]/route.ts b/src/app/api/price/[name]/route.ts index 17510053..0daaf8d7 100644 --- a/src/app/api/price/[name]/route.ts +++ b/src/app/api/price/[name]/route.ts @@ -2,6 +2,7 @@ import { NextResponse } from 'next/server'; import { getMainnetConfig, PricerRedis } from '@strkfarm/sdk'; export const revalidate = 300; // 5 mins +export const dynamic = 'force-dynamic'; // only meant for backend calls async function initRedis() { diff --git a/src/app/api/stats/route.ts b/src/app/api/stats/route.ts index 6ad5a313..09934457 100755 --- a/src/app/api/stats/route.ts +++ b/src/app/api/stats/route.ts @@ -2,6 +2,7 @@ import { getStrategies } from '@/store/strategies.atoms'; import { NextResponse } from 'next/server'; export const revalidate = 1800; +export const dynamic = 'force-dynamic'; export async function GET(_req: Request) { const strategies = getStrategies(); diff --git a/src/app/api/strategies/route.ts b/src/app/api/strategies/route.ts index 4c1c6f4c..e64d88c6 100755 --- a/src/app/api/strategies/route.ts +++ b/src/app/api/strategies/route.ts @@ -10,7 +10,8 @@ import { MY_STORE } from '@/store'; import VesuAtoms, { vesu } from '@/store/vesu.store'; import EndurAtoms, { endur } from '@/store/endur.store'; -export const revalidate = 3600; // 1 hr +export const revalidate = 60; // 1 hr +export const dynamic = 'force-dynamic'; const allPoolsAtom = atom((get) => { const pools: PoolInfo[] = []; From f4965a49431e115737d85efce13243a10d84ca77 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Mon, 7 Apr 2025 14:27:04 +0530 Subject: [PATCH 07/30] add revalidate API --- src/app/api/revalidate/route.ts | 23 +++++++++++++++++++++++ src/app/api/strategies/route.ts | 4 ++-- vercel.json | 4 ++++ 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 src/app/api/revalidate/route.ts diff --git a/src/app/api/revalidate/route.ts b/src/app/api/revalidate/route.ts new file mode 100644 index 00000000..4b615428 --- /dev/null +++ b/src/app/api/revalidate/route.ts @@ -0,0 +1,23 @@ +import { revalidatePath } from 'next/cache'; +import { NextResponse } from 'next/server'; + +export async function GET(request: Request) { + const { searchParams } = new URL(request.url); + console.log(`secret`, searchParams.get('secret')); + if (searchParams.get('secret') !== process.env.MY_SECRET_TOKEN) { + return new Response(`Invalid credentials`, { + status: 500, + }); + } + revalidatePath('/api/strategies'); + revalidatePath('/api/stats'); + return NextResponse.json( + { + revalidated: true, + now: Date.now(), + }, + { + status: 200, + }, + ); +} diff --git a/src/app/api/strategies/route.ts b/src/app/api/strategies/route.ts index e64d88c6..c7296eab 100755 --- a/src/app/api/strategies/route.ts +++ b/src/app/api/strategies/route.ts @@ -10,7 +10,7 @@ import { MY_STORE } from '@/store'; import VesuAtoms, { vesu } from '@/store/vesu.store'; import EndurAtoms, { endur } from '@/store/endur.store'; -export const revalidate = 60; // 1 hr +export const revalidate = 600; // 1 hr export const dynamic = 'force-dynamic'; const allPoolsAtom = atom((get) => { @@ -151,7 +151,7 @@ export async function GET(req: Request) { }); response.headers.set( 'Cache-Control', - `s-maxage=${revalidate}, stale-while-revalidate=180`, + `s-maxage=${revalidate}, stale-while-revalidate=300`, ); return response; } catch (err) { diff --git a/vercel.json b/vercel.json index e90f4767..bead3fdd 100644 --- a/vercel.json +++ b/vercel.json @@ -3,6 +3,10 @@ { "path": "/api/raffle/luckyWinner?winnersCount=3", "schedule": "0 8 * * *" + }, + { + "path": "/api/revalidate", + "schedule": "*/5 * * * *" } ] } From 70fb8b129bb4f093005b038a8d6d1646da6beb7a Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Mon, 7 Apr 2025 14:33:02 +0530 Subject: [PATCH 08/30] add CRON secret support in reval --- src/app/api/revalidate/route.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/app/api/revalidate/route.ts b/src/app/api/revalidate/route.ts index 4b615428..21cabffa 100644 --- a/src/app/api/revalidate/route.ts +++ b/src/app/api/revalidate/route.ts @@ -2,11 +2,12 @@ import { revalidatePath } from 'next/cache'; import { NextResponse } from 'next/server'; export async function GET(request: Request) { - const { searchParams } = new URL(request.url); - console.log(`secret`, searchParams.get('secret')); - if (searchParams.get('secret') !== process.env.MY_SECRET_TOKEN) { - return new Response(`Invalid credentials`, { - status: 500, + const authHeader = request.headers.get('authorization'); + console.log('Authorization header:', authHeader); + if (authHeader !== `Bearer ${process.env.CRON_SECRET}`) { + console.error('Unauthorized request'); + return new Response('Unauthorized', { + status: 401, }); } revalidatePath('/api/strategies'); From e2c1a6366011cb0014765edaeddf059169142618 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Mon, 7 Apr 2025 14:38:33 +0530 Subject: [PATCH 09/30] fix revalidate --- src/app/api/revalidate/route.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/app/api/revalidate/route.ts b/src/app/api/revalidate/route.ts index 21cabffa..45b937c3 100644 --- a/src/app/api/revalidate/route.ts +++ b/src/app/api/revalidate/route.ts @@ -1,4 +1,3 @@ -import { revalidatePath } from 'next/cache'; import { NextResponse } from 'next/server'; export async function GET(request: Request) { @@ -10,8 +9,8 @@ export async function GET(request: Request) { status: 401, }); } - revalidatePath('/api/strategies'); - revalidatePath('/api/stats'); + fetch(`${process.env.HOSTNAME}/api/strategies`); + fetch(`${process.env.HOSTNAME}/api/stats`); return NextResponse.json( { revalidated: true, From 4379234830cc7936c339450e0b9dbebad2d5b10b Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Mon, 7 Apr 2025 15:04:02 +0530 Subject: [PATCH 10/30] debug --- src/app/api/revalidate/route.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/app/api/revalidate/route.ts b/src/app/api/revalidate/route.ts index 45b937c3..fc18f597 100644 --- a/src/app/api/revalidate/route.ts +++ b/src/app/api/revalidate/route.ts @@ -2,15 +2,19 @@ import { NextResponse } from 'next/server'; export async function GET(request: Request) { const authHeader = request.headers.get('authorization'); - console.log('Authorization header:', authHeader); + console.error('Authorization header:', authHeader); if (authHeader !== `Bearer ${process.env.CRON_SECRET}`) { console.error('Unauthorized request'); return new Response('Unauthorized', { status: 401, }); } - fetch(`${process.env.HOSTNAME}/api/strategies`); - fetch(`${process.env.HOSTNAME}/api/stats`); + console.error('Revalidating...', `${process.env.HOSTNAME}/api/strategies`); + const prom1 = fetch(`${process.env.HOSTNAME}/api/strategies`); + const prom2 = fetch(`${process.env.HOSTNAME}/api/stats`); + + await Promise.all([prom1, prom2]); + console.error('Revalidation complete'); return NextResponse.json( { revalidated: true, From e383b90cbccf8f7d4c90b8825dae09abcb2c8581 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Mon, 7 Apr 2025 15:56:59 +0530 Subject: [PATCH 11/30] debug[2] --- src/app/api/revalidate/route.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/app/api/revalidate/route.ts b/src/app/api/revalidate/route.ts index fc18f597..21353e5a 100644 --- a/src/app/api/revalidate/route.ts +++ b/src/app/api/revalidate/route.ts @@ -1,3 +1,4 @@ +import axios from 'axios'; import { NextResponse } from 'next/server'; export async function GET(request: Request) { @@ -10,11 +11,15 @@ export async function GET(request: Request) { }); } console.error('Revalidating...', `${process.env.HOSTNAME}/api/strategies`); - const prom1 = fetch(`${process.env.HOSTNAME}/api/strategies`); - const prom2 = fetch(`${process.env.HOSTNAME}/api/stats`); + const prom1 = axios(`${process.env.HOSTNAME}/api/strategies`); + const prom2 = axios(`${process.env.HOSTNAME}/api/stats`); - await Promise.all([prom1, prom2]); + const result = await Promise.all([prom1, prom2]); console.error('Revalidation complete'); + const res1 = await result[0].data; + const res2 = await result[1].data; + console.error(`Value 1: ${res1.lastUpdated}`); + console.error(`Value 2: ${res2.lastUpdated}`); return NextResponse.json( { revalidated: true, From e792fc77aaebc9b1673dfb9455458f6cc9b182de Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Mon, 7 Apr 2025 17:58:10 +0530 Subject: [PATCH 12/30] add upstash redis support --- .env.sample | 8 + package.json | 1 + src/app/api/lib.ts | 30 ++ src/app/api/revalidate/route.ts | 4 +- src/app/api/stats/route.ts | 13 + src/app/api/strategies/route.ts | 743 +------------------------------- yarn.lock | 12 + 7 files changed, 84 insertions(+), 727 deletions(-) create mode 100644 src/app/api/lib.ts diff --git a/.env.sample b/.env.sample index 0fb4452a..12f00c19 100644 --- a/.env.sample +++ b/.env.sample @@ -17,3 +17,11 @@ CRON_SECRET= # Note: Not everything is supported on sepolia # Default: mainnet NEXT_PUBLIC_NETWORK=mainnet + +# To enable API caching +VK_REDIS_KV_URL= +VK_REDIS_KV_REST_API_READ_ONLY_TOKEN= +VK_REDIS_REDIS_URL= +VK_REDIS_KV_REST_API_TOKEN= +VK_REDIS_KV_REST_API_URL= +VK_REDIS_PREFIX="strkfarm::beta" \ No newline at end of file diff --git a/package.json b/package.json index 85391c8f..1e36ca47 100755 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@tanstack/query-core": "5.28.0", "@types/mixpanel-browser": "2.49.0", "@types/mustache": "4.2.5", + "@upstash/redis": "^1.34.7", "@vercel/analytics": "1.2.2", "@vercel/speed-insights": "1.0.12", "@xyflow/react": "^12.4.4", diff --git a/src/app/api/lib.ts b/src/app/api/lib.ts new file mode 100644 index 00000000..40b79719 --- /dev/null +++ b/src/app/api/lib.ts @@ -0,0 +1,30 @@ +import { Redis } from '@upstash/redis'; + +const kvRedis = new Redis({ + url: process.env.VK_REDIS_KV_REST_API_URL, + token: process.env.VK_REDIS_KV_REST_API_TOKEN, +}); + +export async function getDataFromRedis( + key: string, + url: string, + revalidate: number, +) { + if (url.includes('no_cache=true')) { + // force no cache + return null; + } + const cacheData: any = await kvRedis.get(key); + if ( + cacheData && + new Date().getTime() - new Date(cacheData.lastUpdated).getTime() < + revalidate * 1000 + ) { + console.log(`Cache hit for ${key}`); + return cacheData; + } + + return null; +} + +export default kvRedis; diff --git a/src/app/api/revalidate/route.ts b/src/app/api/revalidate/route.ts index 21353e5a..f991e0a3 100644 --- a/src/app/api/revalidate/route.ts +++ b/src/app/api/revalidate/route.ts @@ -11,8 +11,8 @@ export async function GET(request: Request) { }); } console.error('Revalidating...', `${process.env.HOSTNAME}/api/strategies`); - const prom1 = axios(`${process.env.HOSTNAME}/api/strategies`); - const prom2 = axios(`${process.env.HOSTNAME}/api/stats`); + const prom1 = axios(`${process.env.HOSTNAME}/api/strategies?no_cache=true`); + const prom2 = axios(`${process.env.HOSTNAME}/api/stats?no_cache=true`); const result = await Promise.all([prom1, prom2]); console.error('Revalidation complete'); diff --git a/src/app/api/stats/route.ts b/src/app/api/stats/route.ts index 09934457..93c03a76 100755 --- a/src/app/api/stats/route.ts +++ b/src/app/api/stats/route.ts @@ -1,10 +1,23 @@ import { getStrategies } from '@/store/strategies.atoms'; import { NextResponse } from 'next/server'; +import { getDataFromRedis } from '../lib'; export const revalidate = 1800; export const dynamic = 'force-dynamic'; +const REDIS_KEY = `${process.env.VK_REDIS_PREFIX}::stats`; + export async function GET(_req: Request) { + const cacheData = await getDataFromRedis(REDIS_KEY, _req.url, revalidate); + if (cacheData) { + const resp = NextResponse.json(cacheData); + resp.headers.set( + 'Cache-Control', + `s-maxage=${revalidate}, stale-while-revalidate=300`, + ); + return resp; + } + const strategies = getStrategies(); console.log('strategies', strategies.length); diff --git a/src/app/api/strategies/route.ts b/src/app/api/strategies/route.ts index c7296eab..ea866bb5 100755 --- a/src/app/api/strategies/route.ts +++ b/src/app/api/strategies/route.ts @@ -9,6 +9,7 @@ import { STRKFarmStrategyAPIResult } from '@/store/strkfarm.atoms'; import { MY_STORE } from '@/store'; import VesuAtoms, { vesu } from '@/store/vesu.store'; import EndurAtoms, { endur } from '@/store/endur.store'; +import kvRedis, { getDataFromRedis } from '../lib'; export const revalidate = 600; // 1 hr export const dynamic = 'force-dynamic'; @@ -108,7 +109,20 @@ async function getStrategyInfo( }; } +const REDIS_KEY = `${process.env.VK_REDIS_PREFIX}::strategies`; + export async function GET(req: Request) { + console.log('GET /api/strategies', req.url); + const cacheData = await getDataFromRedis(REDIS_KEY, req.url, revalidate); + if (cacheData) { + const resp = NextResponse.json(cacheData); + resp.headers.set( + 'Cache-Control', + `s-maxage=${revalidate}, stale-while-revalidate=300`, + ); + return resp; + } + const allPools = await getPools(MY_STORE); const strategies = getStrategies(); @@ -144,11 +158,13 @@ export async function GET(req: Request) { const stratsData = await Promise.all(stratsDataProms); try { - const response = NextResponse.json({ + const data = { status: true, strategies: stratsData, lastUpdated: new Date().toISOString(), - }); + }; + await kvRedis.set(REDIS_KEY, data); + const response = NextResponse.json(data); response.headers.set( 'Cache-Control', `s-maxage=${revalidate}, stale-while-revalidate=300`, @@ -163,726 +179,3 @@ export async function GET(req: Request) { }); } } - -async function GETT() { - return NextResponse.json({ - status: true, - strategies: [ - { - name: 'Vesu Fusion STRK', - id: 'vesu_fusion_strk', - apy: 0.09702402495556883, - apySplit: { baseApy: 0.09702402495556883, rewardsApy: 0 }, - depositToken: [ - '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', - ], - leverage: 1, - contract: [ - { - name: 'STRK', - address: - '0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929', - }, - ], - tvlUsd: 213.84654751138, - status: { number: 1, value: 'Hot & New 🔥' }, - riskFactor: 0.75, - logos: [ - 'https://assets.coingecko.com/coins/images/26433/small/starknet.png', - ], - isAudited: true, - auditUrl: - 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', - actions: [], - investmentFlows: [ - { - title: 'Your Deposit', - subItems: [ - { key: 'Net yield', value: '9.70%' }, - { key: 'Performance Fee', value: '10.00%' }, - ], - linkedFlows: [ - { - title: 'Pool name: Re7 xSTRK', - subItems: [ - { key: 'APY', value: '10.91%' }, - { key: 'Weight', value: '98.00 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Genesis', - subItems: [ - { key: 'APY', value: '4.36%' }, - { key: 'Weight', value: '2.00 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Re7 USDC', - subItems: [ - { key: 'APY', value: '4.36%' }, - { key: 'Weight', value: '0.00 / 100.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Re7 Starknet Ecosystem', - subItems: [ - { key: 'APY', value: '4.36%' }, - { key: 'Weight', value: '0.00 / 100.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope wstETH', - subItems: [ - { key: 'APY', value: '4.36%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope Cornerstone', - subItems: [ - { key: 'APY', value: '4.36%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope CASH', - subItems: [ - { key: 'APY', value: '4.36%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope xSTRK', - subItems: [ - { key: 'APY', value: '4.36%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Re7 rUSDC', - subItems: [ - { key: 'APY', value: '4.36%' }, - { key: 'Weight', value: '0.00 / 100.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - ], - style: { backgroundColor: '#6e53dc' }, - }, - ], - }, - { - name: 'Vesu Fusion USDC', - id: 'vesu_fusion_usdc', - apy: 0.08222842193428995, - apySplit: { baseApy: 0.08222842193428995, rewardsApy: 0 }, - depositToken: [ - '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', - ], - leverage: 1, - contract: [ - { - name: 'USDC', - address: - '0xa858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c', - }, - ], - tvlUsd: 1016.454832861074, - status: { number: 1, value: 'Hot & New 🔥' }, - riskFactor: 0.75, - logos: [ - 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png', - ], - isAudited: true, - auditUrl: - 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', - actions: [], - investmentFlows: [ - { - title: 'Your Deposit', - subItems: [ - { key: 'Net yield', value: '8.22%' }, - { key: 'Performance Fee', value: '10.00%' }, - ], - linkedFlows: [ - { - title: 'Pool name: Re7 Starknet Ecosystem', - subItems: [ - { key: 'APY', value: '9.24%' }, - { key: 'Weight', value: '97.81 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Re7 USDC', - subItems: [ - { key: 'APY', value: '4.39%' }, - { key: 'Weight', value: '1.99 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Genesis', - subItems: [ - { key: 'APY', value: '3.98%' }, - { key: 'Weight', value: '0.20 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Alterscope wstETH', - subItems: [ - { key: 'APY', value: '3.87%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope Cornerstone', - subItems: [ - { key: 'APY', value: '3.87%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope CASH', - subItems: [ - { key: 'APY', value: '3.87%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope xSTRK', - subItems: [ - { key: 'APY', value: '3.87%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Re7 rUSDC', - subItems: [ - { key: 'APY', value: '3.87%' }, - { key: 'Weight', value: '0.00 / 100.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - ], - style: { backgroundColor: '#6e53dc' }, - }, - ], - }, - { - name: 'Vesu Fusion ETH', - id: 'vesu_fusion_eth', - apy: 0.047520955986261756, - apySplit: { baseApy: 0.047520955986261756, rewardsApy: 0 }, - depositToken: [ - '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', - ], - leverage: 1, - contract: [ - { - name: 'ETH', - address: - '0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca', - }, - ], - tvlUsd: 112.54521093847399, - status: { number: 1, value: 'Hot & New 🔥' }, - riskFactor: 0.75, - logos: ['https://opbnb.bscscan.com/token/images/ether.svg'], - isAudited: true, - auditUrl: - 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', - actions: [], - investmentFlows: [ - { - title: 'Your Deposit', - subItems: [ - { key: 'Net yield', value: '4.75%' }, - { key: 'Performance Fee', value: '10.00%' }, - ], - linkedFlows: [ - { - title: 'Pool name: Re7 wstETH', - subItems: [ - { key: 'APY', value: '5.29%' }, - { key: 'Weight', value: '98.00 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Genesis', - subItems: [ - { key: 'APY', value: '4.90%' }, - { key: 'Weight', value: '2.00 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Re7 USDC', - subItems: [ - { key: 'APY', value: '4.80%' }, - { key: 'Weight', value: '0.00 / 100.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope wstETH', - subItems: [ - { key: 'APY', value: '4.80%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope Cornerstone', - subItems: [ - { key: 'APY', value: '4.80%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope CASH', - subItems: [ - { key: 'APY', value: '4.80%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope xSTRK', - subItems: [ - { key: 'APY', value: '4.80%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Re7 rUSDC', - subItems: [ - { key: 'APY', value: '4.80%' }, - { key: 'Weight', value: '0.00 / 100.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - ], - style: { backgroundColor: '#6e53dc' }, - }, - ], - }, - { - name: 'Vesu Fusion USDT', - id: 'vesu_fusion_usdt', - apy: 0.0354024, - apySplit: { baseApy: 0.0354024, rewardsApy: 0 }, - depositToken: [ - '0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8', - ], - leverage: 1, - contract: [ - { - name: 'USDT', - address: - '0x115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c', - }, - ], - tvlUsd: 2.000055, - status: { number: 1, value: 'Hot & New 🔥' }, - riskFactor: 0.75, - logos: [ - 'https://assets.coingecko.com/coins/images/325/small/Tether.png', - ], - isAudited: true, - auditUrl: - 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', - actions: [], - investmentFlows: [ - { - title: 'Your Deposit', - subItems: [ - { key: 'Net yield', value: '3.54%' }, - { key: 'Performance Fee', value: '10.00%' }, - ], - linkedFlows: [ - { - title: 'Pool name: Genesis', - subItems: [ - { key: 'APY', value: '3.93%' }, - { key: 'Weight', value: '100.00 / 100.00%' }, - ], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - { - title: 'Pool name: Alterscope wstETH', - subItems: [ - { key: 'APY', value: '3.87%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope Cornerstone', - subItems: [ - { key: 'APY', value: '3.87%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope CASH', - subItems: [ - { key: 'APY', value: '3.87%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - { - title: 'Pool name: Alterscope xSTRK', - subItems: [ - { key: 'APY', value: '3.87%' }, - { key: 'Weight', value: '0.00 / 20.00%' }, - ], - linkedFlows: [], - style: { color: 'gray' }, - }, - ], - style: { backgroundColor: '#6e53dc' }, - }, - ], - }, - { - name: 'Ekubo xSTRK/STRK', - id: 'ekubo_cl_xstrkstrk', - apy: 0.2250861274873169, - apySplit: { baseApy: 0.2250861274873169, rewardsApy: 0 }, - depositToken: [ - '0x28d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a', - ], - leverage: 1, - contract: [ - { - name: 'Ekubo xSTRK/STRK', - address: - '0x1f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324', - }, - ], - tvlUsd: 116.1401966610899, - status: { number: 1, value: 'Hot & New 🔥' }, - riskFactor: 0.875, - logos: [ - 'https://dashboard.endur.fi/endur-fi.svg', - 'https://assets.coingecko.com/coins/images/26433/small/starknet.png', - ], - isAudited: true, - auditUrl: - 'https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf', - actions: [], - investmentFlows: [ - { - id: 'base', - title: 'Your Deposit', - subItems: [ - { key: 'Net yield', value: '36.71%' }, - { key: 'Performance Fee', value: '10.00%' }, - ], - linkedFlows: [ - { - title: 'Ekubo xSTRK/STRK', - subItems: [{ key: 'Pool', value: '0.01%, 200 tick spacing' }], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - ], - style: { backgroundColor: '#6e53dc' }, - }, - { - id: 'rebalance', - title: 'Automated Rebalance', - subItems: [{ key: 'Range selection', value: '-200 to 200 ticks' }], - linkedFlows: [ - { - title: 'Ekubo xSTRK/STRK', - subItems: [{ key: 'Pool', value: '0.01%, 200 tick spacing' }], - linkedFlows: [], - style: { backgroundColor: '#35484f' }, - }, - ], - style: { backgroundColor: 'purple' }, - }, - ], - }, - { - name: 'xSTRK Sensei', - id: 'xstrk_sensei', - apy: 0.2789537137720841, - apySplit: { baseApy: 0.2789537137720841, rewardsApy: 0 }, - depositToken: [ - '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', - ], - leverage: 2.4164749547200968, - contract: [ - { - name: 'frmDNMMSTRKxSTRK', - address: - '0x7023a5cadc8a5db80e4f0fde6b330cbd3c17bbbf9cb145cbabd7bd5e6fb7b0b', - }, - ], - tvlUsd: 46290.62976632084, - status: { number: 3, value: 'Active' }, - riskFactor: 0.75, - logos: ['/zklend/icons/tokens/strk.svg?w=20'], - isAudited: false, - actions: [ - { - name: 'Stake STRK to Endur', - protocol: { name: 'Endur', logo: 'https://endur.fi/favicon.ico' }, - token: { name: 'STRK', logo: '/zklend/icons/tokens/strk.svg?w=20' }, - amount: '1000.00', - isDeposit: true, - apy: 0.11543828055292038, - }, - { - name: "Supply's your xSTRK to Vesu", - protocol: { - name: 'Vesu', - logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', - }, - token: { - name: 'xSTRK (Re7 xSTRK)', - logo: '/imagedelivery/c1f44170-c1b0-4531-3d3b-5f0bacfe1300/logo', - }, - amount: '1000.00', - isDeposit: true, - apy: 0.025260354362073953, - }, - { - name: 'Borrow STRK from Vesu', - protocol: { - name: 'Vesu', - logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', - }, - token: { - name: 'STRK (Re7 xSTRK)', - logo: '/zklend/icons/tokens/strk.svg?w=20', - }, - amount: '725.00', - isDeposit: false, - apy: -0.079453, - }, - { - name: 'Loop back to step 1, repeat 3 more times', - protocol: { - name: 'Vesu', - logo: 'https://static-assets-8zct.onrender.com/integrations/vesu/logo.png', - }, - token: { - name: 'STRK (Re7 xSTRK)', - logo: '/zklend/icons/tokens/strk.svg?w=20', - }, - amount: '541.1958750000001', - isDeposit: true, - apy: 0.3021643996908885, - }, - { - name: 'Re-invest your STRK Rewards every 7 days (Compound)', - protocol: { name: 'Endur', logo: 'https://endur.fi/favicon.ico' }, - token: { name: 'STRK', logo: '/zklend/icons/tokens/strk.svg?w=20' }, - amount: '1000.00', - isDeposit: true, - apy: 0.03232837717252962, - }, - ], - investmentFlows: [], - }, - { - name: 'Auto Compounding STRK', - id: 'auto_token_strk', - apy: 0, - apySplit: { baseApy: 0, rewardsApy: 0 }, - depositToken: [ - '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', - '0x6d8fa671ef84f791b7f601fa79fea8f6ceb70b5fa84189e3159d532162efc21', - ], - leverage: 0, - contract: [ - { - name: 'frmzSTRK', - address: - '0x541681b9ad63dff1b35f79c78d8477f64857de29a27902f7298f7b620838ea', - }, - ], - tvlUsd: 0, - status: { number: 5, value: 'Retired' }, - riskFactor: 0.5, - logos: [''], - isAudited: false, - actions: [], - investmentFlows: [], - }, - { - name: 'Auto Compounding USDC', - id: 'auto_token_usdc', - apy: 0, - apySplit: { baseApy: 0, rewardsApy: 0 }, - depositToken: [ - '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', - '0x47ad51726d891f972e74e4ad858a261b43869f7126ce7436ee0b2529a98f486', - ], - leverage: 0, - contract: [ - { - name: 'frmzUSDC', - address: - '0x16912b22d5696e95ffde888ede4bd69fbbc60c5f873082857a47c543172694f', - }, - ], - tvlUsd: 0, - status: { number: 5, value: 'Retired' }, - riskFactor: 0.5, - logos: [''], - isAudited: false, - actions: [], - investmentFlows: [], - }, - { - name: 'USDC Sensei', - id: 'usdc_sensei', - apy: 0, - apySplit: { baseApy: 0, rewardsApy: 0 }, - depositToken: [ - '0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8', - ], - leverage: 0, - contract: [ - { - name: 'frmDNMMUSDCETH', - address: - '0x04937b58e05a3a2477402d1f74e66686f58a61a5070fcc6f694fb9a0b3bae422', - }, - ], - tvlUsd: 0, - status: { number: 5, value: 'Retired' }, - riskFactor: 0.75, - logos: ['/zklend/icons/tokens/strk.svg?w=20'], - isAudited: false, - actions: [], - investmentFlows: [], - }, - { - name: 'ETH Sensei', - id: 'eth_sensei', - apy: 0, - apySplit: { baseApy: 0, rewardsApy: 0 }, - depositToken: [ - '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', - ], - leverage: 0, - contract: [ - { - name: 'frmDNMMETHUSDC', - address: - '0x9d23d9b1fa0db8c9d75a1df924c3820e594fc4ab1475695889286f3f6df250', - }, - ], - tvlUsd: 0, - status: { number: 5, value: 'Retired' }, - riskFactor: 0.75, - logos: ['/zklend/icons/tokens/strk.svg?w=20'], - isAudited: false, - actions: [], - investmentFlows: [], - }, - { - name: 'STRK Sensei', - id: 'strk_sensei', - apy: 0, - apySplit: { baseApy: 0, rewardsApy: 0 }, - depositToken: [ - '0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d', - ], - leverage: 0, - contract: [ - { - name: 'frmDNMMSTRKETH', - address: - '0x20d5fc4c9df4f943ebb36078e703369c04176ed00accf290e8295b659d2cea6', - }, - ], - tvlUsd: 0, - status: { number: 5, value: 'Retired' }, - riskFactor: 0.75, - logos: ['/zklend/icons/tokens/strk.svg?w=20'], - isAudited: false, - actions: [], - investmentFlows: [], - }, - { - name: 'ETH Sensei XL', - id: 'eth_sensei_xl', - apy: 0, - apySplit: { baseApy: 0, rewardsApy: 0 }, - depositToken: [ - '0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', - ], - leverage: 0, - contract: [ - { - name: 'frmDNMMETHUSDC2', - address: - '0x9140757f8fb5748379be582be39d6daf704cc3a0408882c0d57981a885eed9', - }, - ], - tvlUsd: 0, - status: { number: 5, value: 'Retired' }, - riskFactor: 0.75, - logos: ['/zklend/icons/tokens/strk.svg?w=20'], - isAudited: false, - actions: [], - investmentFlows: [], - }, - ], - lastUpdated: '2025-04-06T18:52:26.899Z', - }); -} diff --git a/yarn.lock b/yarn.lock index edc8f4f5..1f361882 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2573,6 +2573,13 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== +"@upstash/redis@^1.34.7": + version "1.34.7" + resolved "https://registry.yarnpkg.com/@upstash/redis/-/redis-1.34.7.tgz#7cf4909bc94bf1ad91d9ee81ff93dc8126cda56c" + integrity sha512-EJ/g+ttDL3MFS8WNDLj/Buybo3FpPw2IAFl4X8lxh8/l7YTq6kTqT6FKkq8eYRdN6lGlVw+W6qnmym734m39Tg== + dependencies: + crypto-js "^4.2.0" + "@vercel/analytics@1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@vercel/analytics/-/analytics-1.2.2.tgz#715d8f203a170c06ba36b363e03b048c03060d5d" @@ -3851,6 +3858,11 @@ crossws@^0.2.4: resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.2.4.tgz#82a8b518bff1018ab1d21ced9e35ffbe1681ad03" integrity sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg== +crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + css-box-model@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" From a785c6f3ffdc45944f4d26db6261e0511346ff15 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Mon, 7 Apr 2025 18:29:12 +0530 Subject: [PATCH 13/30] add strats api in crons --- vercel.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vercel.json b/vercel.json index bead3fdd..0693d1f0 100644 --- a/vercel.json +++ b/vercel.json @@ -7,6 +7,10 @@ { "path": "/api/revalidate", "schedule": "*/5 * * * *" + }, + { + "path": "/api/strategies?no_cache=true", + "schedule": "*/5 * * * *" } ] } From ca6f0f171b43860dc27a3dd95a20356d285c90d9 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Tue, 8 Apr 2025 15:40:42 +0530 Subject: [PATCH 14/30] update yield to 16000 blocks in cl vault --- src/app/api/strategies/route.ts | 2 +- src/strategies/ekubo_cl_vault.ts | 2 +- vercel.json | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/app/api/strategies/route.ts b/src/app/api/strategies/route.ts index ea866bb5..425deb99 100755 --- a/src/app/api/strategies/route.ts +++ b/src/app/api/strategies/route.ts @@ -11,7 +11,7 @@ import VesuAtoms, { vesu } from '@/store/vesu.store'; import EndurAtoms, { endur } from '@/store/endur.store'; import kvRedis, { getDataFromRedis } from '../lib'; -export const revalidate = 600; // 1 hr +export const revalidate = 1800; // 30 minutes export const dynamic = 'force-dynamic'; const allPoolsAtom = atom((get) => { diff --git a/src/strategies/ekubo_cl_vault.ts b/src/strategies/ekubo_cl_vault.ts index e389c0b4..ef817bcc 100644 --- a/src/strategies/ekubo_cl_vault.ts +++ b/src/strategies/ekubo_cl_vault.ts @@ -269,7 +269,7 @@ export class EkuboClStrategy extends IStrategy { }; async solve(pools: PoolInfo[], amount: string) { - const yieldInfo = await this.clVault.netAPY('pending', 2000); + const yieldInfo = await this.clVault.netAPY('pending', 16000); this.netYield = yieldInfo; this.leverage = 1; diff --git a/vercel.json b/vercel.json index 0693d1f0..e597d0f8 100644 --- a/vercel.json +++ b/vercel.json @@ -5,12 +5,12 @@ "schedule": "0 8 * * *" }, { - "path": "/api/revalidate", - "schedule": "*/5 * * * *" + "path": "/api/strategies?no_cache=true", + "schedule": "*/9 * * * *" }, { - "path": "/api/strategies?no_cache=true", - "schedule": "*/5 * * * *" + "path": "/api/stats?no_cache=true", + "schedule": "*/9 * * * *" } ] } From 1e4340a04b8251d53ab519b95119be5ca9df6da3 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Fri, 11 Apr 2025 17:08:25 +0530 Subject: [PATCH 15/30] update @strkfarm/sdk --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 1e36ca47..acb4fd33 100755 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@prisma/client": "5.18.0", "@starknet-react/chains": "3.0.0", "@starknet-react/core": "3.0.1", - "@strkfarm/sdk": "^1.0.29", + "@strkfarm/sdk": "^1.0.30", "@tanstack/query-core": "5.28.0", "@types/mixpanel-browser": "2.49.0", "@types/mustache": "4.2.5", diff --git a/yarn.lock b/yarn.lock index 1f361882..560eb99f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2205,10 +2205,10 @@ viem "^2.19.1" zod "^3.22.4" -"@strkfarm/sdk@^1.0.29": - version "1.0.29" - resolved "https://registry.yarnpkg.com/@strkfarm/sdk/-/sdk-1.0.29.tgz#8e8dc65b12e83bddd57dbc53db90bd4af7f62978" - integrity sha512-qifA8dyu0agL0+yYXRuo6gjqiNzR6vJsw10tZOx3KGrKYcZ7U//hKlAWXIiZpCyQN+KD5E9jZLNEV4ArdKQ04g== +"@strkfarm/sdk@^1.0.30": + version "1.0.30" + resolved "https://registry.yarnpkg.com/@strkfarm/sdk/-/sdk-1.0.30.tgz#f6e965dc9f213dbc266519cf39e8359f703d5616" + integrity sha512-GbRLe9m0R5E7Ulmj/L5Gscd9yEldLm0UFHMuQGYokRh/gAP3gNea9Gja5vYE8HwzMX5ns1/2jLcUnOYp51zWKQ== dependencies: "@avnu/avnu-sdk" "^3.0.2" axios "^1.7.2" From 4fb07bd279893b67341dbf7df784d7fa7652f803 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Fri, 11 Apr 2025 22:09:54 +0530 Subject: [PATCH 16/30] bump @strkfarm/sdk - vesu api fix --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index acb4fd33..65fefbee 100755 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@prisma/client": "5.18.0", "@starknet-react/chains": "3.0.0", "@starknet-react/core": "3.0.1", - "@strkfarm/sdk": "^1.0.30", + "@strkfarm/sdk": "^1.0.31", "@tanstack/query-core": "5.28.0", "@types/mixpanel-browser": "2.49.0", "@types/mustache": "4.2.5", diff --git a/yarn.lock b/yarn.lock index 560eb99f..93758f0f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2205,10 +2205,10 @@ viem "^2.19.1" zod "^3.22.4" -"@strkfarm/sdk@^1.0.30": - version "1.0.30" - resolved "https://registry.yarnpkg.com/@strkfarm/sdk/-/sdk-1.0.30.tgz#f6e965dc9f213dbc266519cf39e8359f703d5616" - integrity sha512-GbRLe9m0R5E7Ulmj/L5Gscd9yEldLm0UFHMuQGYokRh/gAP3gNea9Gja5vYE8HwzMX5ns1/2jLcUnOYp51zWKQ== +"@strkfarm/sdk@^1.0.31": + version "1.0.31" + resolved "https://registry.yarnpkg.com/@strkfarm/sdk/-/sdk-1.0.31.tgz#e9a42f7e5747f438273a5e7859ded9a4872e8ec7" + integrity sha512-/RE85z/G48jNr0fYXAVnyKzPNM56bFJklgidX11DdsKa88MgrfXpyIKawoyQN6qbXLd5AbrNiNtm56SdC0tjKQ== dependencies: "@avnu/avnu-sdk" "^3.0.2" axios "^1.7.2" From f4948e5fd73c3fefb6f29c9667d97df7c298e64f Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Tue, 15 Apr 2025 11:07:29 +0530 Subject: [PATCH 17/30] add rewards api --- src/app/api/lib.ts | 97 +++++++++++++++++++++++++++++++++ src/app/api/rewards/route.ts | 27 +++++++++ src/app/api/strategies/route.ts | 17 +++++- src/store/protocols.ts | 15 ++++- src/store/strkfarm.atoms.ts | 22 ++++++-- 5 files changed, 168 insertions(+), 10 deletions(-) create mode 100644 src/app/api/rewards/route.ts diff --git a/src/app/api/lib.ts b/src/app/api/lib.ts index 40b79719..335698d7 100644 --- a/src/app/api/lib.ts +++ b/src/app/api/lib.ts @@ -1,4 +1,5 @@ import { Redis } from '@upstash/redis'; +import { Contract, RpcProvider } from 'starknet'; const kvRedis = new Redis({ url: process.env.VK_REDIS_KV_REST_API_URL, @@ -28,3 +29,99 @@ export async function getDataFromRedis( } export default kvRedis; + +export const getRewardsInfo = async ( + strategies: { + tvlUsd: number; + depositToken: string[]; + id: string; + }[], +) => { + const funder = + '0x03495DD1e4838aa06666aac236036D86E81A6553e222FC02e70C2Cbc0062e8d0'; + const allowedStrats = [ + { + id: 'vesu_fusion_eth', + // ! consider exchange rate of vToken + maxRewardsPerDay: 0.073, // in token units + maxAPY: 100, // in percent + underlyingTokenName: 'ETH', + decimals: 18, + rewardToken: '', + }, + ]; + + const provider = new RpcProvider({ + nodeUrl: process.env.RPC_URL!, + }); + + const rewardsInfo: { + id: string; + reward: number; + tvlUsd: number; + rewardAPY: number; + maxRewardsPerDay: number; + }[] = []; + for (const strat of strategies) { + const stratId = strat.id; + const stratAllowed = allowedStrats.find( + (allowedStrat) => allowedStrat.id === stratId, + ); + if (stratAllowed) { + // Fetch the price of the underlying token + const priceResponse = await fetch( + `${process.env.HOSTNAME}/api/price/${stratAllowed.underlyingTokenName}`, + ); + const priceData = await priceResponse.json(); + const tokenPrice = priceData.price; + // ! consider token price of vToken + + const tvlUsd = strat.tvlUsd; + console.log(`RewardCalc::${stratId}::tvlUsd::${tvlUsd}`); + + // Calculate the hourly reward based on TVL and token price + const rewardBasedOnTVL = + (tvlUsd * stratAllowed.maxAPY) / (100 * 365 * 24 * tokenPrice); + console.log( + `RewardCalc::${stratId}::ewardBasedOnTVL::${rewardBasedOnTVL}`, + ); + console.log(`RewardCalc::${stratId}::tvl::${tvlUsd}`); + console.log(`RewardCalc::${stratId}::tokenPrice::${tokenPrice}`); + + // Ensure the reward does not exceed max rewards per day + let finalReward = Math.min( + rewardBasedOnTVL, + stratAllowed.maxRewardsPerDay / 24, + ); + console.log(`RewardCalc::${stratId}::finalReward::${finalReward}`); + + // if less bal available, use the available balance + const rewardToken = stratAllowed.rewardToken; + const cls = await provider.getClassAt(rewardToken); + const tokenContract = new Contract(cls.abi, rewardToken, provider); + const available = await tokenContract.balanceOf(funder); + const availableBal = + Number( + BigInt(available.toString()) / + BigInt(10 ** (stratAllowed.decimals - 4)), + ) / 10000; + console.log( + `RewardCalc::${stratId}::availableBal::${availableBal.toString()}`, + ); + + finalReward = Math.min(finalReward, availableBal); + console.log(`RewardCalc::${stratId}::finalReward::${finalReward}`); + + // Calculate the reward APY + rewardsInfo.push({ + id: stratId, + reward: finalReward, + tvlUsd, + rewardAPY: ((finalReward * 24 * 365) / (tvlUsd / tokenPrice)) * 100, + maxRewardsPerDay: stratAllowed.maxRewardsPerDay, + }); + } + } + + return rewardsInfo; +}; diff --git a/src/app/api/rewards/route.ts b/src/app/api/rewards/route.ts new file mode 100644 index 00000000..885527ba --- /dev/null +++ b/src/app/api/rewards/route.ts @@ -0,0 +1,27 @@ +import { NextResponse } from 'next/server'; +import { getRewardsInfo } from '../lib'; + +export async function GET(_request: Request) { + const result = await fetch(`${process.env.HOSTNAME}/api/strategies`); + const stratsRes = await result.json(); + const strategies = stratsRes.strategies; + const lastUpdated = new Date(stratsRes.lastUpdated); + const now = new Date(); + if (now.getTime() - lastUpdated.getTime() > 60000000) { + return new Response('Strategies are stale', { + status: 500, + }); + } + + const rewardsInfo = await getRewardsInfo(strategies); + + return NextResponse.json( + { + lastUpdated: new Date().toISOString(), + rewards: rewardsInfo, + }, + { + status: 200, + }, + ); +} diff --git a/src/app/api/strategies/route.ts b/src/app/api/strategies/route.ts index 425deb99..cd3eca1f 100755 --- a/src/app/api/strategies/route.ts +++ b/src/app/api/strategies/route.ts @@ -9,7 +9,7 @@ import { STRKFarmStrategyAPIResult } from '@/store/strkfarm.atoms'; import { MY_STORE } from '@/store'; import VesuAtoms, { vesu } from '@/store/vesu.store'; import EndurAtoms, { endur } from '@/store/endur.store'; -import kvRedis, { getDataFromRedis } from '../lib'; +import kvRedis, { getDataFromRedis, getRewardsInfo } from '../lib'; export const revalidate = 1800; // 30 minutes export const dynamic = 'force-dynamic'; @@ -59,7 +59,7 @@ async function getStrategyInfo( ): Promise { const tvl = await strategy.getTVL(); - return { + const data = { name: strategy.name, id: strategy.id, apy: strategy.netYield, @@ -107,6 +107,19 @@ async function getStrategyInfo( }), investmentFlows: strategy.investmentFlows, }; + + const rewardsInfo = await getRewardsInfo([ + { + id: strategy.id, + tvlUsd: data.tvlUsd, + depositToken: data.depositToken, + }, + ]); + if (rewardsInfo.length > 0) { + data.apySplit.rewardsApy = rewardsInfo[0].rewardAPY / 100; + data.apy += rewardsInfo[0].rewardAPY / 100; + } + return data; } const REDIS_KEY = `${process.env.VK_REDIS_PREFIX}::strategies`; diff --git a/src/store/protocols.ts b/src/store/protocols.ts index 939c4117..ff784d5a 100644 --- a/src/store/protocols.ts +++ b/src/store/protocols.ts @@ -187,7 +187,7 @@ export function getPoolInfoFromStrategy( } else if (strat.name.includes('ETH')) { category.push(Category.ETH); } - return { + const item = { pool: { id: strat.id, name: strat.name, @@ -202,8 +202,8 @@ export function getPoolInfoFromStrategy( apr: strat.apy, aprSplits: [ { - apr: strat.apy, - title: 'Net Yield', + apr: strat.apySplit.baseApy, + title: 'Strategy APY', description: 'Includes fees & Defi spring rewards', }, ], @@ -225,6 +225,15 @@ export function getPoolInfoFromStrategy( is_promoted: strat.name.includes('Stake'), }, }; + + if (strat.apySplit.rewardsApy > 0) { + item.aprSplits.push({ + apr: strat.apySplit.rewardsApy, + title: 'Rewards APY', + description: 'Additional incentives by STRKFarm', + }); + } + return item; } export const allPoolsAtomWithStrategiesUnSorted = atom((get) => { diff --git a/src/store/strkfarm.atoms.ts b/src/store/strkfarm.atoms.ts index bbd47477..f05c80ad 100644 --- a/src/store/strkfarm.atoms.ts +++ b/src/store/strkfarm.atoms.ts @@ -67,6 +67,15 @@ export class STRKFarm extends IDapp { const isStable = poolName.includes('USDC') || poolName.includes('USDT'); const categories: Category[] = getCategoriesFromName(poolName, isStable); + const rewardsApy: APRSplit[] = []; + if (rawPool.apySplit.rewardsApy > 0) { + rewardsApy.push({ + apr: rawPool.apySplit.rewardsApy, + title: 'Rewards APY', + description: 'Additional incentives by STRKFarm', + }); + } + const poolInfo: PoolInfo = { pool: { id: rawPool.id, @@ -78,9 +87,12 @@ export class STRKFarm extends IDapp { link: `/strategy/${rawPool.id}`, logo: this.logo, }, - apr: 0, + apr: + rewardsApy.length && rewardsApy[0].apr != 'Err' + ? rewardsApy[0].apr + : 0, tvl: rawPool.tvlUsd, - aprSplits: [], + aprSplits: [...rewardsApy], category: categories, type: PoolType.Derivatives, lending: { @@ -111,10 +123,10 @@ export class STRKFarm extends IDapp { if (data.isSuccess) { const item = aprData.find((doc) => doc.id === p.pool.id); if (item) { - baseAPY = item.apy; + baseAPY = item.apySplit.baseApy; splitApr = { - apr: baseAPY, - title: 'Net APY', + apr: item.apySplit.baseApy, + title: 'Strategy APY', description: 'Includes fees & Defi spring rewards', }; } From feacc100861e51d20f2604857b58d384248f8b0f Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Tue, 15 Apr 2025 14:36:53 +0530 Subject: [PATCH 18/30] ekubo: improve deposit UX --- package.json | 1 - src/app/api/stats/[address]/route.ts | 1 + .../[strategyId]/_components/Strategy.tsx | 34 +- src/components/AmountInput.tsx | 190 +- src/components/Deposit.tsx | 27 +- src/store/strategies.atoms.tsx | 18 +- src/store/transactions.atom.ts | 15 +- src/store/vesu.store.ts | 2 +- src/strategies/IStrategy.ts | 19 +- src/strategies/auto_strk.strat.ts | 4 +- src/strategies/auto_xstrk.strat.ts | 6 +- src/strategies/delta_neutral_mm.ts | 4 +- src/strategies/delta_neutral_mm_2.ts | 2 +- src/strategies/ekubo_cl_vault.ts | 38 +- src/utils.ts | 3 +- yarn.lock | 1947 +---------------- 16 files changed, 275 insertions(+), 2036 deletions(-) diff --git a/package.json b/package.json index 65fefbee..e50d4bf9 100755 --- a/package.json +++ b/package.json @@ -34,7 +34,6 @@ "@prisma/client": "5.18.0", "@starknet-react/chains": "3.0.0", "@starknet-react/core": "3.0.1", - "@strkfarm/sdk": "^1.0.31", "@tanstack/query-core": "5.28.0", "@types/mixpanel-browser": "2.49.0", "@types/mustache": "4.2.5", diff --git a/src/app/api/stats/[address]/route.ts b/src/app/api/stats/[address]/route.ts index 0365dda4..32a9d69c 100755 --- a/src/app/api/stats/[address]/route.ts +++ b/src/app/api/stats/[address]/route.ts @@ -41,6 +41,7 @@ export async function GET(_req: Request, context: any) { amount: a.amount, })), strategy.settings.quoteToken, + 'stats[address]', ); return { id: strategy.id, diff --git a/src/app/strategy/[strategyId]/_components/Strategy.tsx b/src/app/strategy/[strategyId]/_components/Strategy.tsx index 3d3570f9..04f31ada 100755 --- a/src/app/strategy/[strategyId]/_components/Strategy.tsx +++ b/src/app/strategy/[strategyId]/_components/Strategy.tsx @@ -31,7 +31,7 @@ import HarvestTime from '@/components/HarvestTime'; import { DUMMY_BAL_ATOM, returnEmptyBal } from '@/store/balance.atoms'; import { addressAtom } from '@/store/claims.atoms'; import { strategiesAtom, StrategyInfo } from '@/store/strategies.atoms'; -import { transactionsAtom, TxHistoryAtom } from '@/store/transactions.atom'; +import { TxHistoryAtom } from '@/store/transactions.atom'; import { capitalize, getTokenInfoFromAddr, @@ -54,18 +54,12 @@ import { TokenDeposit } from './TokenDeposit'; const Strategy = ({ params }: StrategyParams) => { const address = useAtomValue(addressAtom); const strategies = useAtomValue(strategiesAtom); - const transactions = useAtomValue(transactionsAtom); const [isMounted, setIsMounted] = useState(false); const strategy: StrategyInfo | undefined = useMemo(() => { const id = params.strategyId; - - console.log('id', id); - return strategies.find((s) => s.id === id); - }, [params.strategyId, strategies]); - - console.log('strategy', strategy); + }, [params.strategyId, strategies.map((id) => id).toString()]); const strategyAddress = useMemo(() => { const holdingTokens = strategy?.holdingTokens; @@ -89,14 +83,10 @@ const Strategy = ({ params }: StrategyParams) => { // fetch tx history const txHistoryAtom = useMemo( - () => - TxHistoryAtom( - strategyAddress, - address!, - strategy?.balanceSummaryAtom || DUMMY_BAL_ATOM, - ), - [address, strategyAddress, balData], + () => TxHistoryAtom(strategyAddress, address!), + [address, strategyAddress], ); + const txHistoryResult = useAtomValue(txHistoryAtom); const txHistory = useMemo(() => { if (txHistoryResult.data) { @@ -115,7 +105,7 @@ const Strategy = ({ params }: StrategyParams) => { txHistoryResult.isLoading, ); return txHistoryResult.data || { findManyInvestment_flows: [] }; - }, [txHistoryResult.data]); + }, [JSON.stringify(txHistoryResult.data)]); // compute profit // profit doesnt change quickly in real time, but total deposit amount can change @@ -222,13 +212,13 @@ const Strategy = ({ params }: StrategyParams) => { > How does it work? - {strategy.description} - +
{getUniqueById( strategy.actions.map((p) => ({ @@ -420,7 +410,7 @@ const Strategy = ({ params }: StrategyParams) => { Behind the scenes - + Actions done automatically by the strategy (smart-contract) with an investment of $1000 @@ -547,8 +537,8 @@ const Strategy = ({ params }: StrategyParams) => { {r} diff --git a/src/components/AmountInput.tsx b/src/components/AmountInput.tsx index 3e327325..184e34eb 100644 --- a/src/components/AmountInput.tsx +++ b/src/components/AmountInput.tsx @@ -24,6 +24,7 @@ import { Center, MenuList, MenuItem, + Link, } from '@chakra-ui/react'; import { useAccount } from '@starknet-react/core'; import { useAtom, useAtomValue, Atom, useSetAtom } from 'jotai'; @@ -31,6 +32,7 @@ import { TokenInfo as TokenInfoV2, Web3Number } from '@strkfarm/sdk'; import { AmountInputInfo, depositAtom, + DepositAtomType, inputsInfoAtom, updateInputInfoAtom, } from './Deposit'; @@ -74,6 +76,10 @@ const AmountInput = forwardRef( const [depositInfo, setDepositInfo] = useAtom(depositAtom); const setInputInfo = useSetAtom(updateInputInfoAtom); const inputsInfo = useAtomValue(inputsInfoAtom); + const [simulatedMaxAmount, setSimulatedMaxAmount] = useState({ + isSet: false, + amount: 1e18, + }); // some random big amount to start with const inputInfo = useMemo(() => { if (props.index < 0 || props.index >= inputsInfo.length) @@ -147,12 +153,28 @@ const AmountInput = forwardRef( } } - const min = MyNumber.min(reducedBalance, adjustedMaxAllowed); + // simulation check + const postSimulationMax = MyNumber.min( + adjustedMaxAllowed, + MyNumber.fromEther( + simulatedMaxAmount.amount.toFixed(13), + selectedMarket.decimals, + ), + ); + + const min = MyNumber.min(reducedBalance, postSimulationMax); return MyNumber.max( min, MyNumber.fromEther('0', selectedMarket.decimals), ); - }, [balance, props.strategy, selectedMarket, props.isDeposit, tvlInfo]); + }, [ + balance, + props.strategy, + selectedMarket, + props.isDeposit, + tvlInfo, + simulatedMaxAmount.amount, + ]); function onAmountChange( _amt: MyNumber, @@ -167,34 +189,38 @@ const AmountInput = forwardRef( rawAmount, }); - checkAndTriggerOnAmountsChange(_amt, _token); + checkAndTriggerOnAmountsChange(_amt, _token, inputsInfo, depositInfo); } function checkAndTriggerOnAmountsChange( _amt: MyNumber, _token: TokenInfoV2 = props.tokenInfo, + _inputsInfo: AmountInputInfo[], + _depositInfo: DepositAtomType, ) { // if onAmountsChange defined - const isAllTokenInfosDefined = inputsInfo.every((item) => item.tokenInfo); + const isAllTokenInfosDefined = _inputsInfo.every( + (item) => item.tokenInfo, + ); console.log( - 'onAmountsChange [11.3] [2.1]', + 'onAmountsChange [2.1]', props.index, isAllTokenInfosDefined, props.buttonText, - inputsInfo, - depositInfo.onAmountsChange, + _inputsInfo, + _depositInfo.onAmountsChange, ); - if (!isAllTokenInfosDefined || !depositInfo.onAmountsChange) { + if (!isAllTokenInfosDefined || !_depositInfo.onAmountsChange) { return; } const _amtWeb3 = Web3Number.fromWei(_amt.toString(), _token.decimals); - console.log('onAmountsChange [2.2]', _amtWeb3); + console.log('onAmountsChange [2.2]', _amtWeb3.toString(), props.index); try { setDepositInfo({ - ...depositInfo, + ..._depositInfo, loading: true, }); - depositInfo + _depositInfo .onAmountsChange( { amountInfo: { @@ -203,7 +229,7 @@ const AmountInput = forwardRef( }, index: props.index, }, - inputsInfo.map((item, index) => { + _inputsInfo.map((item, index) => { if (index == props.index) { return { amount: _amtWeb3, @@ -217,26 +243,31 @@ const AmountInput = forwardRef( }), ) .then((output) => { - console.log('onAmountsChange [2.3]', output); + console.log('onAmountsChange [2.3]', JSON.stringify(output)); output.map((item, _index) => { + console.log( + 'onAmountsChange [2.4]', + item.amount.toString(), + item.tokenInfo.symbol, + ); setInputInfo({ index: _index, info: { - ...inputsInfo[_index], + ..._inputsInfo[_index], ...item, rawAmount: Number(item.amount.toFixed(6)).toString(), }, }); }); setDepositInfo({ - ...depositInfo, + ..._depositInfo, loading: false, }); }) .catch((err) => { console.log('onAmountsChange [2.4]', err); setDepositInfo({ - ...depositInfo, + ..._depositInfo, loading: false, }); }); @@ -321,6 +352,10 @@ const AmountInput = forwardRef( ); } + useEffect(() => { + console.log(`onAmountsChange [10.2]`, inputInfo, props.index); + }, [JSON.stringify(inputsInfo)]); + function updateTokenInfo(inputInfo: AmountInputInfo) { const { amount, tokenInfo: _t, isMaxClicked, rawAmount } = inputInfo; console.log( @@ -353,22 +388,80 @@ const AmountInput = forwardRef( }); }, []); - const handleDebouncedChange = debounce( - (newAmount: MyNumber, valueStr: string) => { - checkAndTriggerOnAmountsChange(newAmount, props.tokenInfo); - - // Track user input - mixpanel.track('Enter amount', { - strategyId: props.strategy.id, - strategyName: props.strategy.name, - buttonText: props.buttonText, - amount: inputInfo.amount.toFixed(2), - token: selectedMarket.name, - maxAmount: maxAmount.toEtherStr(), - address, + useEffect(() => { + if ( + !depositInfo || + !depositInfo.onAmountsChange || + simulatedMaxAmount.isSet + ) { + return; + } + // simulate deposits using a large amount + const amt = new Web3Number(10000000, props.tokenInfo.decimals); + depositInfo + .onAmountsChange( + { + amountInfo: { + amount: amt, + tokenInfo: props.tokenInfo, + }, + index: props.index, + }, + inputsInfo.map((item, index) => { + if (index == props.index) { + return { + amount: amt, + tokenInfo: props.tokenInfo, + }; + } + return { + amount: Web3Number.fromWei('0', item.tokenInfo?.decimals || 0), + tokenInfo: item.tokenInfo!, + }; + }), + ) + .then((output) => { + console.log('onAmountsChange [3.1]', output); + output.map((item, _index) => { + if (_index == props.index) { + setSimulatedMaxAmount({ + isSet: true, + amount: Number(item.amount.toFixed(13)), + }); + } + }); }); - }, - 100, + }, [depositInfo.onAmountsChange, simulatedMaxAmount.isSet]); + + const handleDebouncedChange = useCallback( + debounce( + ( + newAmount: MyNumber, + valueStr: string, + _inputsInfo: AmountInputInfo[], + _depositInfo: DepositAtomType, + ) => { + checkAndTriggerOnAmountsChange( + newAmount, + props.tokenInfo, + _inputsInfo, + _depositInfo, + ); + + // Track user input + mixpanel.track('Enter amount', { + strategyId: props.strategy.id, + strategyName: props.strategy.name, + buttonText: props.buttonText, + amount: inputInfo.amount.toFixed(2), + token: selectedMarket.name, + maxAmount: maxAmount.toEtherStr(), + address, + }); + }, + 400, + ), + [], ); // ms delay return ( @@ -463,7 +556,7 @@ const AmountInput = forwardRef( isMaxClicked: inputInfo.isMaxClicked, rawAmount: valueStr, }); - handleDebouncedChange(newAmount, valueStr); + handleDebouncedChange(newAmount, valueStr, inputsInfo, depositInfo); }} marginTop={'10px'} keepWithinRange={false} @@ -483,6 +576,39 @@ const AmountInput = forwardRef( {/* Validation error messages */} + {simulatedMaxAmount.amount == 0 && ( + + The liquidity at the current market price, is only in{' '} + { + inputsInfo.find((_, index) => index != props.index)?.tokenInfo + ?.symbol + } + . It may be in {props.tokenInfo.symbol}, when the market price + re-aligns. + + } + > + + The liquidity at the current market price, is only in{' '} + { + inputsInfo.find((_, index) => index != props.index)?.tokenInfo + ?.symbol + } + .{' '} + + Learn more + + . + + + )} {isMinAmountError && dirty && ( { console.error('Error in deposit methods', e); }); - }, [props.callsInfo, address, inputsInfo, firstInputInfo, isMaxClicked]); + }, [ + JSON.stringify(props.callsInfo), + address, + JSON.stringify(inputsInfo), + JSON.stringify(firstInputInfo), + isMaxClicked, + ]); // This is used to store the raw amount entered by the user const isDeposit = useMemo(() => props.buttonText === 'Deposit', [props]); @@ -234,7 +240,11 @@ function InternalDeposit(props: DepositProps) { }; }); props.strategy - .computeSummaryValue(amounts, props.strategy.settings.quoteToken) + .computeSummaryValue( + amounts, + props.strategy.settings.quoteToken, + 'depositcomp', + ) .then((summary) => { setInvestedSummary(summary); setLoadingInvestmentSummary(false); @@ -245,10 +255,13 @@ function InternalDeposit(props: DepositProps) { setLoadingInvestmentSummary(false); }); }, [ - inputsInfo, + // arrays and complex objects tend to trigger re-renders too much + // below is a workaround + JSON.stringify(inputsInfo), props.strategy.settings.quoteToken, - callsInfo, - firstInputInfo, + callsInfo.length, + callsInfo.length ? callsInfo[0].amounts.length : 0, + firstInputInfo.amount.toString(), ]); // use to maintain tx history and show toasts @@ -263,10 +276,6 @@ function InternalDeposit(props: DepositProps) { }; }, [props]); - useEffect(() => { - console.log('Deposit txInfo', txInfo); - }, [txInfo]); - // constructs tx calls const { calls } = useMemo(() => { const hook = callsInfo[depositInfo.actionIndex]; diff --git a/src/store/strategies.atoms.tsx b/src/store/strategies.atoms.tsx index d5bbde26..3414d656 100755 --- a/src/store/strategies.atoms.tsx +++ b/src/store/strategies.atoms.tsx @@ -19,6 +19,7 @@ import { EkuboCLVaultStrategies, VesuRebalanceStrategies } from '@strkfarm/sdk'; import { VesuRebalanceStrategy } from '@/strategies/vesu_rebalance'; import { atomWithQuery } from 'jotai-tanstack-query'; import { EkuboClStrategy } from '@/strategies/ekubo_cl_vault'; +import { ReactNode } from 'react'; export interface StrategyInfo extends IStrategyProps { name: string; @@ -203,11 +204,6 @@ export function getStrategies() { text: 'Depeg-risk: If xSTRK price on DEXes deviates from expected price, you may lose money or may have to wait for the price to recover.', tab: 'all', }, - { - type: 'info', - text: 'There is an ongoing issue with Braavos, because of which your transactions may fail. We will update here once it is resolved.', - tab: 'all', - }, ], isAudited: false, quoteToken: convertToV2TokenInfo(getTokenInfoFromName('STRK')), @@ -218,7 +214,7 @@ export function getStrategies() { return new VesuRebalanceStrategy( getTokenInfoFromName(v.depositTokens[0]?.symbol || ''), v.name, - v.description, + v.description as string, v, StrategyLiveStatus.HOT, { @@ -226,13 +222,7 @@ export function getStrategies() { isAudited: v.auditUrl ? true : false, auditUrl: v.auditUrl, isPaused: false, - alerts: [ - { - type: 'info', - text: 'There is an ongoing issue with Braavos that may cause your transactions to fail. We will provide an update here once it is resolved.', - tab: 'all', - }, - ], + alerts: [], quoteToken: convertToV2TokenInfo( getTokenInfoFromName(v.depositTokens[0]?.symbol || ''), ), @@ -243,7 +233,7 @@ export function getStrategies() { const ekuboCLStrats = EkuboCLVaultStrategies.map((v) => { return new EkuboClStrategy( v.name, - v.description, + v.description as ReactNode, v, StrategyLiveStatus.HOT, { diff --git a/src/store/transactions.atom.ts b/src/store/transactions.atom.ts index 18706ac1..47558680 100755 --- a/src/store/transactions.atom.ts +++ b/src/store/transactions.atom.ts @@ -4,15 +4,14 @@ import { TOKENS } from '@/constants'; import { capitalize, standariseAddress } from '@/utils'; import MyNumber from '@/utils/MyNumber'; -import { Atom, Getter, Setter, atom } from 'jotai'; +import { Getter, Setter, atom } from 'jotai'; import toast from 'react-hot-toast'; import { RpcProvider, TransactionExecutionStatus } from 'starknet'; import { StrategyInfo, strategiesAtom } from './strategies.atoms'; import { createAtomWithStorage } from './utils.atoms'; -import { atomWithQuery, AtomWithQueryResult } from 'jotai-tanstack-query'; +import { atomWithQuery } from 'jotai-tanstack-query'; import { gql } from '@apollo/client'; import apolloClient from '@/utils/apolloClient'; -import { BalanceResult } from './balance.atoms'; export interface StrategyTxProps { strategyId: string; @@ -81,19 +80,15 @@ async function getTxHistory( export const newTxsAtom = atom([]); -export const TxHistoryAtom = ( - contract: string, - owner: string, - balData: Atom>, -) => +export const TxHistoryAtom = (contract: string, owner: string) => atomWithQuery((get) => ({ // balData just to trigger a refetch - queryKey: ['tx_history', { contract, owner }, get(balData)], + queryKey: ['tx_history', contract, owner, JSON.stringify(get(newTxsAtom))], queryFn: async ({ queryKey }: any): Promise => { const [, { contract, owner }] = queryKey; const res = await getTxHistory(contract, owner); - console.log('TxHistoryAtom res', res); + console.log('TxHistoryAtom res', res, contract, owner, queryKey); // add new txs from local cache const newTxs = get(newTxsAtom); console.log('TxHistoryAtom newTxs', newTxs); diff --git a/src/store/vesu.store.ts b/src/store/vesu.store.ts index 3ed6dd79..81855c8a 100644 --- a/src/store/vesu.store.ts +++ b/src/store/vesu.store.ts @@ -57,7 +57,7 @@ function bitIntToNumber(info: { value: string; decimals: number }) { async function getVesuPoolInfo(pool: VesuPool, asset: VesuAsset) { try { const tokenInfo = getTokenInfoFromName(asset.symbol); - const price = await getPrice(tokenInfo); + const price = await getPrice(tokenInfo, 'ekubo'); const tvlInToken = bitIntToNumber(asset.stats.totalSupplied); console.log('Vesu pool', pool, asset, price, tvlInToken); const myPool: PoolInfo = { diff --git a/src/strategies/IStrategy.ts b/src/strategies/IStrategy.ts index ef45efcd..bee05523 100755 --- a/src/strategies/IStrategy.ts +++ b/src/strategies/IStrategy.ts @@ -155,7 +155,7 @@ export class IStrategyProps { readonly liveStatus: StrategyLiveStatus; readonly id: string; readonly name: string; - readonly description: string; + readonly description: string | ReactNode; readonly settings: IStrategySettings; readonly metadata: IStrategyMetadata; exchanges: IDapp[] = []; @@ -227,7 +227,7 @@ export class IStrategyProps { constructor( id: string, name: string, - description: string, + description: string | ReactNode, rewardTokens: { logo: string }[], holdingTokens: (TokenInfo | NFTInfo)[], liveStatus: StrategyLiveStatus, @@ -272,12 +272,14 @@ export class IStrategyProps { async computeSummaryValue( amounts: SingleActionAmount[], quoteToken: MyTokenInfo, + source: string, ): Promise { const valuesProm = amounts.map((amount) => { return this.getValueInQuoteToken( convertToV2Web3Number(amount.amount), convertToV2TokenInfo(amount.tokenInfo), quoteToken, + source, ); }); const values = await Promise.all(valuesProm); @@ -294,13 +296,20 @@ export class IStrategyProps { amount: MyWeb3Number, tokenInfo: MyTokenInfo, quoteToken: MyTokenInfo, + source: string, ): Promise { if (tokenInfo.address.eq(quoteToken.address)) { return amount; } - const price = await getPrice(tokenInfo); - const priceQuote = await getPrice(quoteToken); + const price = await getPrice( + tokenInfo, + `getValueInQuoteToken::1::${source}`, + ); + const priceQuote = await getPrice( + quoteToken, + `getValueInQuoteToken::2::${source}`, + ); const amt = amount.multipliedBy(price).dividedBy(priceQuote); @@ -324,7 +333,7 @@ export class IStrategy extends IStrategyProps { id: string, tag: string, name: string, - description: string, + description: string | ReactNode, rewardTokens: { logo: string }[], holdingTokens: (TokenInfo | NFTInfo)[], liveStatus = StrategyLiveStatus.ACTIVE, diff --git a/src/strategies/auto_strk.strat.ts b/src/strategies/auto_strk.strat.ts index 1003b077..575d091e 100755 --- a/src/strategies/auto_strk.strat.ts +++ b/src/strategies/auto_strk.strat.ts @@ -154,7 +154,7 @@ export class AutoTokenStrategy extends IStrategy { if (!balanceInfo.tokenInfo) { return ZeroAmountsInfo([this.token]); } - const price = await getPrice(this.token); + const price = await getPrice(this.token, 'autostrk'); console.log('getUserTVL autoc', price, balanceInfo.amount.toEtherStr()); const usdValue = Number(balanceInfo.amount.toEtherStr()) * price; return { @@ -177,7 +177,7 @@ export class AutoTokenStrategy extends IStrategy { const zTokenInfo = getTokenInfoFromName(this.lpTokenName); const bal = await getERC20Balance(zTokenInfo, this.strategyAddress); - const price = await getPrice(this.token); + const price = await getPrice(this.token, 'autostrk2'); const usdValue = Number(bal.amount.toEtherStr()) * price; return { usdValue, diff --git a/src/strategies/auto_xstrk.strat.ts b/src/strategies/auto_xstrk.strat.ts index e3950f3a..cbb7995c 100644 --- a/src/strategies/auto_xstrk.strat.ts +++ b/src/strategies/auto_xstrk.strat.ts @@ -175,7 +175,7 @@ export class AutoXSTRKStrategy extends IStrategy { if (!balanceInfo.tokenInfo) { return ZeroAmountsInfo([this.token]); } - const price = await getPrice(this.token); + const price = await getPrice(this.token, 'autoxstrk'); console.log('getUserTVL autoc', price, balanceInfo.amount.toEtherStr()); const usdValue = Number(balanceInfo.amount.toEtherStr()) * price; return { @@ -215,7 +215,7 @@ export class AutoXSTRKStrategy extends IStrategy { (await strategyContract.call('total_assets', [])).toString(), STRKINfo.decimals, ); - const price = await getPrice(this.token); + const price = await getPrice(this.token, 'autoxstrk2'); const usdValue = Number(totalAssets.toEtherStr()) * price; return { usdValue, @@ -248,7 +248,7 @@ export class AutoXSTRKStrategy extends IStrategy { ).toString(), STRKINfo.decimals, ); - const price = await getPrice(this.token); + const price = await getPrice(this.token, 'autoxstrk3'); const usdValue = Number(strkAmount.toEtherStr()) * price; return { usdValue, diff --git a/src/strategies/delta_neutral_mm.ts b/src/strategies/delta_neutral_mm.ts index b56ee1a4..ca143b5a 100755 --- a/src/strategies/delta_neutral_mm.ts +++ b/src/strategies/delta_neutral_mm.ts @@ -339,7 +339,7 @@ export class DeltaNeutralMM extends IStrategy { if (!balanceInfo.tokenInfo) { return ZeroAmountsInfo([this.token]); } - const price = await getPrice(balanceInfo.tokenInfo); + const price = await getPrice(balanceInfo.tokenInfo, 'dnmm1'); console.log('getUserTVL dnmm', price, balanceInfo.amount.toEtherStr()); const usdValue = Number(balanceInfo.amount.toEtherStr()) * price; return { @@ -370,7 +370,7 @@ export class DeltaNeutralMM extends IStrategy { const discountFactor = this.stepAmountFactors[4]; const amount = bal.amount.operate('div', 1 + discountFactor); console.log('getTVL1', amount.toString()); - const price = await getPrice(this.token); + const price = await getPrice(this.token, 'dnmm11'); const usdValue = Number(amount.toEtherStr()) * price; return { usdValue, diff --git a/src/strategies/delta_neutral_mm_2.ts b/src/strategies/delta_neutral_mm_2.ts index e48d2229..d6915afa 100644 --- a/src/strategies/delta_neutral_mm_2.ts +++ b/src/strategies/delta_neutral_mm_2.ts @@ -55,7 +55,7 @@ export class DeltaNeutralMM2 extends DeltaNeutralMM { const discountFactor = this.stepAmountFactors[4]; const amount = bal.amount.operate('div', 1 + discountFactor); console.log('getTVL1', amount.toString()); - const price = await getPrice(this.token); + const price = await getPrice(this.token, 'dnmm2'); const usdValue = Number(amount.toEtherStr()) * price; return { usdValue, diff --git a/src/strategies/ekubo_cl_vault.ts b/src/strategies/ekubo_cl_vault.ts index ef817bcc..3d5e3339 100644 --- a/src/strategies/ekubo_cl_vault.ts +++ b/src/strategies/ekubo_cl_vault.ts @@ -40,13 +40,14 @@ import { } from '@/utils'; import { atomWithQuery } from 'jotai-tanstack-query'; import { addressAtom } from '@/store/claims.atoms'; +import { ReactNode } from 'react'; export class EkuboClStrategy extends IStrategy { clVault: EkuboCLVault; isSingleTokenDepositView: boolean = false; constructor( name: string, - description: string, + description: string | ReactNode, strategy: IStrategyMetadata, liveStatus: StrategyLiveStatus, settings: IStrategySettings, @@ -102,15 +103,16 @@ export class EkuboClStrategy extends IStrategy { ...risks, ]; - this.balanceSummaryAtom = this.getSummaryBalanceAtom(); this.balanceAtoms = [ this.getEkuboStratBalanceAtom(token0Info), this.getEkuboStratBalanceAtom(token1Info), ]; + this.balanceSummaryAtom = this.getSummaryBalanceAtom(); this.balancesAtom = this.getBalancesAtom(); } getTVL = async (): Promise => { + console.log('getTVL [1]'); const res = await this.clVault.getTVL(); return { usdValue: res.usdValue, @@ -119,6 +121,7 @@ export class EkuboClStrategy extends IStrategy { }; getUserTVL = async (user: string): Promise => { + console.log('getUserTVL [1]', user); const res = await this.clVault.getUserTVL(ContractAddr.from(user)); return { usdValue: res.usdValue, @@ -219,22 +222,16 @@ export class EkuboClStrategy extends IStrategy { inputs: WithdrawActionInputs, ): Promise => { const { amount, address, provider, amount2 } = inputs; - const token0Info = getTokenInfoFromName( - this.metadata.depositTokens[0].symbol, - ); - const token1Info = getTokenInfoFromName( - this.metadata.depositTokens[1].symbol, - ); const output = { calls: [], amounts: [ { tokenInfo: this.metadata.depositTokens[0], - balanceAtom: this.getEkuboStratBalanceAtom(token0Info), + balanceAtom: this.balanceAtoms[0], }, { tokenInfo: this.metadata.depositTokens[1], - balanceAtom: this.getEkuboStratBalanceAtom(token1Info), + balanceAtom: this.balanceAtoms[1], }, ], onAmountsChange: this.onAmountsChange.bind(this), @@ -243,6 +240,7 @@ export class EkuboClStrategy extends IStrategy { return [output]; } + console.log('Withdraw calls [1]'); const amt = Web3Number.fromWei(amount.toString(), amount.decimals); const amt2 = Web3Number.fromWei(amount2.toString(), amount.decimals); const calls = await this.clVault.withdrawCall( @@ -281,6 +279,7 @@ export class EkuboClStrategy extends IStrategy { } getEkuboStratBalanceAtom = (underlyingToken: TokenInfo) => { + const holdingBalAtom = getBalanceAtom(this.holdingTokens[0], atom(true)); return atomWithQuery((get) => { return { queryKey: [ @@ -288,11 +287,12 @@ export class EkuboClStrategy extends IStrategy { this.holdingTokens[0].address, underlyingToken.token, get(addressAtom), + JSON.stringify(get(holdingBalAtom).data), ], queryFn: async ({ queryKey }: any): Promise => { try { - console.log('getEkuboStratBalanceAtom', queryKey); - const bal = get(getBalanceAtom(this.holdingTokens[0], atom(true))); + console.log('getEkuboStratBalanceAtom [-1]', queryKey); + const bal = get(holdingBalAtom); if (!bal.data) { return returnEmptyBal(); } @@ -317,25 +317,25 @@ export class EkuboClStrategy extends IStrategy { return returnEmptyBal(); } }, - refetchInterval: 5000, + refetchInterval: 10000, }; }); }; getSummaryBalanceAtom = () => { return atomWithQuery((get) => { - const bal1 = get(this.balanceAtoms[0]); - const bal2 = get(this.balanceAtoms[1]); return { queryKey: [ 'getEkuboStratBalanceAtom', - ...[bal1, bal2].map( + ...[get(this.balanceAtoms[0]), get(this.balanceAtoms[1])].map( (b) => `${b.data?.amount.toString()}-${b.data?.tokenInfo?.address}`, ), + get(addressAtom), ], queryFn: async ({ queryKey }: any): Promise => { const bal1 = get(this.balanceAtoms[0]); const bal2 = get(this.balanceAtoms[1]); + console.log('getSummaryBalanceAtom', bal1.data, bal2.data); if ( !bal1.data || !bal2.data || @@ -344,6 +344,7 @@ export class EkuboClStrategy extends IStrategy { ) { return returnEmptyBal(); } + console.log('getSummaryBalanceAtom [0]', bal1.data, bal2.data); const bal1Data = bal1.data; const bal2Data = bal2.data; const amounts: SingleActionAmount[] = [bal1Data, bal2Data].map( @@ -352,16 +353,19 @@ export class EkuboClStrategy extends IStrategy { tokenInfo: convertToV2TokenInfo(b.tokenInfo!), }), ); + console.log('getSummaryBalanceAtom [1]', amounts); const amountWeb3Number = await this.computeSummaryValue( amounts, this.settings.quoteToken, + 'ekubo::summary', ); + console.log('getSummaryBalanceAtom [2]', amountWeb3Number); return { amount: convertToMyNumber(amountWeb3Number), tokenInfo: convertToV1TokenInfo(this.settings.quoteToken), }; }, - refetchInterval: 5000, + refetchInterval: 10000, }; }); }; diff --git a/src/utils.ts b/src/utils.ts index 82ed1aa2..662fcd71 100755 --- a/src/utils.ts +++ b/src/utils.ts @@ -168,7 +168,8 @@ export function copyReferralLink(refCode: string) { }); } -export async function getPrice(tokenInfo: MyMultiTokenInfo) { +export async function getPrice(tokenInfo: MyMultiTokenInfo, source?: string) { + console.log(`getPrice::${source}`, tokenInfo.name); try { return await getPriceFromMyAPI(tokenInfo); } catch (e) { diff --git a/yarn.lock b/yarn.lock index 93758f0f..eb4b1cda 100644 --- a/yarn.lock +++ b/yarn.lock @@ -45,11 +45,6 @@ resolved "https://registry.yarnpkg.com/@avnu/avnu-sdk/-/avnu-sdk-3.0.0.tgz#e4cb63d26aa6c244040963fcef44e2d95c15cba9" integrity sha512-BqqazrXDKn5RE1anyl9Ba+Kd/4VaKNsdKTl0ryTfXhMIYp+R4dXMaLD40emfXd+25kxM00xPKiZOiGHl2ntG5g== -"@avnu/avnu-sdk@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@avnu/avnu-sdk/-/avnu-sdk-3.0.2.tgz#1751f951380160858bcb8a3fa30a5b4b086d3891" - integrity sha512-N8McoXYEcp1uhSZ4XlEi5BcTpvJDDhUw4kYnlYmPrd7fWezfGy4UHyoFT/A4gqEM4nL3vtENczDNFS1AVfdTnA== - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" @@ -954,54 +949,6 @@ resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-2.2.0.tgz#9b0ecef8f01263ab808ba3bda7b36a0d91b4d5c1" integrity sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ== -"@colors/colors@1.6.0", "@colors/colors@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" - integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== - -"@cypress/request-promise@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@cypress/request-promise/-/request-promise-5.0.0.tgz#86899e097dba5123c546f1cadb9bff70e2654ebe" - integrity sha512-eKdYVpa9cBEw2kTBlHeu1PP16Blwtum6QHg/u9s/MoHkZfuo1pRGka1VlUHXF5kdew82BvOJVVGk0x8X0nbp+w== - dependencies: - bluebird "^3.5.0" - request-promise-core "1.1.3" - stealthy-require "^1.1.1" - tough-cookie "^4.1.3" - -"@cypress/request@^3.0.1": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.8.tgz#992f1f42ba03ebb14fa5d97290abe9d015ed0815" - integrity sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~4.0.0" - http-signature "~1.4.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - performance-now "^2.1.0" - qs "6.14.0" - safe-buffer "^5.1.2" - tough-cookie "^5.0.0" - tunnel-agent "^0.6.0" - uuid "^8.3.2" - -"@dabh/diagnostics@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" - integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== - dependencies: - colorspace "1.1.x" - enabled "2.0.x" - kuler "^2.0.0" - "@dagrejs/dagre@^1.1.4": version "1.1.4" resolved "https://registry.yarnpkg.com/@dagrejs/dagre/-/dagre-1.1.4.tgz#66f9c0e2b558308f2c268f60e2c28f22ee17e339" @@ -1365,151 +1312,6 @@ resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz#106f911134035b4157ec92a0c154a6b6f88fa4c1" integrity sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw== -"@inquirer/checkbox@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-2.5.0.tgz#41c5c9dd332c0a8fa159be23982ce080d0b199d4" - integrity sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA== - dependencies: - "@inquirer/core" "^9.1.0" - "@inquirer/figures" "^1.0.5" - "@inquirer/type" "^1.5.3" - ansi-escapes "^4.3.2" - yoctocolors-cjs "^2.1.2" - -"@inquirer/confirm@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-3.2.0.tgz#6af1284670ea7c7d95e3f1253684cfbd7228ad6a" - integrity sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw== - dependencies: - "@inquirer/core" "^9.1.0" - "@inquirer/type" "^1.5.3" - -"@inquirer/core@^9.1.0": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.2.1.tgz#677c49dee399c9063f31e0c93f0f37bddc67add1" - integrity sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg== - dependencies: - "@inquirer/figures" "^1.0.6" - "@inquirer/type" "^2.0.0" - "@types/mute-stream" "^0.0.4" - "@types/node" "^22.5.5" - "@types/wrap-ansi" "^3.0.0" - ansi-escapes "^4.3.2" - cli-width "^4.1.0" - mute-stream "^1.0.0" - signal-exit "^4.1.0" - strip-ansi "^6.0.1" - wrap-ansi "^6.2.0" - yoctocolors-cjs "^2.1.2" - -"@inquirer/editor@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-2.2.0.tgz#a41eb7b151bd9a6bc3c0b69219d02d82547bc387" - integrity sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw== - dependencies: - "@inquirer/core" "^9.1.0" - "@inquirer/type" "^1.5.3" - external-editor "^3.1.0" - -"@inquirer/expand@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-2.3.0.tgz#afc44aee303315a85563e9d0275e658f0ee0e701" - integrity sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw== - dependencies: - "@inquirer/core" "^9.1.0" - "@inquirer/type" "^1.5.3" - yoctocolors-cjs "^2.1.2" - -"@inquirer/figures@^1.0.5", "@inquirer/figures@^1.0.6": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.11.tgz#4744e6db95288fea1dead779554859710a959a21" - integrity sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw== - -"@inquirer/input@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-2.3.0.tgz#9b99022f53780fecc842908f3f319b52a5a16865" - integrity sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw== - dependencies: - "@inquirer/core" "^9.1.0" - "@inquirer/type" "^1.5.3" - -"@inquirer/number@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-1.1.0.tgz#4dac004021ea67c89552a261564f103a494cac96" - integrity sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA== - dependencies: - "@inquirer/core" "^9.1.0" - "@inquirer/type" "^1.5.3" - -"@inquirer/password@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-2.2.0.tgz#0b6f26336c259c8a9e5f5a3f2e1a761564f764ba" - integrity sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg== - dependencies: - "@inquirer/core" "^9.1.0" - "@inquirer/type" "^1.5.3" - ansi-escapes "^4.3.2" - -"@inquirer/prompts@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-5.5.0.tgz#5805aa15a13180017829aa31d071fd37a43b735d" - integrity sha512-BHDeL0catgHdcHbSFFUddNzvx/imzJMft+tWDPwTm3hfu8/tApk1HrooNngB2Mb4qY+KaRWF+iZqoVUPeslEog== - dependencies: - "@inquirer/checkbox" "^2.5.0" - "@inquirer/confirm" "^3.2.0" - "@inquirer/editor" "^2.2.0" - "@inquirer/expand" "^2.3.0" - "@inquirer/input" "^2.3.0" - "@inquirer/number" "^1.1.0" - "@inquirer/password" "^2.2.0" - "@inquirer/rawlist" "^2.3.0" - "@inquirer/search" "^1.1.0" - "@inquirer/select" "^2.5.0" - -"@inquirer/rawlist@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-2.3.0.tgz#6b2c0da39c1cd855af5608b2d627681cdac7277d" - integrity sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ== - dependencies: - "@inquirer/core" "^9.1.0" - "@inquirer/type" "^1.5.3" - yoctocolors-cjs "^2.1.2" - -"@inquirer/search@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-1.1.0.tgz#665928cac2326b9501ddafbb8606ce4823b3106b" - integrity sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ== - dependencies: - "@inquirer/core" "^9.1.0" - "@inquirer/figures" "^1.0.5" - "@inquirer/type" "^1.5.3" - yoctocolors-cjs "^2.1.2" - -"@inquirer/select@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-2.5.0.tgz#345c6908ecfaeef3d84ddd2f9feb2f487c558efb" - integrity sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA== - dependencies: - "@inquirer/core" "^9.1.0" - "@inquirer/figures" "^1.0.5" - "@inquirer/type" "^1.5.3" - ansi-escapes "^4.3.2" - yoctocolors-cjs "^2.1.2" - -"@inquirer/type@^1.5.3": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.5.5.tgz#303ea04ce7ad2e585b921b662b3be36ef7b4f09b" - integrity sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA== - dependencies: - mute-stream "^1.0.0" - -"@inquirer/type@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-2.0.0.tgz#08fa513dca2cb6264fe1b0a2fabade051444e3f6" - integrity sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag== - dependencies: - mute-stream "^1.0.0" - "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -1695,13 +1497,6 @@ dependencies: "@noble/hashes" "1.3.2" -"@noble/curves@1.7.0", "@noble/curves@~1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.7.0.tgz#0512360622439256df892f21d25b388f52505e45" - integrity sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw== - dependencies: - "@noble/hashes" "1.6.0" - "@noble/curves@1.8.1", "@noble/curves@^1.6.0", "@noble/curves@~1.8.1": version "1.8.1" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" @@ -1738,21 +1533,11 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== -"@noble/hashes@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.0.tgz#d4bfb516ad6e7b5111c216a5cc7075f4cf19e6c5" - integrity sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ== - "@noble/hashes@1.7.1", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== -"@noble/hashes@~1.6.0": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.1.tgz#df6e5943edcea504bac61395926d6fd67869a0d5" - integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1922,53 +1707,6 @@ dependencies: "@prisma/debug" "5.18.0" -"@puppeteer/browsers@2.9.0": - version "2.9.0" - resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.9.0.tgz#744a2395b196530d9fffbc64df549689f06bc24e" - integrity sha512-8+xM+cFydYET4X/5/3yZMHs7sjS6c9I6H5I3xJdb6cinzxWUT/I2QVw4avxCQ8QDndwdHkG/FiSZIrCjAbaKvQ== - dependencies: - debug "^4.4.0" - extract-zip "^2.0.1" - progress "^2.0.3" - proxy-agent "^6.5.0" - semver "^7.7.1" - tar-fs "^3.0.8" - yargs "^17.7.2" - -"@redis/bloom@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.2.0.tgz#d3fd6d3c0af3ef92f26767b56414a370c7b63b71" - integrity sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg== - -"@redis/client@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.6.0.tgz#dcf4ae1319763db6fdddd6de7f0af68a352c30ea" - integrity sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg== - dependencies: - cluster-key-slot "1.1.2" - generic-pool "3.9.0" - yallist "4.0.0" - -"@redis/graph@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.1.tgz#8c10df2df7f7d02741866751764031a957a170ea" - integrity sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw== - -"@redis/json@1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.7.tgz#016257fcd933c4cbcb9c49cde8a0961375c6893b" - integrity sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ== - -"@redis/search@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.2.0.tgz#50976fd3f31168f585666f7922dde111c74567b8" - integrity sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw== - -"@redis/time-series@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.1.0.tgz#cba454c05ec201bd5547aaf55286d44682ac8eb5" - integrity sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g== - "@rtsao/scc@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" @@ -1979,11 +1717,6 @@ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz#427d5549943a9c6fce808e39ea64dbe60d4047f1" integrity sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA== -"@scure/base@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.1.tgz#dd0b2a533063ca612c17aa9ad26424a2ff5aa865" - integrity sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ== - "@scure/base@~1.1.3": version "1.1.9" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" @@ -2011,14 +1744,6 @@ "@noble/hashes" "~1.7.1" "@scure/base" "~1.2.4" -"@scure/starknet@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/starknet/-/starknet-1.1.0.tgz#d1902e053d98196e161b9b2c3996b20999094e7a" - integrity sha512-83g3M6Ix2qRsPN4wqLDqiRZ2GBNbjVWfboJE/9UjfG+MHr6oDSu/CWgy8hsBSJejr09DkkL+l0Ze4KVrlCIdtQ== - dependencies: - "@noble/curves" "~1.7.0" - "@noble/hashes" "~1.6.0" - "@scure/starknet@~1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@scure/starknet/-/starknet-1.0.0.tgz#4419bc2fdf70f3dd6cb461d36c878c9ef4419f8c" @@ -2205,28 +1930,6 @@ viem "^2.19.1" zod "^3.22.4" -"@strkfarm/sdk@^1.0.31": - version "1.0.31" - resolved "https://registry.yarnpkg.com/@strkfarm/sdk/-/sdk-1.0.31.tgz#e9a42f7e5747f438273a5e7859ded9a4872e8ec7" - integrity sha512-/RE85z/G48jNr0fYXAVnyKzPNM56bFJklgidX11DdsKa88MgrfXpyIKawoyQN6qbXLd5AbrNiNtm56SdC0tjKQ== - dependencies: - "@avnu/avnu-sdk" "^3.0.2" - axios "^1.7.2" - bignumber.js "4.0.4" - browser-assert "^1.2.1" - chalk "^4.1.2" - commander "^12.1.0" - ethers "^6.13.5" - form-data "^4.0.2" - inquirer "^10.1.2" - node-telegram-bot-api "^0.66.0" - proxy-from-env "^1.1.0" - puppeteer "^24.4.0" - redis "^4.7.0" - stacktrace-js "^2.0.2" - starknet "^6.11.0" - winston "^3.13.0" - "@swc/helpers@0.5.2": version "0.5.2" resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d" @@ -2251,11 +1954,6 @@ dependencies: "@tanstack/query-core" "5.59.0" -"@tootallnate/quickjs-emscripten@^0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" - integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== - "@trpc/client@^10.38.1": version "10.45.2" resolved "https://registry.yarnpkg.com/@trpc/client/-/client-10.45.2.tgz#15f9ba81303bf3417083fc6bb742e4e86b49da90" @@ -2344,20 +2042,6 @@ resolved "https://registry.yarnpkg.com/@types/mustache/-/mustache-4.2.5.tgz#9129f0d6857f976e00e171bbb3460e4b702f84ef" integrity sha512-PLwiVvTBg59tGFL/8VpcGvqOu3L4OuveNvPi0EYbWchRdEVP++yRUXJPFl+CApKEq13017/4Nf7aQ5lTtHUNsA== -"@types/mute-stream@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" - integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== - dependencies: - "@types/node" "*" - -"@types/node@*", "@types/node@^22.5.5": - version "22.14.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.0.tgz#d3bfa3936fef0dbacd79ea3eb17d521c628bb47e" - integrity sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA== - dependencies: - undici-types "~6.21.0" - "@types/node@18.15.13": version "18.15.13" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" @@ -2370,13 +2054,6 @@ dependencies: undici-types "~6.19.2" -"@types/node@22.7.5": - version "22.7.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" - integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== - dependencies: - undici-types "~6.19.2" - "@types/normalize-package-data@^2.4.1": version "2.4.4" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" @@ -2419,23 +2096,6 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== -"@types/triple-beam@^1.3.2": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" - integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== - -"@types/wrap-ansi@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" - integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== - -"@types/yauzl@^2.9.1": - version "2.10.3" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" - integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== - dependencies: - "@types/node" "*" - "@typescript-eslint/eslint-plugin@7.7.0": version "7.7.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz#bf34a02f221811505b8bf2f31060c8560c1bb0a3" @@ -2870,7 +2530,7 @@ JSONStream@^1.3.5: jsonparse "^1.2.0" through ">=2.2.7 <3" -abi-wan-kanabi@^2.2.2, abi-wan-kanabi@^2.2.3: +abi-wan-kanabi@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/abi-wan-kanabi/-/abi-wan-kanabi-2.2.4.tgz#47ebbafbb7f8df81773efbdcca60cdda8008c821" integrity sha512-0aA81FScmJCPX+8UvkXLki3X1+yPQuWxEkqXBVKltgPAK79J+NB+Lp5DouMXa7L6f+zcRlIA/6XO7BN/q9fnvg== @@ -2917,11 +2577,6 @@ agent-base@6: dependencies: debug "4" -agent-base@^7.1.0, agent-base@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" - integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== - ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -2932,13 +2587,6 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -3018,14 +2666,6 @@ array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: call-bind "^1.0.5" is-array-buffer "^3.0.4" -array-buffer-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" - integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== - dependencies: - call-bound "^1.0.3" - is-array-buffer "^3.0.5" - array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" @@ -3048,18 +2688,6 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findindex@^2.0.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.findindex/-/array.prototype.findindex-2.2.4.tgz#63aff05df18effa990c367bfad06b71f7bd113f9" - integrity sha512-LLm4mhxa9v8j0A/RPnpQAP4svXToJFh+Hp1pNYl5ZD5qpB4zdx/D4YjpVcETkhFbUKWO3iGMVLvrOnnmkAJT6A== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-abstract "^1.23.6" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - array.prototype.findlast@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" @@ -3129,43 +2757,11 @@ arraybuffer.prototype.slice@^1.0.3: is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" -arraybuffer.prototype.slice@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" - integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - is-array-buffer "^3.0.4" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - ast-types-flow@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== -ast-types@^0.13.4: - version "0.13.4" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" - integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== - dependencies: - tslib "^2.0.1" - async-mutex@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.5.0.tgz#353c69a0b9e75250971a64ac203b0ebfddd75482" @@ -3173,11 +2769,6 @@ async-mutex@^0.5.0: dependencies: tslib "^2.4.0" -async@^3.2.3: - version "3.2.6" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" - integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -3207,16 +2798,6 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.13.2" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" - integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== - axe-core@^4.10.0: version "4.10.0" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.0.tgz#d9e56ab0147278272739a000880196cdfe113b59" @@ -3231,25 +2812,11 @@ axios@1.6.7: form-data "^4.0.0" proxy-from-env "^1.1.0" -axios@^1.7.2: - version "1.8.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" - integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - axobject-query@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== -b4a@^1.6.4: - version "1.6.7" - resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4" - integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== - babel-plugin-macros@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" @@ -3264,51 +2831,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -bare-events@^2.2.0, bare-events@^2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.4.tgz#16143d435e1ed9eafd1ab85f12b89b3357a41745" - integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== - -bare-fs@^4.0.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.1.2.tgz#5b048298019f489979d5a6afb480f5204ad4e89b" - integrity sha512-8wSeOia5B7LwD4+h465y73KOdj5QHsbbuoUfPBi+pXgFJIPuG7SsiOdJuijWMyfid49eD+WivpfY7KT8gbAzBA== - dependencies: - bare-events "^2.5.4" - bare-path "^3.0.0" - bare-stream "^2.6.4" - -bare-os@^3.0.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-3.6.1.tgz#9921f6f59edbe81afa9f56910658422c0f4858d4" - integrity sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g== - -bare-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-3.0.0.tgz#b59d18130ba52a6af9276db3e96a2e3d3ea52178" - integrity sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw== - dependencies: - bare-os "^3.0.1" - -bare-stream@^2.6.4: - version "2.6.5" - resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.6.5.tgz#bba8e879674c4c27f7e27805df005c15d7a2ca07" - integrity sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA== - dependencies: - streamx "^2.21.0" - -basic-ftp@^5.0.2: - version "5.0.5" - resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" - integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - bignumber.js@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-4.0.4.tgz#7c40f5abcd2d6623ab7b99682ee7db81b11889a4" @@ -3319,19 +2841,6 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -bl@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" - integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - -bluebird@^3.5.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" @@ -3369,11 +2878,6 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browser-assert@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/browser-assert/-/browser-assert-1.2.1.tgz#9aaa5a2a8c74685c2ae05bfe46efd606f068c200" - integrity sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ== - browserslist@^4.14.5: version "4.24.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4" @@ -3384,11 +2888,6 @@ browserslist@^4.14.5: node-releases "^2.0.18" update-browserslist-db "^1.1.0" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - busboy@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" @@ -3396,7 +2895,7 @@ busboy@1.6.0: dependencies: streamsearch "^1.1.0" -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== @@ -3415,17 +2914,7 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" -call-bind@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" - integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== - dependencies: - call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" - get-intrinsic "^1.2.4" - set-function-length "^1.2.2" - -call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: +call-bound@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== @@ -3456,11 +2945,6 @@ cardinal@^2.1.1: ansicolors "~0.3.2" redeyed "~2.1.0" -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -3470,7 +2954,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.2: +chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3478,11 +2962,6 @@ chalk@^4.0.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - chokidar@^3.5.3, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" @@ -3503,14 +2982,6 @@ chroma.ts@1.0.10: resolved "https://registry.yarnpkg.com/chroma.ts/-/chroma.ts-1.0.10.tgz#2b965d8f2c2eee44d25072902e5787fe259d4565" integrity sha512-0FOQiB6LaiOwoyaxP+a4d3sCIOSf7YvBKj3TfeQM4ZBb2yskRxe4FlT2P4YNpHz7kIB5rXsfmpyniyrYRRyVHw== -chromium-bidi@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-3.0.0.tgz#bfb0549db96552d42377401aadc0198a1bbb3e9f" - integrity sha512-ZOGRDAhBMX1uxL2Cm2TDuhImbrsEz5A/tTcVU6RpXEWaTNUNwsHW6njUXizh51Ir6iqHbKAfhA2XK33uBcLo5A== - dependencies: - mitt "^3.0.1" - zod "^3.24.1" - citty@^0.1.5, citty@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4" @@ -3528,11 +2999,6 @@ classnames@^2.2.5, classnames@^2.3.2: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== -cli-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" - integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== - client-only@0.0.1, client-only@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" @@ -3556,11 +3022,6 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -cluster-key-slot@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - coinmarketcap-api@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/coinmarketcap-api/-/coinmarketcap-api-3.1.1.tgz#ee5660a7e18abd03cd84d80c79a6d7ab48817e6d" @@ -3569,7 +3030,7 @@ coinmarketcap-api@^3.1.1: node-fetch "^2.6.0" qs "^6.7.0" -color-convert@^1.9.0, color-convert@^1.9.3: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -3593,7 +3054,7 @@ color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.6.0, color-string@^1.9.0: +color-string@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== @@ -3606,14 +3067,6 @@ color2k@^2.0.2: resolved "https://registry.yarnpkg.com/color2k/-/color2k-2.0.3.tgz#a771244f6b6285541c82aa65ff0a0c624046e533" integrity sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog== -color@^3.1.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - color@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" @@ -3627,26 +3080,13 @@ colorette@^1.2.1: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== -colorspace@1.1.x: - version "1.1.4" - resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" - integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== - dependencies: - color "^3.1.3" - text-hex "1.0.x" - -combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -commander@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" - integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== - commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -3813,16 +3253,6 @@ copy-to-clipboard@3.3.3: dependencies: toggle-selection "^1.0.6" -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - cosmiconfig@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" @@ -3834,16 +3264,6 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" - integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== - dependencies: - env-paths "^2.2.1" - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -3952,18 +3372,6 @@ dargs@^8.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-8.1.0.tgz#a34859ea509cbce45485e5aa356fef70bfcc7272" integrity sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw== -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -data-uri-to-buffer@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" - integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== - data-view-buffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" @@ -3973,15 +3381,6 @@ data-view-buffer@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" -data-view-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" - integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - data-view-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" @@ -3991,15 +3390,6 @@ data-view-byte-length@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" -data-view-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" - integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - data-view-byte-offset@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" @@ -4009,15 +3399,6 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" -data-view-byte-offset@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" - integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-data-view "^1.0.1" - debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: version "4.3.7" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" @@ -4039,13 +3420,6 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.1, debug@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== - dependencies: - ms "^2.1.3" - decode-uri-component@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" @@ -4103,15 +3477,6 @@ defu@^6.1.4: resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== -degenerator@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" - integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== - dependencies: - ast-types "^0.13.4" - escodegen "^2.1.0" - esprima "^4.0.1" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -4142,11 +3507,6 @@ detect-node-es@^1.1.0: resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== -devtools-protocol@0.0.1425554: - version "0.0.1425554" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1425554.tgz#51ed2fed1405f56783d24a393f7c75b6bbb58029" - integrity sha512-uRfxR6Nlzdzt0ihVIkV+sLztKgs7rgquY/Mhcv1YNCWDh5IZgl5mnn2aeEnW5stYTE0wwiF4RYVz8eMEpV1SEw== - didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -4193,7 +3553,7 @@ dot-prop@^5.1.0: dependencies: is-obj "^2.0.0" -dunder-proto@^1.0.0, dunder-proto@^1.0.1: +dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== @@ -4217,14 +3577,6 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - electron-to-chromium@^1.5.28: version "1.5.30" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.30.tgz#5b264b489cfe0c3dd71097c164d795444834e7c7" @@ -4276,12 +3628,7 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -enabled@2.0.x: - version "2.0.0" - resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" - integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -4296,11 +3643,6 @@ enhanced-resolve@^5.15.0: graceful-fs "^4.2.4" tapable "^2.2.0" -env-paths@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - error-ex@^1.3.1, error-ex@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -4308,13 +3650,6 @@ error-ex@^1.3.1, error-ex@^1.3.2: dependencies: is-arrayish "^0.2.1" -error-stack-parser@^2.0.6: - version "2.1.4" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" - integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== - dependencies: - stackframe "^1.3.4" - es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" @@ -4367,63 +3702,6 @@ es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23 unbox-primitive "^1.0.2" which-typed-array "^1.1.15" -es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9: - version "1.23.9" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" - integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== - dependencies: - array-buffer-byte-length "^1.0.2" - arraybuffer.prototype.slice "^1.0.4" - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.3" - data-view-buffer "^1.0.2" - data-view-byte-length "^1.0.2" - data-view-byte-offset "^1.0.1" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.1.0" - es-to-primitive "^1.3.0" - function.prototype.name "^1.1.8" - get-intrinsic "^1.2.7" - get-proto "^1.0.0" - get-symbol-description "^1.1.0" - globalthis "^1.0.4" - gopd "^1.2.0" - has-property-descriptors "^1.0.2" - has-proto "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - internal-slot "^1.1.0" - is-array-buffer "^3.0.5" - is-callable "^1.2.7" - is-data-view "^1.0.2" - is-regex "^1.2.1" - is-shared-array-buffer "^1.0.4" - is-string "^1.1.1" - is-typed-array "^1.1.15" - is-weakref "^1.1.0" - math-intrinsics "^1.1.0" - object-inspect "^1.13.3" - object-keys "^1.1.1" - object.assign "^4.1.7" - own-keys "^1.0.1" - regexp.prototype.flags "^1.5.3" - safe-array-concat "^1.1.3" - safe-push-apply "^1.0.0" - safe-regex-test "^1.1.0" - set-proto "^1.0.0" - string.prototype.trim "^1.2.10" - string.prototype.trimend "^1.0.9" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.3" - typed-array-byte-length "^1.0.3" - typed-array-byte-offset "^1.0.4" - typed-array-length "^1.0.7" - unbox-primitive "^1.1.0" - which-typed-array "^1.1.18" - es-define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" @@ -4499,16 +3777,6 @@ es-set-tostringtag@^2.0.3: has-tostringtag "^1.0.2" hasown "^2.0.1" -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" @@ -4525,15 +3793,6 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es-to-primitive@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" - integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== - dependencies: - is-callable "^1.2.7" - is-date-object "^1.0.5" - is-symbol "^1.0.4" - escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" @@ -4549,17 +3808,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - eslint-config-next@14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.0.tgz#7e309d426b8afacaba3b32fdbb02ba220b6d0a97" @@ -4758,7 +4006,7 @@ espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@^4.0.1, esprima@~4.0.0: +esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -4800,29 +4048,11 @@ ethers@6.11.1: tslib "2.4.0" ws "8.5.0" -ethers@^6.13.5: - version "6.13.5" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.5.tgz#8c1d6ac988ac08abc3c1d8fabbd4b8b602851ac4" - integrity sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ== - dependencies: - "@adraffy/ens-normalize" "1.10.1" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@types/node" "22.7.5" - aes-js "4.0.0-beta.5" - tslib "2.7.0" - ws "8.17.1" - eventemitter3@5.0.1, eventemitter3@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -eventemitter3@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - events@3.3.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -4843,51 +4073,11 @@ execa@^8.0.1: signal-exit "^4.1.0" strip-final-newline "^3.0.0" -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extract-zip@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-fifo@^1.2.0, fast-fifo@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" - integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== - fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" @@ -4921,18 +4111,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -fecha@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" - integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== - fetch-cookie@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-3.1.0.tgz#3989b929e48cc410b151a3e476b762ca19ffcb2d" @@ -4941,14 +4119,6 @@ fetch-cookie@^3.0.0: set-cookie-parser "^2.4.8" tough-cookie "^5.0.0" -fetch-cookie@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-3.0.1.tgz#6a77f7495e1a639ae019db916a234db8c85d5963" - integrity sha512-ZGXe8Y5Z/1FWqQ9q/CrJhkUD73DyBU9VF0hBQmEO/wPHe4A9PKTjplFDLeFX8aOsYypZUcX5Ji/eByn3VCVO3Q== - dependencies: - set-cookie-parser "^2.4.8" - tough-cookie "^4.0.0" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -4956,11 +4126,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-type@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" - integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== - fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -5008,11 +4173,6 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== -fn.name@1.x.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" - integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== - focus-lock@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-1.3.5.tgz#aa644576e5ec47d227b57eb14e1efb2abf33914c" @@ -5020,7 +4180,7 @@ focus-lock@^1.3.5: dependencies: tslib "^2.0.3" -follow-redirects@^1.15.4, follow-redirects@^1.15.6: +follow-redirects@^1.15.4: version "1.15.9" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== @@ -5032,13 +4192,6 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -for-each@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" - integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== - dependencies: - is-callable "^1.2.7" - foreground-child@^3.1.0: version "3.3.0" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" @@ -5047,11 +4200,6 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -5061,16 +4209,6 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@^4.0.2, form-data@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" - integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - mime-types "^2.1.12" - framer-motion@11.0.5: version "11.0.5" resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-11.0.5.tgz#2ae1341d8605a01c50009d3bb195a67e4e2bfc69" @@ -5142,28 +4280,11 @@ function.prototype.name@^1.1.6: es-abstract "^1.22.1" functions-have-names "^1.2.3" -function.prototype.name@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" - integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - functions-have-names "^1.2.3" - hasown "^2.0.2" - is-callable "^1.2.7" - functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -generic-pool@3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" - integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== - get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -5180,7 +4301,7 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" -get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -5206,7 +4327,7 @@ get-port-please@^3.1.2: resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49" integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== -get-proto@^1.0.0, get-proto@^1.0.1: +get-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== @@ -5236,13 +4357,6 @@ get-starknet@3.3.3: bowser "^2.11.0" get-starknet-core "^3.3.3" -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - get-stream@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" @@ -5257,15 +4371,6 @@ get-symbol-description@^1.0.2: es-errors "^1.3.0" get-intrinsic "^1.2.4" -get-symbol-description@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" - integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - get-tsconfig@^4.7.5: version "4.8.1" resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" @@ -5273,22 +4378,6 @@ get-tsconfig@^4.7.5: dependencies: resolve-pkg-maps "^1.0.0" -get-uri@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.4.tgz#6daaee9e12f9759e19e55ba313956883ef50e0a7" - integrity sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ== - dependencies: - basic-ftp "^5.0.2" - data-uri-to-buffer "^6.0.2" - debug "^4.3.4" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - git-raw-commits@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-4.0.0.tgz#b212fd2bff9726d27c1283a1157e829490593285" @@ -5367,7 +4456,7 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.3, globalthis@^1.0.4: +globalthis@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -5481,13 +4570,6 @@ has-proto@^1.0.1, has-proto@^1.0.3: resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== -has-proto@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" - integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== - dependencies: - dunder-proto "^1.0.0" - has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -5548,28 +4630,11 @@ hosted-git-info@^7.0.0: dependencies: lru-cache "^10.0.1" -http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1: - version "7.0.2" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" - integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - http-shutdown@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/http-shutdown/-/http-shutdown-1.2.2.tgz#41bc78fc767637c4c95179bc492f312c0ae64c5f" integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== -http-signature@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.4.0.tgz#dee5a9ba2bf49416abc544abd6d967f6a94c8c3f" - integrity sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.18.0" - https-proxy-agent@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -5578,14 +4643,6 @@ https-proxy-agent@5.0.0: agent-base "6" debug "4" -https-proxy-agent@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" - integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== - dependencies: - agent-base "^7.1.2" - debug "4" - human-signals@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" @@ -5596,13 +4653,6 @@ husky@9.1.1: resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.1.tgz#73f8f1b58329f377654293148c1a6458f54ca224" integrity sha512-fCqlqLXcBnXa/TJXmT93/A36tJsjdJkibQ1MuIiFyCCYUlpYpIaj2mv1w+3KR6Rzu1IC3slFTje5f6DUp2A2rg== -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - idb-keyval@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" @@ -5621,14 +4671,6 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-fresh@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" - integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -5642,25 +4684,11 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inquirer@^10.1.2: - version "10.2.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-10.2.2.tgz#36b866443a9fb2747151766c01ef9c8ba2d585eb" - integrity sha512-tyao/4Vo36XnUItZ7DnUXX4f1jVao2mSrleV/5IPtW/XAEA26hRVsbc68nuTEKWcr5vMP/1mVoT2O7u8H4v1Vg== - dependencies: - "@inquirer/core" "^9.1.0" - "@inquirer/prompts" "^5.5.0" - "@inquirer/type" "^1.5.3" - "@types/mute-stream" "^0.0.4" - ansi-escapes "^4.3.2" - mute-stream "^1.0.0" - run-async "^3.0.0" - rxjs "^7.8.1" - internal-slot@^1.0.4, internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" @@ -5670,15 +4698,6 @@ internal-slot@^1.0.4, internal-slot@^1.0.7: hasown "^2.0.0" side-channel "^1.0.4" -internal-slot@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" - integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.2" - side-channel "^1.1.0" - invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -5686,14 +4705,6 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - iron-webcrypto@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz#aa60ff2aa10550630f4c0b11fd2442becdb35a6f" @@ -5715,15 +4726,6 @@ is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: call-bind "^1.0.2" get-intrinsic "^1.2.1" -is-array-buffer@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" - integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -5748,13 +4750,6 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" -is-bigint@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" - integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== - dependencies: - has-bigints "^1.0.2" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -5770,14 +4765,6 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-boolean-object@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" - integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - is-bun-module@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.2.1.tgz#495e706f42e29f086fd5fe1ac3c51f106062b9fc" @@ -5804,15 +4791,6 @@ is-data-view@^1.0.1: dependencies: is-typed-array "^1.1.13" -is-data-view@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" - integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== - dependencies: - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - is-typed-array "^1.1.13" - is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -5820,14 +4798,6 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" -is-date-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" - integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - is-docker@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" @@ -5845,13 +4815,6 @@ is-finalizationregistry@^1.0.2: dependencies: call-bind "^1.0.2" -is-finalizationregistry@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" - integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== - dependencies: - call-bound "^1.0.3" - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -5895,14 +4858,6 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" -is-number-object@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" - integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -5931,16 +4886,6 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-regex@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" - integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== - dependencies: - call-bound "^1.0.2" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - is-set@^2.0.2, is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" @@ -5953,18 +4898,6 @@ is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: dependencies: call-bind "^1.0.7" -is-shared-array-buffer@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" - integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== - dependencies: - call-bound "^1.0.3" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - is-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" @@ -5977,14 +4910,6 @@ is-string@^1.0.5, is-string@^1.0.7: dependencies: has-tostringtag "^1.0.0" -is-string@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" - integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" @@ -5992,15 +4917,6 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-symbol@^1.0.4, is-symbol@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" - integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== - dependencies: - call-bound "^1.0.2" - has-symbols "^1.1.0" - safe-regex-test "^1.1.0" - is-text-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" @@ -6015,18 +4931,6 @@ is-typed-array@^1.1.13: dependencies: which-typed-array "^1.1.14" -is-typed-array@^1.1.14, is-typed-array@^1.1.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" - integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== - dependencies: - which-typed-array "^1.1.16" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-weakmap@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" @@ -6039,13 +4943,6 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-weakref@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" - integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== - dependencies: - call-bound "^1.0.3" - is-weakset@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" @@ -6073,17 +4970,12 @@ isarray@^2.0.5: resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isomorphic-fetch@^3.0.0, isomorphic-fetch@~3.0.0: +isomorphic-fetch@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== @@ -6096,11 +4988,6 @@ isows@1.0.6: resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" integrity sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw== -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - iterator.prototype@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" @@ -6162,16 +5049,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -6197,17 +5074,12 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== @@ -6240,16 +5112,6 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" @@ -6272,11 +5134,6 @@ keyvaluestorage-interface@^1.0.0: resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== -kuler@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" - integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== - language-subtag-registry@^0.3.20: version "0.3.23" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" @@ -6380,23 +5237,6 @@ lodash.union@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== -lodash@^4.17.15: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -logform@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/logform/-/logform-2.7.0.tgz#cfca97528ef290f2e125a08396805002b2d060d1" - integrity sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ== - dependencies: - "@colors/colors" "1.6.0" - "@types/triple-beam" "^1.3.2" - fecha "^4.2.0" - ms "^2.1.1" - safe-stable-stringify "^2.3.1" - triple-beam "^1.3.0" - loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -6414,11 +5254,6 @@ lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.4.3: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== -lru-cache@^7.14.1: - version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - math-intrinsics@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" @@ -6457,18 +5292,13 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@~2.1.19: +mime-types@^2.1.12: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" -mime@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - mime@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" @@ -6520,11 +5350,6 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== -mitt@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" - integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== - mixpanel-browser@2.49.0: version "2.49.0" resolved "https://registry.yarnpkg.com/mixpanel-browser/-/mixpanel-browser-2.49.0.tgz#de3f4f2d0f3a32b4babf6d827ef983a9fd48a711" @@ -6572,11 +5397,6 @@ mustache@4.2.0: resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== -mute-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -6606,11 +5426,6 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -netmask@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" - integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== - next@14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/next/-/next-14.1.0.tgz#b31c0261ff9caa6b4a17c5af019ed77387174b69" @@ -6661,21 +5476,6 @@ node-releases@^2.0.18: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== -node-telegram-bot-api@^0.66.0: - version "0.66.0" - resolved "https://registry.yarnpkg.com/node-telegram-bot-api/-/node-telegram-bot-api-0.66.0.tgz#9ad27e357b30fd3a89a37365ed95a82a70ac9f94" - integrity sha512-s4Hrg5q+VPl4/tJVG++pImxF6eb8tNJNj4KnDqAOKL6zGU34lo9RXmyAN158njwGN+v8hdNf8s9fWIYW9hPb5A== - dependencies: - "@cypress/request" "^3.0.1" - "@cypress/request-promise" "^5.0.0" - array.prototype.findindex "^2.0.2" - bl "^1.2.3" - debug "^3.2.7" - eventemitter3 "^3.0.0" - file-type "^3.9.0" - mime "^1.6.0" - pump "^2.0.0" - normalize-package-data@^6.0.0: version "6.0.2" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" @@ -6750,18 +5550,6 @@ object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -object.assign@^4.1.7: - version "4.1.7" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" - integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - has-symbols "^1.1.0" - object-keys "^1.1.1" - object.entries@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" @@ -6818,20 +5606,13 @@ on-exit-leak-free@^0.2.0: resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" -one-time@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" - integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== - dependencies: - fn.name "1.x.x" - onetime@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" @@ -6861,20 +5642,6 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -own-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" - integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== - dependencies: - get-intrinsic "^1.2.6" - object-keys "^1.1.1" - safe-push-apply "^1.0.0" - ox@0.6.9: version "0.6.9" resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.9.tgz#da1ee04fa10de30c8d04c15bfb80fe58b1f554bd" @@ -6916,28 +5683,6 @@ p-locate@^6.0.0: dependencies: p-limit "^4.0.0" -pac-proxy-agent@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz#9cfaf33ff25da36f6147a20844230ec92c06e5df" - integrity sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA== - dependencies: - "@tootallnate/quickjs-emscripten" "^0.23.0" - agent-base "^7.1.2" - debug "^4.3.4" - get-uri "^6.0.1" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.6" - pac-resolver "^7.0.1" - socks-proxy-agent "^8.0.5" - -pac-resolver@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6" - integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== - dependencies: - degenerator "^5.0.0" - netmask "^2.0.2" - package-json-from-dist@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" @@ -6955,7 +5700,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.0.0, parse-json@^5.2.0: +parse-json@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -7024,16 +5769,6 @@ pathe@^1.1.1, pathe@^1.1.2: resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - picocolors@^1.0.0, picocolors@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" @@ -7187,21 +5922,11 @@ prisma@5.18.0: dependencies: "@prisma/engines" "5.18.0" -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - process-warning@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== -progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" @@ -7211,78 +5936,17 @@ prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, object-assign "^4.1.1" react-is "^16.13.1" -proxy-agent@^6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.5.0.tgz#9e49acba8e4ee234aacb539f89ed9c23d02f232d" - integrity sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A== - dependencies: - agent-base "^7.1.2" - debug "^4.3.4" - http-proxy-agent "^7.0.1" - https-proxy-agent "^7.0.6" - lru-cache "^7.14.1" - pac-proxy-agent "^7.1.0" - proxy-from-env "^1.1.0" - socks-proxy-agent "^8.0.5" - proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -psl@^1.1.33: - version "1.15.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" - integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== - dependencies: - punycode "^2.3.1" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" - integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: +punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -puppeteer-core@24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-24.6.0.tgz#cea180600cd539d69517a63d8321c882f287ad06" - integrity sha512-Cukxysy12m0v350bhl/Gzof0XQYmtON9l2VvGp3D4BOQZVgyf+y5wIpcjDZQ/896Okoi95dKRGRV8E6a7SYAQQ== - dependencies: - "@puppeteer/browsers" "2.9.0" - chromium-bidi "3.0.0" - debug "^4.4.0" - devtools-protocol "0.0.1425554" - typed-query-selector "^2.12.0" - ws "^8.18.1" - -puppeteer@^24.4.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-24.6.0.tgz#39f3d58c89f1e2c97eafd4284e56488e2dd844cf" - integrity sha512-wYTB8WkzAr7acrlsp+0at1PZjOJPOxe6dDWKOG/kaX4Zjck9RXCFx3CtsxsAGzPn/Yv6AzgJC/CW1P5l+qxsqw== - dependencies: - "@puppeteer/browsers" "2.9.0" - chromium-bidi "3.0.0" - cosmiconfig "^9.0.0" - devtools-protocol "0.0.1425554" - puppeteer-core "24.6.0" - typed-query-selector "^2.12.0" - -qs@6.14.0, qs@^6.7.0: +qs@^6.7.0: version "6.14.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== @@ -7299,11 +5963,6 @@ query-string@7.1.3: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -7505,20 +6164,7 @@ read-pkg@^8.0.0, read-pkg@^8.1.0: parse-json "^7.0.0" type-fest "^4.2.0" -readable-stream@^2.3.5: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.2: +readable-stream@^3.1.1: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -7546,18 +6192,6 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" -redis@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/redis/-/redis-4.7.0.tgz#b401787514d25dd0cfc22406d767937ba3be55d6" - integrity sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ== - dependencies: - "@redis/bloom" "1.2.0" - "@redis/client" "1.6.0" - "@redis/graph" "1.1.1" - "@redis/json" "1.0.7" - "@redis/search" "1.2.0" - "@redis/time-series" "1.1.0" - reflect.getprototypeof@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" @@ -7571,20 +6205,6 @@ reflect.getprototypeof@^1.0.4: globalthis "^1.0.3" which-builtin-type "^1.1.3" -reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" - integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.9" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.7" - get-proto "^1.0.1" - which-builtin-type "^1.2.1" - regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" @@ -7600,40 +6220,16 @@ regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" -regexp.prototype.flags@^1.5.3: - version "1.5.4" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" - integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-errors "^1.3.0" - get-proto "^1.0.1" - gopd "^1.2.0" - set-function-name "^2.0.2" - rehackt@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.1.0.tgz#a7c5e289c87345f70da8728a7eb878e5d03c696b" integrity sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw== -request-promise-core@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" - integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== - dependencies: - lodash "^4.17.15" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -7679,11 +6275,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -run-async@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" - integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -7691,13 +6282,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.8.1: - version "7.8.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" - integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== - dependencies: - tslib "^2.1.0" - safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" @@ -7708,35 +6292,11 @@ safe-array-concat@^1.1.2: has-symbols "^1.0.3" isarray "^2.0.5" -safe-array-concat@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" - integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - has-symbols "^1.1.0" - isarray "^2.0.5" - -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-push-apply@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" - integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== - dependencies: - es-errors "^1.3.0" - isarray "^2.0.5" - safe-regex-test@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" @@ -7746,25 +6306,11 @@ safe-regex-test@^1.0.3: es-errors "^1.3.0" is-regex "^1.1.4" -safe-regex-test@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" - integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-regex "^1.2.1" - -safe-stable-stringify@^2.1.0, safe-stable-stringify@^2.3.1: +safe-stable-stringify@^2.1.0: version "2.5.0" resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - scheduler@^0.23.2: version "0.23.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" @@ -7782,11 +6328,6 @@ semver@^7.3.5, semver@^7.5.2, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== -semver@^7.7.1: - version "7.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" - integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== - server-only@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/server-only/-/server-only-0.0.1.tgz#0f366bb6afb618c37c9255a314535dc412cd1c9e" @@ -7797,7 +6338,7 @@ set-cookie-parser@^2.4.8: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.0.tgz#ef5552b56dc01baae102acb5fc9fb8cd060c30f9" integrity sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ== -set-function-length@^1.2.1, set-function-length@^1.2.2: +set-function-length@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -7819,15 +6360,6 @@ set-function-name@^2.0.1, set-function-name@^2.0.2: functions-have-names "^1.2.3" has-property-descriptors "^1.0.2" -set-proto@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" - integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== - dependencies: - dunder-proto "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - sharp@0.33.4: version "0.33.4" resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.4.tgz#b88e6e843e095c6ab5e1a0c59c4885e580cd8405" @@ -7936,28 +6468,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^8.0.5: - version "8.0.5" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" - integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== - dependencies: - agent-base "^7.1.2" - debug "^4.3.4" - socks "^2.8.3" - -socks@^2.8.3: - version "2.8.4" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.4.tgz#07109755cdd4da03269bda4725baa061ab56d5cc" - integrity sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - sonic-boom@^2.2.1: version "2.8.0" resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" @@ -7970,17 +6480,12 @@ source-map-js@^1.0.2, source-map-js@^1.2.1: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== -source-map@0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== - source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -8021,61 +6526,7 @@ split2@^4.0.0: resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sshpk@^1.18.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" - integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stack-generator@^2.0.5: - version "2.0.10" - resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.10.tgz#8ae171e985ed62287d4f1ed55a1633b3fb53bb4d" - integrity sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ== - dependencies: - stackframe "^1.3.4" - -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== - -stackframe@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" - integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== - -stacktrace-gps@^3.0.4: - version "3.1.2" - resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz#0c40b24a9b119b20da4525c398795338966a2fb0" - integrity sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ== - dependencies: - source-map "0.5.6" - stackframe "^1.3.4" - -stacktrace-js@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" - integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== - dependencies: - error-stack-parser "^2.0.6" - stack-generator "^2.0.5" - stacktrace-gps "^3.0.4" - -"starknet-types-07@npm:@starknet-io/types-js@^0.7.10", "starknet-types-07@npm:@starknet-io/types-js@^0.7.7": +"starknet-types-07@npm:@starknet-io/types-js@^0.7.7": version "0.7.10" resolved "https://registry.yarnpkg.com/@starknet-io/types-js/-/types-js-0.7.10.tgz#d21dc973d0cd04d7b6293ce461f2f06a5873c760" integrity sha512-1VtCqX4AHWJlRRSYGSn+4X1mqolI1Tdq62IwzoU2vUuEE72S1OlEeGhpvd6XsdqXcfHmVzYfj8k1XtKBQqwo9w== @@ -8099,23 +6550,6 @@ starknet@6.11.0: ts-mixer "^6.0.3" url-join "^4.0.1" -starknet@^6.11.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/starknet/-/starknet-6.24.1.tgz#87333339795038e93ef32a20726b5272ddb78fe1" - integrity sha512-g7tiCt73berhcNi41otlN3T3kxZnIvZhMi8WdC21Y6GC6zoQgbI2z1t7JAZF9c4xZiomlanwVnurcpyfEdyMpg== - dependencies: - "@noble/curves" "1.7.0" - "@noble/hashes" "1.6.0" - "@scure/base" "1.2.1" - "@scure/starknet" "1.1.0" - abi-wan-kanabi "^2.2.3" - fetch-cookie "~3.0.0" - isomorphic-fetch "~3.0.0" - lossless-json "^4.0.1" - pako "^2.0.4" - starknet-types-07 "npm:@starknet-io/types-js@^0.7.10" - ts-mixer "^6.0.3" - starknetkit@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/starknetkit/-/starknetkit-2.4.0.tgz#922dacd4686755bdabe2dc1825c990aa5bf0195a" @@ -8140,11 +6574,6 @@ std-env@^3.7.0: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== - stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" @@ -8162,16 +6591,6 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -streamx@^2.15.0, streamx@^2.21.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.22.0.tgz#cd7b5e57c95aaef0ff9b2aef7905afa62ec6e4a7" - integrity sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw== - dependencies: - fast-fifo "^1.3.2" - text-decoder "^1.1.0" - optionalDependencies: - bare-events "^2.2.0" - strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -8238,19 +6657,6 @@ string.prototype.repeat@^1.0.0: define-properties "^1.1.3" es-abstract "^1.17.5" -string.prototype.trim@^1.2.10: - version "1.2.10" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" - integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - define-data-property "^1.1.4" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-object-atoms "^1.0.0" - has-property-descriptors "^1.0.2" - string.prototype.trim@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" @@ -8270,16 +6676,6 @@ string.prototype.trimend@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -string.prototype.trimend@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" - integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - string.prototype.trimstart@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" @@ -8296,13 +6692,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -8451,43 +6840,11 @@ tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar-fs@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.8.tgz#8f62012537d5ff89252d01e48690dc4ebed33ab7" - integrity sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg== - dependencies: - pump "^3.0.0" - tar-stream "^3.1.5" - optionalDependencies: - bare-fs "^4.0.1" - bare-path "^3.0.0" - -tar-stream@^3.1.5: - version "3.1.7" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" - integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== - dependencies: - b4a "^1.6.4" - fast-fifo "^1.2.0" - streamx "^2.15.0" - -text-decoder@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.3.tgz#b19da364d981b2326d5f43099c310cc80d770c65" - integrity sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA== - dependencies: - b4a "^1.6.4" - text-extensions@^2.0.0: version "2.4.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== -text-hex@1.0.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" - integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -8541,13 +6898,6 @@ tldts@^6.1.32: dependencies: tldts-core "^6.1.84" -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -8565,16 +6915,6 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== -tough-cookie@^4.0.0, tough-cookie@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" - integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - tough-cookie@^5.0.0: version "5.1.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.2.tgz#66d774b4a1d9e12dc75089725af3ac75ec31bed7" @@ -8587,11 +6927,6 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -triple-beam@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" - integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== - trpc-browser@^1.3.2: version "1.4.2" resolved "https://registry.yarnpkg.com/trpc-browser/-/trpc-browser-1.4.2.tgz#bcfd6cf04634567feb782b90606d6cef950f236c" @@ -8639,28 +6974,11 @@ tslib@2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tslib@2.7.0, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: version "2.7.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== -tslib@^2.0.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -8673,11 +6991,6 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - type-fest@^3.8.0: version "3.13.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" @@ -8697,15 +7010,6 @@ typed-array-buffer@^1.0.2: es-errors "^1.3.0" is-typed-array "^1.1.13" -typed-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" - integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-typed-array "^1.1.14" - typed-array-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" @@ -8717,17 +7021,6 @@ typed-array-byte-length@^1.0.1: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" - integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== - dependencies: - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.14" - typed-array-byte-offset@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" @@ -8740,19 +7033,6 @@ typed-array-byte-offset@^1.0.2: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" - integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.15" - reflect.getprototypeof "^1.0.9" - typed-array-length@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" @@ -8765,23 +7045,6 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typed-array-length@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" - integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - reflect.getprototypeof "^1.0.6" - -typed-query-selector@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz#92b65dbc0a42655fccf4aeb1a08b1dddce8af5f2" - integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg== - typescript@5: version "5.6.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" @@ -8826,16 +7089,6 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -unbox-primitive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" - integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== - dependencies: - call-bound "^1.0.3" - has-bigints "^1.0.2" - has-symbols "^1.1.0" - which-boxed-primitive "^1.1.1" - uncrypto@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" @@ -8846,11 +7099,6 @@ undici-types@~6.19.2: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== -undici-types@~6.21.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" - integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== - unenv@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/unenv/-/unenv-1.10.0.tgz#c3394a6c6e4cfe68d699f87af456fe3f0db39571" @@ -8862,11 +7110,6 @@ unenv@^1.9.0: node-fetch-native "^1.6.4" pathe "^1.1.2" -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - universalify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" @@ -8922,14 +7165,6 @@ url-join@^4.0.1: resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - use-callback-ref@^1.3.0, use-callback-ref@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz#6134c7f6ff76e2be0b56c809b17a650c942b1693" @@ -8960,16 +7195,11 @@ use-sync-external-store@^1.2.2: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -8978,15 +7208,6 @@ validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - viem@^2.19.1: version "2.23.12" resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.12.tgz#5b1d7ff9142cb8f48c2783fa5eff1e774a3089a9" @@ -9030,17 +7251,6 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" - integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== - dependencies: - is-bigint "^1.1.0" - is-boolean-object "^1.2.1" - is-number-object "^1.1.1" - is-string "^1.1.1" - is-symbol "^1.1.1" - which-builtin-type@^1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" @@ -9059,25 +7269,6 @@ which-builtin-type@^1.1.3: which-collection "^1.0.2" which-typed-array "^1.1.15" -which-builtin-type@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" - integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== - dependencies: - call-bound "^1.0.2" - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" - is-async-function "^2.0.0" - is-date-object "^1.1.0" - is-finalizationregistry "^1.1.0" - is-generator-function "^1.0.10" - is-regex "^1.2.1" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.1.0" - which-collection "^1.0.2" - which-typed-array "^1.1.16" - which-collection@^1.0.1, which-collection@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" @@ -9099,19 +7290,6 @@ which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: gopd "^1.0.1" has-tostringtag "^1.0.2" -which-typed-array@^1.1.16, which-typed-array@^1.1.18: - version "1.1.19" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" - integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.4" - for-each "^0.3.5" - get-proto "^1.0.1" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -9119,32 +7297,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -winston-transport@^4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.9.0.tgz#3bba345de10297654ea6f33519424560003b3bf9" - integrity sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A== - dependencies: - logform "^2.7.0" - readable-stream "^3.6.2" - triple-beam "^1.3.0" - -winston@^3.13.0: - version "3.17.0" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.17.0.tgz#74b8665ce9b4ea7b29d0922cfccf852a08a11423" - integrity sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw== - dependencies: - "@colors/colors" "^1.6.0" - "@dabh/diagnostics" "^2.0.2" - async "^3.2.3" - is-stream "^2.0.0" - logform "^2.7.0" - one-time "^1.0.0" - readable-stream "^3.4.0" - safe-stable-stringify "^2.3.1" - stack-trace "0.0.x" - triple-beam "^1.3.0" - winston-transport "^4.9.0" - wonka@6.3.4: version "6.3.4" resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.4.tgz#76eb9316e3d67d7febf4945202b5bdb2db534594" @@ -9169,15 +7321,6 @@ wordwrap@^1.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -9201,12 +7344,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@8.17.1: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" - integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== - -ws@8.18.1, ws@^8.18.1: +ws@8.18.1: version "8.18.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== @@ -9226,11 +7364,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" @@ -9254,14 +7387,6 @@ yargs@^17.7.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" @@ -9272,11 +7397,6 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== -yoctocolors-cjs@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" - integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== - zen-observable-ts@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz#6c6d9ea3d3a842812c6e9519209365a122ba8b58" @@ -9294,11 +7414,6 @@ zod@^3.22.4: resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== -zod@^3.24.1: - version "3.24.2" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3" - integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== - zustand@^4.4.0: version "4.5.6" resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.6.tgz#6857d52af44874a79fb3408c9473f78367255c96" From 6b486e98bc677774edd04d1de17b19bd04321ff2 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Tue, 15 Apr 2025 15:01:47 +0530 Subject: [PATCH 19/30] sdk bump 1.0.32 --- package.json | 1 + yarn.lock | 1949 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 1918 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index e50d4bf9..04e4c205 100755 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "@prisma/client": "5.18.0", "@starknet-react/chains": "3.0.0", "@starknet-react/core": "3.0.1", + "@strkfarm/sdk": "^1.0.32", "@tanstack/query-core": "5.28.0", "@types/mixpanel-browser": "2.49.0", "@types/mustache": "4.2.5", diff --git a/yarn.lock b/yarn.lock index eb4b1cda..f4338d7f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -45,6 +45,11 @@ resolved "https://registry.yarnpkg.com/@avnu/avnu-sdk/-/avnu-sdk-3.0.0.tgz#e4cb63d26aa6c244040963fcef44e2d95c15cba9" integrity sha512-BqqazrXDKn5RE1anyl9Ba+Kd/4VaKNsdKTl0ryTfXhMIYp+R4dXMaLD40emfXd+25kxM00xPKiZOiGHl2ntG5g== +"@avnu/avnu-sdk@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@avnu/avnu-sdk/-/avnu-sdk-3.0.2.tgz#1751f951380160858bcb8a3fa30a5b4b086d3891" + integrity sha512-N8McoXYEcp1uhSZ4XlEi5BcTpvJDDhUw4kYnlYmPrd7fWezfGy4UHyoFT/A4gqEM4nL3vtENczDNFS1AVfdTnA== + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" @@ -949,6 +954,54 @@ resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-2.2.0.tgz#9b0ecef8f01263ab808ba3bda7b36a0d91b4d5c1" integrity sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ== +"@colors/colors@1.6.0", "@colors/colors@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== + +"@cypress/request-promise@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@cypress/request-promise/-/request-promise-5.0.0.tgz#86899e097dba5123c546f1cadb9bff70e2654ebe" + integrity sha512-eKdYVpa9cBEw2kTBlHeu1PP16Blwtum6QHg/u9s/MoHkZfuo1pRGka1VlUHXF5kdew82BvOJVVGk0x8X0nbp+w== + dependencies: + bluebird "^3.5.0" + request-promise-core "1.1.3" + stealthy-require "^1.1.1" + tough-cookie "^4.1.3" + +"@cypress/request@^3.0.1": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.8.tgz#992f1f42ba03ebb14fa5d97290abe9d015ed0815" + integrity sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~4.0.0" + http-signature "~1.4.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + performance-now "^2.1.0" + qs "6.14.0" + safe-buffer "^5.1.2" + tough-cookie "^5.0.0" + tunnel-agent "^0.6.0" + uuid "^8.3.2" + +"@dabh/diagnostics@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + "@dagrejs/dagre@^1.1.4": version "1.1.4" resolved "https://registry.yarnpkg.com/@dagrejs/dagre/-/dagre-1.1.4.tgz#66f9c0e2b558308f2c268f60e2c28f22ee17e339" @@ -1312,6 +1365,151 @@ resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz#106f911134035b4157ec92a0c154a6b6f88fa4c1" integrity sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw== +"@inquirer/checkbox@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-2.5.0.tgz#41c5c9dd332c0a8fa159be23982ce080d0b199d4" + integrity sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA== + dependencies: + "@inquirer/core" "^9.1.0" + "@inquirer/figures" "^1.0.5" + "@inquirer/type" "^1.5.3" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/confirm@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-3.2.0.tgz#6af1284670ea7c7d95e3f1253684cfbd7228ad6a" + integrity sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw== + dependencies: + "@inquirer/core" "^9.1.0" + "@inquirer/type" "^1.5.3" + +"@inquirer/core@^9.1.0": + version "9.2.1" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.2.1.tgz#677c49dee399c9063f31e0c93f0f37bddc67add1" + integrity sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg== + dependencies: + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + "@types/mute-stream" "^0.0.4" + "@types/node" "^22.5.5" + "@types/wrap-ansi" "^3.0.0" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^1.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/editor@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-2.2.0.tgz#a41eb7b151bd9a6bc3c0b69219d02d82547bc387" + integrity sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw== + dependencies: + "@inquirer/core" "^9.1.0" + "@inquirer/type" "^1.5.3" + external-editor "^3.1.0" + +"@inquirer/expand@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-2.3.0.tgz#afc44aee303315a85563e9d0275e658f0ee0e701" + integrity sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw== + dependencies: + "@inquirer/core" "^9.1.0" + "@inquirer/type" "^1.5.3" + yoctocolors-cjs "^2.1.2" + +"@inquirer/figures@^1.0.5", "@inquirer/figures@^1.0.6": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.11.tgz#4744e6db95288fea1dead779554859710a959a21" + integrity sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw== + +"@inquirer/input@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-2.3.0.tgz#9b99022f53780fecc842908f3f319b52a5a16865" + integrity sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw== + dependencies: + "@inquirer/core" "^9.1.0" + "@inquirer/type" "^1.5.3" + +"@inquirer/number@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-1.1.0.tgz#4dac004021ea67c89552a261564f103a494cac96" + integrity sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA== + dependencies: + "@inquirer/core" "^9.1.0" + "@inquirer/type" "^1.5.3" + +"@inquirer/password@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-2.2.0.tgz#0b6f26336c259c8a9e5f5a3f2e1a761564f764ba" + integrity sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg== + dependencies: + "@inquirer/core" "^9.1.0" + "@inquirer/type" "^1.5.3" + ansi-escapes "^4.3.2" + +"@inquirer/prompts@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-5.5.0.tgz#5805aa15a13180017829aa31d071fd37a43b735d" + integrity sha512-BHDeL0catgHdcHbSFFUddNzvx/imzJMft+tWDPwTm3hfu8/tApk1HrooNngB2Mb4qY+KaRWF+iZqoVUPeslEog== + dependencies: + "@inquirer/checkbox" "^2.5.0" + "@inquirer/confirm" "^3.2.0" + "@inquirer/editor" "^2.2.0" + "@inquirer/expand" "^2.3.0" + "@inquirer/input" "^2.3.0" + "@inquirer/number" "^1.1.0" + "@inquirer/password" "^2.2.0" + "@inquirer/rawlist" "^2.3.0" + "@inquirer/search" "^1.1.0" + "@inquirer/select" "^2.5.0" + +"@inquirer/rawlist@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-2.3.0.tgz#6b2c0da39c1cd855af5608b2d627681cdac7277d" + integrity sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ== + dependencies: + "@inquirer/core" "^9.1.0" + "@inquirer/type" "^1.5.3" + yoctocolors-cjs "^2.1.2" + +"@inquirer/search@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-1.1.0.tgz#665928cac2326b9501ddafbb8606ce4823b3106b" + integrity sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ== + dependencies: + "@inquirer/core" "^9.1.0" + "@inquirer/figures" "^1.0.5" + "@inquirer/type" "^1.5.3" + yoctocolors-cjs "^2.1.2" + +"@inquirer/select@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-2.5.0.tgz#345c6908ecfaeef3d84ddd2f9feb2f487c558efb" + integrity sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA== + dependencies: + "@inquirer/core" "^9.1.0" + "@inquirer/figures" "^1.0.5" + "@inquirer/type" "^1.5.3" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/type@^1.5.3": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.5.5.tgz#303ea04ce7ad2e585b921b662b3be36ef7b4f09b" + integrity sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA== + dependencies: + mute-stream "^1.0.0" + +"@inquirer/type@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-2.0.0.tgz#08fa513dca2cb6264fe1b0a2fabade051444e3f6" + integrity sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag== + dependencies: + mute-stream "^1.0.0" + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -1497,6 +1695,13 @@ dependencies: "@noble/hashes" "1.3.2" +"@noble/curves@1.7.0", "@noble/curves@~1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.7.0.tgz#0512360622439256df892f21d25b388f52505e45" + integrity sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw== + dependencies: + "@noble/hashes" "1.6.0" + "@noble/curves@1.8.1", "@noble/curves@^1.6.0", "@noble/curves@~1.8.1": version "1.8.1" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" @@ -1533,11 +1738,21 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== +"@noble/hashes@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.0.tgz#d4bfb516ad6e7b5111c216a5cc7075f4cf19e6c5" + integrity sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ== + "@noble/hashes@1.7.1", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== +"@noble/hashes@~1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.1.tgz#df6e5943edcea504bac61395926d6fd67869a0d5" + integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1707,6 +1922,53 @@ dependencies: "@prisma/debug" "5.18.0" +"@puppeteer/browsers@2.10.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.10.0.tgz#a6e55bf85bfcc819e5e8c79f6122cccaa52515a4" + integrity sha512-HdHF4rny4JCvIcm7V1dpvpctIGqM3/Me255CB44vW7hDG1zYMmcBMjpNqZEDxdCfXGLkx5kP0+Jz5DUS+ukqtA== + dependencies: + debug "^4.4.0" + extract-zip "^2.0.1" + progress "^2.0.3" + proxy-agent "^6.5.0" + semver "^7.7.1" + tar-fs "^3.0.8" + yargs "^17.7.2" + +"@redis/bloom@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.2.0.tgz#d3fd6d3c0af3ef92f26767b56414a370c7b63b71" + integrity sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg== + +"@redis/client@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.6.0.tgz#dcf4ae1319763db6fdddd6de7f0af68a352c30ea" + integrity sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg== + dependencies: + cluster-key-slot "1.1.2" + generic-pool "3.9.0" + yallist "4.0.0" + +"@redis/graph@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.1.tgz#8c10df2df7f7d02741866751764031a957a170ea" + integrity sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw== + +"@redis/json@1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.7.tgz#016257fcd933c4cbcb9c49cde8a0961375c6893b" + integrity sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ== + +"@redis/search@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.2.0.tgz#50976fd3f31168f585666f7922dde111c74567b8" + integrity sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw== + +"@redis/time-series@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.1.0.tgz#cba454c05ec201bd5547aaf55286d44682ac8eb5" + integrity sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g== + "@rtsao/scc@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" @@ -1717,6 +1979,11 @@ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz#427d5549943a9c6fce808e39ea64dbe60d4047f1" integrity sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA== +"@scure/base@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.1.tgz#dd0b2a533063ca612c17aa9ad26424a2ff5aa865" + integrity sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ== + "@scure/base@~1.1.3": version "1.1.9" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" @@ -1744,6 +2011,14 @@ "@noble/hashes" "~1.7.1" "@scure/base" "~1.2.4" +"@scure/starknet@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/starknet/-/starknet-1.1.0.tgz#d1902e053d98196e161b9b2c3996b20999094e7a" + integrity sha512-83g3M6Ix2qRsPN4wqLDqiRZ2GBNbjVWfboJE/9UjfG+MHr6oDSu/CWgy8hsBSJejr09DkkL+l0Ze4KVrlCIdtQ== + dependencies: + "@noble/curves" "~1.7.0" + "@noble/hashes" "~1.6.0" + "@scure/starknet@~1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@scure/starknet/-/starknet-1.0.0.tgz#4419bc2fdf70f3dd6cb461d36c878c9ef4419f8c" @@ -1930,6 +2205,28 @@ viem "^2.19.1" zod "^3.22.4" +"@strkfarm/sdk@^1.0.32": + version "1.0.32" + resolved "https://registry.yarnpkg.com/@strkfarm/sdk/-/sdk-1.0.32.tgz#28e38eb1ce4da87033771ebb1ec01ea6356d219f" + integrity sha512-6tIkd2yWDweBsBGO1cYNrm04QTtNlMZyuEfZSk3BAl7ffoXI10L1TwExHpd2NGmMVz6xgEpvQiFK81i1fZSkbw== + dependencies: + "@avnu/avnu-sdk" "^3.0.2" + axios "^1.7.2" + bignumber.js "4.0.4" + browser-assert "^1.2.1" + chalk "^4.1.2" + commander "^12.1.0" + ethers "^6.13.5" + form-data "^4.0.2" + inquirer "^10.1.2" + node-telegram-bot-api "^0.66.0" + proxy-from-env "^1.1.0" + puppeteer "^24.4.0" + redis "^4.7.0" + stacktrace-js "^2.0.2" + starknet "^6.11.0" + winston "^3.13.0" + "@swc/helpers@0.5.2": version "0.5.2" resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d" @@ -1954,6 +2251,11 @@ dependencies: "@tanstack/query-core" "5.59.0" +"@tootallnate/quickjs-emscripten@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" + integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== + "@trpc/client@^10.38.1": version "10.45.2" resolved "https://registry.yarnpkg.com/@trpc/client/-/client-10.45.2.tgz#15f9ba81303bf3417083fc6bb742e4e86b49da90" @@ -2042,6 +2344,20 @@ resolved "https://registry.yarnpkg.com/@types/mustache/-/mustache-4.2.5.tgz#9129f0d6857f976e00e171bbb3460e4b702f84ef" integrity sha512-PLwiVvTBg59tGFL/8VpcGvqOu3L4OuveNvPi0EYbWchRdEVP++yRUXJPFl+CApKEq13017/4Nf7aQ5lTtHUNsA== +"@types/mute-stream@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" + integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@^22.5.5": + version "22.14.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.1.tgz#53b54585cec81c21eee3697521e31312d6ca1e6f" + integrity sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw== + dependencies: + undici-types "~6.21.0" + "@types/node@18.15.13": version "18.15.13" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" @@ -2054,6 +2370,13 @@ dependencies: undici-types "~6.19.2" +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" + "@types/normalize-package-data@^2.4.1": version "2.4.4" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" @@ -2096,6 +2419,23 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== +"@types/triple-beam@^1.3.2": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== + +"@types/wrap-ansi@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" + integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== + +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@7.7.0": version "7.7.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz#bf34a02f221811505b8bf2f31060c8560c1bb0a3" @@ -2530,7 +2870,7 @@ JSONStream@^1.3.5: jsonparse "^1.2.0" through ">=2.2.7 <3" -abi-wan-kanabi@^2.2.2: +abi-wan-kanabi@^2.2.2, abi-wan-kanabi@^2.2.3: version "2.2.4" resolved "https://registry.yarnpkg.com/abi-wan-kanabi/-/abi-wan-kanabi-2.2.4.tgz#47ebbafbb7f8df81773efbdcca60cdda8008c821" integrity sha512-0aA81FScmJCPX+8UvkXLki3X1+yPQuWxEkqXBVKltgPAK79J+NB+Lp5DouMXa7L6f+zcRlIA/6XO7BN/q9fnvg== @@ -2577,6 +2917,11 @@ agent-base@6: dependencies: debug "4" +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" + integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== + ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -2587,6 +2932,13 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -2666,6 +3018,14 @@ array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: call-bind "^1.0.5" is-array-buffer "^3.0.4" +array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" @@ -2688,6 +3048,18 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.findindex@^2.0.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findindex/-/array.prototype.findindex-2.2.4.tgz#63aff05df18effa990c367bfad06b71f7bd113f9" + integrity sha512-LLm4mhxa9v8j0A/RPnpQAP4svXToJFh+Hp1pNYl5ZD5qpB4zdx/D4YjpVcETkhFbUKWO3iGMVLvrOnnmkAJT6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + array.prototype.findlast@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" @@ -2757,11 +3129,43 @@ arraybuffer.prototype.slice@^1.0.3: is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + ast-types-flow@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== +ast-types@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + async-mutex@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.5.0.tgz#353c69a0b9e75250971a64ac203b0ebfddd75482" @@ -2769,6 +3173,11 @@ async-mutex@^0.5.0: dependencies: tslib "^2.4.0" +async@^3.2.3: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2798,6 +3207,16 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== + axe-core@^4.10.0: version "4.10.0" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.0.tgz#d9e56ab0147278272739a000880196cdfe113b59" @@ -2812,11 +3231,25 @@ axios@1.6.7: form-data "^4.0.0" proxy-from-env "^1.1.0" +axios@^1.7.2: + version "1.8.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" + integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axobject-query@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== +b4a@^1.6.4: + version "1.6.7" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4" + integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== + babel-plugin-macros@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" @@ -2831,6 +3264,51 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +bare-events@^2.2.0, bare-events@^2.5.4: + version "2.5.4" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.4.tgz#16143d435e1ed9eafd1ab85f12b89b3357a41745" + integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== + +bare-fs@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.1.2.tgz#5b048298019f489979d5a6afb480f5204ad4e89b" + integrity sha512-8wSeOia5B7LwD4+h465y73KOdj5QHsbbuoUfPBi+pXgFJIPuG7SsiOdJuijWMyfid49eD+WivpfY7KT8gbAzBA== + dependencies: + bare-events "^2.5.4" + bare-path "^3.0.0" + bare-stream "^2.6.4" + +bare-os@^3.0.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-3.6.1.tgz#9921f6f59edbe81afa9f56910658422c0f4858d4" + integrity sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g== + +bare-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-3.0.0.tgz#b59d18130ba52a6af9276db3e96a2e3d3ea52178" + integrity sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw== + dependencies: + bare-os "^3.0.1" + +bare-stream@^2.6.4: + version "2.6.5" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.6.5.tgz#bba8e879674c4c27f7e27805df005c15d7a2ca07" + integrity sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA== + dependencies: + streamx "^2.21.0" + +basic-ftp@^5.0.2: + version "5.0.5" + resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" + integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + bignumber.js@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-4.0.4.tgz#7c40f5abcd2d6623ab7b99682ee7db81b11889a4" @@ -2841,6 +3319,19 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== +bl@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" @@ -2878,6 +3369,11 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== +browser-assert@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/browser-assert/-/browser-assert-1.2.1.tgz#9aaa5a2a8c74685c2ae05bfe46efd606f068c200" + integrity sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ== + browserslist@^4.14.5: version "4.24.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4" @@ -2888,6 +3384,11 @@ browserslist@^4.14.5: node-releases "^2.0.18" update-browserslist-db "^1.1.0" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + busboy@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" @@ -2895,7 +3396,7 @@ busboy@1.6.0: dependencies: streamsearch "^1.1.0" -call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== @@ -2914,7 +3415,17 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" -call-bound@^1.0.2: +call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== @@ -2945,6 +3456,11 @@ cardinal@^2.1.1: ansicolors "~0.3.2" redeyed "~2.1.0" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -2954,7 +3470,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2962,6 +3478,11 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + chokidar@^3.5.3, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" @@ -2982,6 +3503,14 @@ chroma.ts@1.0.10: resolved "https://registry.yarnpkg.com/chroma.ts/-/chroma.ts-1.0.10.tgz#2b965d8f2c2eee44d25072902e5787fe259d4565" integrity sha512-0FOQiB6LaiOwoyaxP+a4d3sCIOSf7YvBKj3TfeQM4ZBb2yskRxe4FlT2P4YNpHz7kIB5rXsfmpyniyrYRRyVHw== +chromium-bidi@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-3.0.0.tgz#bfb0549db96552d42377401aadc0198a1bbb3e9f" + integrity sha512-ZOGRDAhBMX1uxL2Cm2TDuhImbrsEz5A/tTcVU6RpXEWaTNUNwsHW6njUXizh51Ir6iqHbKAfhA2XK33uBcLo5A== + dependencies: + mitt "^3.0.1" + zod "^3.24.1" + citty@^0.1.5, citty@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4" @@ -2999,6 +3528,11 @@ classnames@^2.2.5, classnames@^2.3.2: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + client-only@0.0.1, client-only@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" @@ -3022,6 +3556,11 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" +cluster-key-slot@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== + coinmarketcap-api@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/coinmarketcap-api/-/coinmarketcap-api-3.1.1.tgz#ee5660a7e18abd03cd84d80c79a6d7ab48817e6d" @@ -3030,7 +3569,7 @@ coinmarketcap-api@^3.1.1: node-fetch "^2.6.0" qs "^6.7.0" -color-convert@^1.9.0: +color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -3054,7 +3593,7 @@ color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.9.0: +color-string@^1.6.0, color-string@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== @@ -3067,6 +3606,14 @@ color2k@^2.0.2: resolved "https://registry.yarnpkg.com/color2k/-/color2k-2.0.3.tgz#a771244f6b6285541c82aa65ff0a0c624046e533" integrity sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog== +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + color@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" @@ -3080,13 +3627,26 @@ colorette@^1.2.1: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== -combined-stream@^1.0.8: +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + +combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" +commander@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -3253,6 +3813,16 @@ copy-to-clipboard@3.3.3: dependencies: toggle-selection "^1.0.6" +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cosmiconfig@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" @@ -3264,6 +3834,16 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -3372,6 +3952,18 @@ dargs@^8.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-8.1.0.tgz#a34859ea509cbce45485e5aa356fef70bfcc7272" integrity sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw== +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +data-uri-to-buffer@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" + integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== + data-view-buffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" @@ -3381,6 +3973,15 @@ data-view-buffer@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + data-view-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" @@ -3390,6 +3991,15 @@ data-view-byte-length@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + data-view-byte-offset@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" @@ -3399,6 +4009,15 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: version "4.3.7" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" @@ -3420,6 +4039,13 @@ debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.1.1, debug@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + decode-uri-component@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" @@ -3477,6 +4103,15 @@ defu@^6.1.4: resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== +degenerator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" + integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== + dependencies: + ast-types "^0.13.4" + escodegen "^2.1.0" + esprima "^4.0.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -3507,6 +4142,11 @@ detect-node-es@^1.1.0: resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== +devtools-protocol@0.0.1425554: + version "0.0.1425554" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1425554.tgz#51ed2fed1405f56783d24a393f7c75b6bbb58029" + integrity sha512-uRfxR6Nlzdzt0ihVIkV+sLztKgs7rgquY/Mhcv1YNCWDh5IZgl5mnn2aeEnW5stYTE0wwiF4RYVz8eMEpV1SEw== + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -3553,7 +4193,7 @@ dot-prop@^5.1.0: dependencies: is-obj "^2.0.0" -dunder-proto@^1.0.1: +dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== @@ -3577,6 +4217,14 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + electron-to-chromium@^1.5.28: version "1.5.30" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.30.tgz#5b264b489cfe0c3dd71097c164d795444834e7c7" @@ -3628,7 +4276,12 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -end-of-stream@^1.4.1: +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -3643,6 +4296,11 @@ enhanced-resolve@^5.15.0: graceful-fs "^4.2.4" tapable "^2.2.0" +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + error-ex@^1.3.1, error-ex@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -3650,6 +4308,13 @@ error-ex@^1.3.1, error-ex@^1.3.2: dependencies: is-arrayish "^0.2.1" +error-stack-parser@^2.0.6: + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" @@ -3702,6 +4367,63 @@ es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23 unbox-primitive "^1.0.2" which-typed-array "^1.1.15" +es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9: + version "1.23.9" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" + integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.2.7" + get-proto "^1.0.0" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-regex "^1.2.1" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.0" + math-intrinsics "^1.1.0" + object-inspect "^1.13.3" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.18" + es-define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" @@ -3777,6 +4499,16 @@ es-set-tostringtag@^2.0.3: has-tostringtag "^1.0.2" hasown "^2.0.1" +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" @@ -3793,6 +4525,15 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" @@ -3808,6 +4549,17 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escodegen@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + eslint-config-next@14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.0.tgz#7e309d426b8afacaba3b32fdbb02ba220b6d0a97" @@ -4006,7 +4758,7 @@ espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@~4.0.0: +esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -4048,12 +4800,30 @@ ethers@6.11.1: tslib "2.4.0" ws "8.5.0" +ethers@^6.13.5: + version "6.13.5" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.5.tgz#8c1d6ac988ac08abc3c1d8fabbd4b8b602851ac4" + integrity sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "22.7.5" + aes-js "4.0.0-beta.5" + tslib "2.7.0" + ws "8.17.1" + eventemitter3@5.0.1, eventemitter3@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -events@3.3.0, events@^3.3.0: +eventemitter3@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +events@3.3.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -4073,11 +4843,51 @@ execa@^8.0.1: signal-exit "^4.1.0" strip-final-newline "^3.0.0" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-fifo@^1.2.0, fast-fifo@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" @@ -4111,6 +4921,18 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + fetch-cookie@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-3.1.0.tgz#3989b929e48cc410b151a3e476b762ca19ffcb2d" @@ -4119,6 +4941,14 @@ fetch-cookie@^3.0.0: set-cookie-parser "^2.4.8" tough-cookie "^5.0.0" +fetch-cookie@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-3.0.1.tgz#6a77f7495e1a639ae019db916a234db8c85d5963" + integrity sha512-ZGXe8Y5Z/1FWqQ9q/CrJhkUD73DyBU9VF0hBQmEO/wPHe4A9PKTjplFDLeFX8aOsYypZUcX5Ji/eByn3VCVO3Q== + dependencies: + set-cookie-parser "^2.4.8" + tough-cookie "^4.0.0" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -4126,6 +4956,11 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-type@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== + fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -4173,6 +5008,11 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + focus-lock@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-1.3.5.tgz#aa644576e5ec47d227b57eb14e1efb2abf33914c" @@ -4180,7 +5020,7 @@ focus-lock@^1.3.5: dependencies: tslib "^2.0.3" -follow-redirects@^1.15.4: +follow-redirects@^1.15.4, follow-redirects@^1.15.6: version "1.15.9" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== @@ -4192,6 +5032,13 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + foreground-child@^3.1.0: version "3.3.0" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" @@ -4200,6 +5047,11 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -4209,6 +5061,16 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.2, form-data@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + mime-types "^2.1.12" + framer-motion@11.0.5: version "11.0.5" resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-11.0.5.tgz#2ae1341d8605a01c50009d3bb195a67e4e2bfc69" @@ -4280,11 +5142,28 @@ function.prototype.name@^1.1.6: es-abstract "^1.22.1" functions-have-names "^1.2.3" +function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +generic-pool@3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" + integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== + get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -4301,7 +5180,7 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" -get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -4327,7 +5206,7 @@ get-port-please@^3.1.2: resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49" integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== -get-proto@^1.0.1: +get-proto@^1.0.0, get-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== @@ -4357,6 +5236,13 @@ get-starknet@3.3.3: bowser "^2.11.0" get-starknet-core "^3.3.3" +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-stream@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" @@ -4371,6 +5257,15 @@ get-symbol-description@^1.0.2: es-errors "^1.3.0" get-intrinsic "^1.2.4" +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + get-tsconfig@^4.7.5: version "4.8.1" resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" @@ -4378,6 +5273,22 @@ get-tsconfig@^4.7.5: dependencies: resolve-pkg-maps "^1.0.0" +get-uri@^6.0.1: + version "6.0.4" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.4.tgz#6daaee9e12f9759e19e55ba313956883ef50e0a7" + integrity sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ== + dependencies: + basic-ftp "^5.0.2" + data-uri-to-buffer "^6.0.2" + debug "^4.3.4" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + git-raw-commits@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-4.0.0.tgz#b212fd2bff9726d27c1283a1157e829490593285" @@ -4456,7 +5367,7 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: +globalthis@^1.0.3, globalthis@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -4570,6 +5481,13 @@ has-proto@^1.0.1, has-proto@^1.0.3: resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -4630,11 +5548,28 @@ hosted-git-info@^7.0.0: dependencies: lru-cache "^10.0.1" +http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-shutdown@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/http-shutdown/-/http-shutdown-1.2.2.tgz#41bc78fc767637c4c95179bc492f312c0ae64c5f" integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== +http-signature@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.4.0.tgz#dee5a9ba2bf49416abc544abd6d967f6a94c8c3f" + integrity sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.18.0" + https-proxy-agent@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -4643,6 +5578,14 @@ https-proxy-agent@5.0.0: agent-base "6" debug "4" +https-proxy-agent@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + human-signals@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" @@ -4653,6 +5596,13 @@ husky@9.1.1: resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.1.tgz#73f8f1b58329f377654293148c1a6458f54ca224" integrity sha512-fCqlqLXcBnXa/TJXmT93/A36tJsjdJkibQ1MuIiFyCCYUlpYpIaj2mv1w+3KR6Rzu1IC3slFTje5f6DUp2A2rg== +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + idb-keyval@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" @@ -4671,6 +5621,14 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-fresh@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -4684,11 +5642,25 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4: +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inquirer@^10.1.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-10.2.2.tgz#36b866443a9fb2747151766c01ef9c8ba2d585eb" + integrity sha512-tyao/4Vo36XnUItZ7DnUXX4f1jVao2mSrleV/5IPtW/XAEA26hRVsbc68nuTEKWcr5vMP/1mVoT2O7u8H4v1Vg== + dependencies: + "@inquirer/core" "^9.1.0" + "@inquirer/prompts" "^5.5.0" + "@inquirer/type" "^1.5.3" + "@types/mute-stream" "^0.0.4" + ansi-escapes "^4.3.2" + mute-stream "^1.0.0" + run-async "^3.0.0" + rxjs "^7.8.1" + internal-slot@^1.0.4, internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" @@ -4698,6 +5670,15 @@ internal-slot@^1.0.4, internal-slot@^1.0.7: hasown "^2.0.0" side-channel "^1.0.4" +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -4705,6 +5686,14 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + iron-webcrypto@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz#aa60ff2aa10550630f4c0b11fd2442becdb35a6f" @@ -4726,6 +5715,15 @@ is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: call-bind "^1.0.2" get-intrinsic "^1.2.1" +is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -4750,6 +5748,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -4765,6 +5770,14 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-bun-module@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.2.1.tgz#495e706f42e29f086fd5fe1ac3c51f106062b9fc" @@ -4791,6 +5804,15 @@ is-data-view@^1.0.1: dependencies: is-typed-array "^1.1.13" +is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -4798,6 +5820,14 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" +is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-docker@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" @@ -4815,6 +5845,13 @@ is-finalizationregistry@^1.0.2: dependencies: call-bind "^1.0.2" +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -4858,6 +5895,14 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -4886,6 +5931,16 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + is-set@^2.0.2, is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" @@ -4898,6 +5953,18 @@ is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: dependencies: call-bind "^1.0.7" +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + is-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" @@ -4910,6 +5977,14 @@ is-string@^1.0.5, is-string@^1.0.7: dependencies: has-tostringtag "^1.0.0" +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" @@ -4917,6 +5992,15 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + is-text-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" @@ -4931,6 +6015,18 @@ is-typed-array@^1.1.13: dependencies: which-typed-array "^1.1.14" +is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + is-weakmap@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" @@ -4943,6 +6039,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakref@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + is-weakset@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" @@ -4970,12 +6073,17 @@ isarray@^2.0.5: resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isomorphic-fetch@^3.0.0: +isomorphic-fetch@^3.0.0, isomorphic-fetch@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== @@ -4988,6 +6096,11 @@ isows@1.0.6: resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" integrity sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw== +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + iterator.prototype@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" @@ -5049,6 +6162,16 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -5074,12 +6197,17 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-safe@^5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== @@ -5112,6 +6240,16 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" @@ -5134,6 +6272,11 @@ keyvaluestorage-interface@^1.0.0: resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + language-subtag-registry@^0.3.20: version "0.3.23" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" @@ -5237,6 +6380,23 @@ lodash.union@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== +lodash@^4.17.15: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +logform@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.7.0.tgz#cfca97528ef290f2e125a08396805002b2d060d1" + integrity sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ== + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -5254,6 +6414,11 @@ lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.4.3: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== +lru-cache@^7.14.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + math-intrinsics@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" @@ -5292,13 +6457,18 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12: +mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + mime@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" @@ -5350,6 +6520,11 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== +mitt@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" + integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== + mixpanel-browser@2.49.0: version "2.49.0" resolved "https://registry.yarnpkg.com/mixpanel-browser/-/mixpanel-browser-2.49.0.tgz#de3f4f2d0f3a32b4babf6d827ef983a9fd48a711" @@ -5397,6 +6572,11 @@ mustache@4.2.0: resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -5426,6 +6606,11 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + next@14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/next/-/next-14.1.0.tgz#b31c0261ff9caa6b4a17c5af019ed77387174b69" @@ -5476,6 +6661,21 @@ node-releases@^2.0.18: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== +node-telegram-bot-api@^0.66.0: + version "0.66.0" + resolved "https://registry.yarnpkg.com/node-telegram-bot-api/-/node-telegram-bot-api-0.66.0.tgz#9ad27e357b30fd3a89a37365ed95a82a70ac9f94" + integrity sha512-s4Hrg5q+VPl4/tJVG++pImxF6eb8tNJNj4KnDqAOKL6zGU34lo9RXmyAN158njwGN+v8hdNf8s9fWIYW9hPb5A== + dependencies: + "@cypress/request" "^3.0.1" + "@cypress/request-promise" "^5.0.0" + array.prototype.findindex "^2.0.2" + bl "^1.2.3" + debug "^3.2.7" + eventemitter3 "^3.0.0" + file-type "^3.9.0" + mime "^1.6.0" + pump "^2.0.0" + normalize-package-data@^6.0.0: version "6.0.2" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" @@ -5550,6 +6750,18 @@ object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" +object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + object.entries@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" @@ -5606,13 +6818,20 @@ on-exit-leak-free@^0.2.0: resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== -once@^1.3.0, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + onetime@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" @@ -5642,6 +6861,20 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + ox@0.6.9: version "0.6.9" resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.9.tgz#da1ee04fa10de30c8d04c15bfb80fe58b1f554bd" @@ -5683,6 +6916,28 @@ p-locate@^6.0.0: dependencies: p-limit "^4.0.0" +pac-proxy-agent@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz#9cfaf33ff25da36f6147a20844230ec92c06e5df" + integrity sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA== + dependencies: + "@tootallnate/quickjs-emscripten" "^0.23.0" + agent-base "^7.1.2" + debug "^4.3.4" + get-uri "^6.0.1" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.6" + pac-resolver "^7.0.1" + socks-proxy-agent "^8.0.5" + +pac-resolver@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6" + integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== + dependencies: + degenerator "^5.0.0" + netmask "^2.0.2" + package-json-from-dist@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" @@ -5700,7 +6955,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -5769,6 +7024,16 @@ pathe@^1.1.1, pathe@^1.1.2: resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + picocolors@^1.0.0, picocolors@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" @@ -5922,11 +7187,21 @@ prisma@5.18.0: dependencies: "@prisma/engines" "5.18.0" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + process-warning@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" @@ -5936,17 +7211,78 @@ prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, object-assign "^4.1.1" react-is "^16.13.1" +proxy-agent@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.5.0.tgz#9e49acba8e4ee234aacb539f89ed9c23d02f232d" + integrity sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + http-proxy-agent "^7.0.1" + https-proxy-agent "^7.0.6" + lru-cache "^7.14.1" + pac-proxy-agent "^7.1.0" + proxy-from-env "^1.1.0" + socks-proxy-agent "^8.0.5" + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -punycode@^2.1.0: +psl@^1.1.33: + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@^6.7.0: +puppeteer-core@24.6.1: + version "24.6.1" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-24.6.1.tgz#fc2ea21a49d6d8240cc959b729a12ba976ac140a" + integrity sha512-sMCxsY+OPWO2fecBrhIeCeJbWWXJ6UaN997sTid6whY0YT9XM0RnxEwLeUibluIS5/fRmuxe1efjb5RMBsky7g== + dependencies: + "@puppeteer/browsers" "2.10.0" + chromium-bidi "3.0.0" + debug "^4.4.0" + devtools-protocol "0.0.1425554" + typed-query-selector "^2.12.0" + ws "^8.18.1" + +puppeteer@^24.4.0: + version "24.6.1" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-24.6.1.tgz#828308e1e05654c4ca87399e677d10e3eeb32702" + integrity sha512-/4ocGfu8LNvDbWUqJZV2VmwEWpbOdJa69y2Jivd213tV0ekAtUh/bgT1hhW63SDN/CtrEucOPwoomZ+9M+eBEg== + dependencies: + "@puppeteer/browsers" "2.10.0" + chromium-bidi "3.0.0" + cosmiconfig "^9.0.0" + devtools-protocol "0.0.1425554" + puppeteer-core "24.6.1" + typed-query-selector "^2.12.0" + +qs@6.14.0, qs@^6.7.0: version "6.14.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== @@ -5963,6 +7299,11 @@ query-string@7.1.3: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -6164,7 +7505,20 @@ read-pkg@^8.0.0, read-pkg@^8.1.0: parse-json "^7.0.0" type-fest "^4.2.0" -readable-stream@^3.1.1: +readable-stream@^2.3.5: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -6192,6 +7546,18 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" +redis@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/redis/-/redis-4.7.0.tgz#b401787514d25dd0cfc22406d767937ba3be55d6" + integrity sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ== + dependencies: + "@redis/bloom" "1.2.0" + "@redis/client" "1.6.0" + "@redis/graph" "1.1.1" + "@redis/json" "1.0.7" + "@redis/search" "1.2.0" + "@redis/time-series" "1.1.0" + reflect.getprototypeof@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" @@ -6205,6 +7571,20 @@ reflect.getprototypeof@^1.0.4: globalthis "^1.0.3" which-builtin-type "^1.1.3" +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" @@ -6220,16 +7600,40 @@ regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" +regexp.prototype.flags@^1.5.3: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + rehackt@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.1.0.tgz#a7c5e289c87345f70da8728a7eb878e5d03c696b" integrity sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw== +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== + dependencies: + lodash "^4.17.15" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -6275,6 +7679,11 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +run-async@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" + integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6282,6 +7691,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^7.8.1: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" @@ -6292,11 +7708,35 @@ safe-array-concat@^1.1.2: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@~5.2.0: +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + safe-regex-test@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" @@ -6306,11 +7746,25 @@ safe-regex-test@^1.0.3: es-errors "^1.3.0" is-regex "^1.1.4" -safe-stable-stringify@^2.1.0: +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +safe-stable-stringify@^2.1.0, safe-stable-stringify@^2.3.1: version "2.5.0" resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + scheduler@^0.23.2: version "0.23.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" @@ -6328,6 +7782,11 @@ semver@^7.3.5, semver@^7.5.2, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +semver@^7.7.1: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + server-only@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/server-only/-/server-only-0.0.1.tgz#0f366bb6afb618c37c9255a314535dc412cd1c9e" @@ -6338,7 +7797,7 @@ set-cookie-parser@^2.4.8: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.0.tgz#ef5552b56dc01baae102acb5fc9fb8cd060c30f9" integrity sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ== -set-function-length@^1.2.1: +set-function-length@^1.2.1, set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -6360,6 +7819,15 @@ set-function-name@^2.0.1, set-function-name@^2.0.2: functions-have-names "^1.2.3" has-property-descriptors "^1.0.2" +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + sharp@0.33.4: version "0.33.4" resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.4.tgz#b88e6e843e095c6ab5e1a0c59c4885e580cd8405" @@ -6468,6 +7936,28 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.4" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.4.tgz#07109755cdd4da03269bda4725baa061ab56d5cc" + integrity sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + sonic-boom@^2.2.1: version "2.8.0" resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" @@ -6480,12 +7970,17 @@ source-map-js@^1.0.2, source-map-js@^1.2.1: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== + source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.1: +source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -6526,7 +8021,61 @@ split2@^4.0.0: resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== -"starknet-types-07@npm:@starknet-io/types-js@^0.7.7": +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +sshpk@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-generator@^2.0.5: + version "2.0.10" + resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.10.tgz#8ae171e985ed62287d4f1ed55a1633b3fb53bb4d" + integrity sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ== + dependencies: + stackframe "^1.3.4" + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +stacktrace-gps@^3.0.4: + version "3.1.2" + resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz#0c40b24a9b119b20da4525c398795338966a2fb0" + integrity sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ== + dependencies: + source-map "0.5.6" + stackframe "^1.3.4" + +stacktrace-js@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" + integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== + dependencies: + error-stack-parser "^2.0.6" + stack-generator "^2.0.5" + stacktrace-gps "^3.0.4" + +"starknet-types-07@npm:@starknet-io/types-js@^0.7.10", "starknet-types-07@npm:@starknet-io/types-js@^0.7.7": version "0.7.10" resolved "https://registry.yarnpkg.com/@starknet-io/types-js/-/types-js-0.7.10.tgz#d21dc973d0cd04d7b6293ce461f2f06a5873c760" integrity sha512-1VtCqX4AHWJlRRSYGSn+4X1mqolI1Tdq62IwzoU2vUuEE72S1OlEeGhpvd6XsdqXcfHmVzYfj8k1XtKBQqwo9w== @@ -6550,6 +8099,23 @@ starknet@6.11.0: ts-mixer "^6.0.3" url-join "^4.0.1" +starknet@^6.11.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/starknet/-/starknet-6.24.1.tgz#87333339795038e93ef32a20726b5272ddb78fe1" + integrity sha512-g7tiCt73berhcNi41otlN3T3kxZnIvZhMi8WdC21Y6GC6zoQgbI2z1t7JAZF9c4xZiomlanwVnurcpyfEdyMpg== + dependencies: + "@noble/curves" "1.7.0" + "@noble/hashes" "1.6.0" + "@scure/base" "1.2.1" + "@scure/starknet" "1.1.0" + abi-wan-kanabi "^2.2.3" + fetch-cookie "~3.0.0" + isomorphic-fetch "~3.0.0" + lossless-json "^4.0.1" + pako "^2.0.4" + starknet-types-07 "npm:@starknet-io/types-js@^0.7.10" + ts-mixer "^6.0.3" + starknetkit@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/starknetkit/-/starknetkit-2.4.0.tgz#922dacd4686755bdabe2dc1825c990aa5bf0195a" @@ -6574,6 +8140,11 @@ std-env@^3.7.0: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== + stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" @@ -6591,6 +8162,16 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== +streamx@^2.15.0, streamx@^2.21.0: + version "2.22.0" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.22.0.tgz#cd7b5e57c95aaef0ff9b2aef7905afa62ec6e4a7" + integrity sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw== + dependencies: + fast-fifo "^1.3.2" + text-decoder "^1.1.0" + optionalDependencies: + bare-events "^2.2.0" + strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -6657,6 +8238,19 @@ string.prototype.repeat@^1.0.0: define-properties "^1.1.3" es-abstract "^1.17.5" +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + string.prototype.trim@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" @@ -6676,6 +8270,16 @@ string.prototype.trimend@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string.prototype.trimstart@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" @@ -6692,6 +8296,13 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -6840,11 +8451,43 @@ tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-fs@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.8.tgz#8f62012537d5ff89252d01e48690dc4ebed33ab7" + integrity sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg== + dependencies: + pump "^3.0.0" + tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^4.0.1" + bare-path "^3.0.0" + +tar-stream@^3.1.5: + version "3.1.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + +text-decoder@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.3.tgz#b19da364d981b2326d5f43099c310cc80d770c65" + integrity sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA== + dependencies: + b4a "^1.6.4" + text-extensions@^2.0.0: version "2.4.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -6898,6 +8541,13 @@ tldts@^6.1.32: dependencies: tldts-core "^6.1.84" +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -6915,6 +8565,16 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== +tough-cookie@^4.0.0, tough-cookie@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + tough-cookie@^5.0.0: version "5.1.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.2.tgz#66d774b4a1d9e12dc75089725af3ac75ec31bed7" @@ -6927,6 +8587,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + trpc-browser@^1.3.2: version "1.4.2" resolved "https://registry.yarnpkg.com/trpc-browser/-/trpc-browser-1.4.2.tgz#bcfd6cf04634567feb782b90606d6cef950f236c" @@ -6974,11 +8639,28 @@ tslib@2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: +tslib@2.7.0, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: version "2.7.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== +tslib@^2.0.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -6991,6 +8673,11 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + type-fest@^3.8.0: version "3.13.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" @@ -7010,6 +8697,15 @@ typed-array-buffer@^1.0.2: es-errors "^1.3.0" is-typed-array "^1.1.13" +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + typed-array-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" @@ -7021,6 +8717,17 @@ typed-array-byte-length@^1.0.1: has-proto "^1.0.3" is-typed-array "^1.1.13" +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + typed-array-byte-offset@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" @@ -7033,6 +8740,19 @@ typed-array-byte-offset@^1.0.2: has-proto "^1.0.3" is-typed-array "^1.1.13" +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + typed-array-length@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" @@ -7045,6 +8765,23 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typed-query-selector@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz#92b65dbc0a42655fccf4aeb1a08b1dddce8af5f2" + integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg== + typescript@5: version "5.6.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" @@ -7089,6 +8826,16 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + uncrypto@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" @@ -7099,6 +8846,11 @@ undici-types@~6.19.2: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + unenv@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/unenv/-/unenv-1.10.0.tgz#c3394a6c6e4cfe68d699f87af456fe3f0db39571" @@ -7110,6 +8862,11 @@ unenv@^1.9.0: node-fetch-native "^1.6.4" pathe "^1.1.2" +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + universalify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" @@ -7165,6 +8922,14 @@ url-join@^4.0.1: resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + use-callback-ref@^1.3.0, use-callback-ref@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz#6134c7f6ff76e2be0b56c809b17a650c942b1693" @@ -7195,11 +8960,16 @@ use-sync-external-store@^1.2.2: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== -util-deprecate@^1.0.1, util-deprecate@^1.0.2: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -7208,6 +8978,15 @@ validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + viem@^2.19.1: version "2.23.12" resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.12.tgz#5b1d7ff9142cb8f48c2783fa5eff1e774a3089a9" @@ -7251,6 +9030,17 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + which-builtin-type@^1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" @@ -7269,6 +9059,25 @@ which-builtin-type@^1.1.3: which-collection "^1.0.2" which-typed-array "^1.1.15" +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + which-collection@^1.0.1, which-collection@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" @@ -7290,6 +9099,19 @@ which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: gopd "^1.0.1" has-tostringtag "^1.0.2" +which-typed-array@^1.1.16, which-typed-array@^1.1.18: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -7297,6 +9119,32 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +winston-transport@^4.9.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.9.0.tgz#3bba345de10297654ea6f33519424560003b3bf9" + integrity sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A== + dependencies: + logform "^2.7.0" + readable-stream "^3.6.2" + triple-beam "^1.3.0" + +winston@^3.13.0: + version "3.17.0" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.17.0.tgz#74b8665ce9b4ea7b29d0922cfccf852a08a11423" + integrity sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw== + dependencies: + "@colors/colors" "^1.6.0" + "@dabh/diagnostics" "^2.0.2" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.7.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.9.0" + wonka@6.3.4: version "6.3.4" resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.4.tgz#76eb9316e3d67d7febf4945202b5bdb2db534594" @@ -7321,6 +9169,15 @@ wordwrap@^1.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -7344,7 +9201,12 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@8.18.1: +ws@8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + +ws@8.18.1, ws@^8.18.1: version "8.18.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== @@ -7364,6 +9226,11 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" @@ -7387,6 +9254,14 @@ yargs@^17.7.2: y18n "^5.0.5" yargs-parser "^21.1.1" +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" @@ -7397,6 +9272,11 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== +yoctocolors-cjs@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== + zen-observable-ts@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz#6c6d9ea3d3a842812c6e9519209365a122ba8b58" @@ -7414,6 +9294,11 @@ zod@^3.22.4: resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== +zod@^3.24.1: + version "3.24.2" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3" + integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== + zustand@^4.4.0: version "4.5.6" resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.6.tgz#6857d52af44874a79fb3408c9473f78367255c96" From 8bf094656c20de9acde02ee63bd2eff8bbccb00f Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Tue, 15 Apr 2025 19:54:45 +0530 Subject: [PATCH 20/30] update rewards APY --- src/app/api/lib.ts | 42 ++++++++++++++++++++++++++++----- src/app/api/rewards/route.ts | 6 ++++- src/app/api/strategies/route.ts | 1 + 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/app/api/lib.ts b/src/app/api/lib.ts index 335698d7..5b1c8209 100644 --- a/src/app/api/lib.ts +++ b/src/app/api/lib.ts @@ -1,5 +1,5 @@ import { Redis } from '@upstash/redis'; -import { Contract, RpcProvider } from 'starknet'; +import { Contract, RpcProvider, uint256 } from 'starknet'; const kvRedis = new Redis({ url: process.env.VK_REDIS_KV_REST_API_URL, @@ -35,10 +35,13 @@ export const getRewardsInfo = async ( tvlUsd: number; depositToken: string[]; id: string; + contract: { + address: string; + }[]; }[], ) => { const funder = - '0x03495DD1e4838aa06666aac236036D86E81A6553e222FC02e70C2Cbc0062e8d0'; + '0x02D6cf6182259ee62A001EfC67e62C1fbc0dF109D2AA4163EB70D6d1074F0173'; const allowedStrats = [ { id: 'vesu_fusion_eth', @@ -47,7 +50,8 @@ export const getRewardsInfo = async ( maxAPY: 100, // in percent underlyingTokenName: 'ETH', decimals: 18, - rewardToken: '', + rewardToken: + '0x021fe2ca1b7e731e4a5ef7df2881356070c5d72db4b2d19f9195f6b641f75df0', }, ]; @@ -60,7 +64,11 @@ export const getRewardsInfo = async ( reward: number; tvlUsd: number; rewardAPY: number; + rewardDecimals: number; maxRewardsPerDay: number; + rewardToken: string; + funder: string; + receiver: string; }[] = []; for (const strat of strategies) { const stratId = strat.id; @@ -73,8 +81,27 @@ export const getRewardsInfo = async ( `${process.env.HOSTNAME}/api/price/${stratAllowed.underlyingTokenName}`, ); const priceData = await priceResponse.json(); - const tokenPrice = priceData.price; - // ! consider token price of vToken + // consider token price of vToken + const clsVToken = await provider.getClassAt(stratAllowed.rewardToken); + const tokenContractVToken = new Contract( + clsVToken.abi, + stratAllowed.rewardToken, + provider, + ); + const shareValue = await tokenContractVToken.call('convert_to_assets', [ + uint256.bnToUint256((1e18).toString()), + ]); + console.log(`shareValue::${stratId}::${shareValue}`); + const tokenPrice = + (priceData.price * + Number( + (BigInt(shareValue.toString()) * BigInt(10000)) / + BigInt((1e18).toString()), + )) / + 10000; + console.log( + `RewardCalc::${stratId}::tokenPrice::${tokenPrice}, underlyingTokenPrice::${priceData.price}`, + ); const tvlUsd = strat.tvlUsd; console.log(`RewardCalc::${stratId}::tvlUsd::${tvlUsd}`); @@ -86,7 +113,6 @@ export const getRewardsInfo = async ( `RewardCalc::${stratId}::ewardBasedOnTVL::${rewardBasedOnTVL}`, ); console.log(`RewardCalc::${stratId}::tvl::${tvlUsd}`); - console.log(`RewardCalc::${stratId}::tokenPrice::${tokenPrice}`); // Ensure the reward does not exceed max rewards per day let finalReward = Math.min( @@ -116,9 +142,13 @@ export const getRewardsInfo = async ( rewardsInfo.push({ id: stratId, reward: finalReward, + rewardDecimals: stratAllowed.decimals, tvlUsd, rewardAPY: ((finalReward * 24 * 365) / (tvlUsd / tokenPrice)) * 100, maxRewardsPerDay: stratAllowed.maxRewardsPerDay, + rewardToken: stratAllowed.rewardToken, + funder, + receiver: strat.contract[0].address, }); } } diff --git a/src/app/api/rewards/route.ts b/src/app/api/rewards/route.ts index 885527ba..811d1d76 100644 --- a/src/app/api/rewards/route.ts +++ b/src/app/api/rewards/route.ts @@ -2,12 +2,16 @@ import { NextResponse } from 'next/server'; import { getRewardsInfo } from '../lib'; export async function GET(_request: Request) { - const result = await fetch(`${process.env.HOSTNAME}/api/strategies`); + console.log('GET /api/rewards '); + const result = await fetch( + `${process.env.HOSTNAME}/api/strategies?no_cache=true`, + ); const stratsRes = await result.json(); const strategies = stratsRes.strategies; const lastUpdated = new Date(stratsRes.lastUpdated); const now = new Date(); if (now.getTime() - lastUpdated.getTime() > 60000000) { + console.error('Strategies are stale', lastUpdated, now); return new Response('Strategies are stale', { status: 500, }); diff --git a/src/app/api/strategies/route.ts b/src/app/api/strategies/route.ts index cd3eca1f..2b854a5f 100755 --- a/src/app/api/strategies/route.ts +++ b/src/app/api/strategies/route.ts @@ -113,6 +113,7 @@ async function getStrategyInfo( id: strategy.id, tvlUsd: data.tvlUsd, depositToken: data.depositToken, + contract: data.contract, }, ]); if (rewardsInfo.length > 0) { From f3c63bf4204eb274a3249119eb28f0a4089cfa90 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Wed, 16 Apr 2025 11:47:01 +0530 Subject: [PATCH 21/30] fix strats sorting bug --- src/app/api/strategies/route.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/app/api/strategies/route.ts b/src/app/api/strategies/route.ts index 2b854a5f..d3024490 100755 --- a/src/app/api/strategies/route.ts +++ b/src/app/api/strategies/route.ts @@ -154,27 +154,27 @@ export async function GET(req: Request) { // } // }); - const stratsDataProms: any[] = []; - const _strats = strategies.sort((a, b) => { + const stratsDataProms: Promise[] = []; + for (let i = 0; i < strategies.length; i++) { + stratsDataProms.push(getStrategyInfo(strategies[i])); + } + const stratsData = await Promise.all(stratsDataProms); + + const _strats = stratsData.sort((a, b) => { // sort based on risk factor, live status and apy const aRisk = a.riskFactor; const bRisk = b.riskFactor; - const aLive = getLiveStatusNumber(a.liveStatus); - const bLive = getLiveStatusNumber(b.liveStatus); + const aLive = a.status.number; + const bLive = b.status.number; if (aLive !== bLive) return aLive - bLive; if (aRisk !== bRisk) return aRisk - bRisk; - return b.netYield - a.netYield; + return b.apy - a.apy; }); - for (let i = 0; i < _strats.length; i++) { - stratsDataProms.push(getStrategyInfo(_strats[i])); - } - - const stratsData = await Promise.all(stratsDataProms); try { const data = { status: true, - strategies: stratsData, + strategies: _strats, lastUpdated: new Date().toISOString(), }; await kvRedis.set(REDIS_KEY, data); From e956b16f3d0168c54927502e3825619297f5e0ff Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Wed, 16 Apr 2025 16:39:47 +0530 Subject: [PATCH 22/30] update rewards apy --- src/app/api/lib.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/lib.ts b/src/app/api/lib.ts index 5b1c8209..9e7416c2 100644 --- a/src/app/api/lib.ts +++ b/src/app/api/lib.ts @@ -47,7 +47,7 @@ export const getRewardsInfo = async ( id: 'vesu_fusion_eth', // ! consider exchange rate of vToken maxRewardsPerDay: 0.073, // in token units - maxAPY: 100, // in percent + maxAPY: 200, // in percent underlyingTokenName: 'ETH', decimals: 18, rewardToken: From b7b39424e6a53ec1893782790652bbd48a41eb66 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Wed, 16 Apr 2025 18:38:48 +0530 Subject: [PATCH 23/30] @strkfarm/sdk tokens fix --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 04e4c205..c54b6abe 100755 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@prisma/client": "5.18.0", "@starknet-react/chains": "3.0.0", "@starknet-react/core": "3.0.1", - "@strkfarm/sdk": "^1.0.32", + "@strkfarm/sdk": "^1.0.34", "@tanstack/query-core": "5.28.0", "@types/mixpanel-browser": "2.49.0", "@types/mustache": "4.2.5", diff --git a/yarn.lock b/yarn.lock index f4338d7f..e0714e6e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2205,10 +2205,10 @@ viem "^2.19.1" zod "^3.22.4" -"@strkfarm/sdk@^1.0.32": - version "1.0.32" - resolved "https://registry.yarnpkg.com/@strkfarm/sdk/-/sdk-1.0.32.tgz#28e38eb1ce4da87033771ebb1ec01ea6356d219f" - integrity sha512-6tIkd2yWDweBsBGO1cYNrm04QTtNlMZyuEfZSk3BAl7ffoXI10L1TwExHpd2NGmMVz6xgEpvQiFK81i1fZSkbw== +"@strkfarm/sdk@^1.0.34": + version "1.0.34" + resolved "https://registry.yarnpkg.com/@strkfarm/sdk/-/sdk-1.0.34.tgz#132d65a1731133e613631d9ec3716f4577113ef1" + integrity sha512-vo1J/G2ONgEwNfcd3md4hmersFNmXb5ap1FSb5v5jp7BsiIllNtYh2YmZQNr3bK6iDSqzuLjyBbcn0kbnGhAmw== dependencies: "@avnu/avnu-sdk" "^3.0.2" axios "^1.7.2" From 136a271c8f46cf042eeb41aef930d997f8ccc444 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Thu, 17 Apr 2025 09:45:06 +0530 Subject: [PATCH 24/30] convert rewards API to dynamic --- src/app/api/rewards/route.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/app/api/rewards/route.ts b/src/app/api/rewards/route.ts index 811d1d76..626cbac9 100644 --- a/src/app/api/rewards/route.ts +++ b/src/app/api/rewards/route.ts @@ -1,6 +1,9 @@ import { NextResponse } from 'next/server'; import { getRewardsInfo } from '../lib'; +export const revalidate = 0; +export const dynamic = 'force-dynamic'; + export async function GET(_request: Request) { console.log('GET /api/rewards '); const result = await fetch( From bb4dd26ea532fde34f1ce0f0908fd9d827cebe62 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Thu, 17 Apr 2025 12:11:17 +0530 Subject: [PATCH 25/30] improve APY tooltips --- src/components/HarvestTime.tsx | 76 +++++++++++++++++++++++++++------- src/components/YieldCard.tsx | 58 ++++++++++++++++---------- src/store/strkfarm.atoms.ts | 2 +- 3 files changed, 96 insertions(+), 40 deletions(-) diff --git a/src/components/HarvestTime.tsx b/src/components/HarvestTime.tsx index 83939a05..e7b9f701 100644 --- a/src/components/HarvestTime.tsx +++ b/src/components/HarvestTime.tsx @@ -2,9 +2,11 @@ import React, { useMemo } from 'react'; import { Box, Flex, + Spinner, Stat, StatLabel, StatNumber, + Tag, Text, Tooltip, } from '@chakra-ui/react'; @@ -97,7 +99,47 @@ const HarvestTime: React.FC = ({ strategy, balData }) => { + + {strategy.metadata.apyMethodology || defaultAPYTooltip} + + {strategyInfo && ( + + + Strategy APY: + + Including fees and Defi spring rewards + + + + {(strategyInfo.apySplit.baseApy * 100).toFixed(2)}% + + + )} + {strategyInfo && strategyInfo.apySplit.rewardsApy > 0 && ( + + + Rewards APY: + + Incentives by STRKFarm + + + + {(strategyInfo.apySplit.rewardsApy * 100).toFixed(2)}% + + + )} + + } > = ({ strategy, balData }) => { - {/* - - - 🔥{leverage.toFixed(2)}x boosted - {leverage == 0 && ( - - )} - - - */} + {strategyInfo && strategyInfo.apySplit.rewardsApy > 0 && ( + + + + 🔥 Boosted + {leverage == 0 && ( + + )} + + + + )} {!isMobile && !strategy.settings.hideHarvestInfo && ( diff --git a/src/components/YieldCard.tsx b/src/components/YieldCard.tsx index 423720b4..770adeb4 100644 --- a/src/components/YieldCard.tsx +++ b/src/components/YieldCard.tsx @@ -136,11 +136,18 @@ function getAPRWithToolTip(pool: PoolInfo) { {pool.aprSplits.map((split) => { return ( - - - {split.title} {split.description ? `(${split.description})` : ''} - - + + + {split.title}: + + {split.description} + + + {split.apr === 'Err' ? split.apr : (split.apr * 100).toFixed(2)}% @@ -191,25 +198,30 @@ function StrategyAPY(props: YieldCardProps) { <> {getAPRWithToolTip(pool)} - {/* {pool.additional && pool.additional.leverage && ( - - - - - ⚡ - - - {pool.additional.leverage.toFixed(1)}X - + {pool.aprSplits.length && + pool.aprSplits.some((a) => a.title == 'Rewards APY') && ( + + + + + ⚡ + + + Boosted + + - - - )} */} + + )} )} diff --git a/src/store/strkfarm.atoms.ts b/src/store/strkfarm.atoms.ts index f05c80ad..f17b017b 100644 --- a/src/store/strkfarm.atoms.ts +++ b/src/store/strkfarm.atoms.ts @@ -72,7 +72,7 @@ export class STRKFarm extends IDapp { rewardsApy.push({ apr: rawPool.apySplit.rewardsApy, title: 'Rewards APY', - description: 'Additional incentives by STRKFarm', + description: 'Incentives by STRKFarm', }); } From 4e787c512e88166c58d7d325a3a9f8c0805675e7 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Fri, 18 Apr 2025 16:46:34 +0530 Subject: [PATCH 26/30] update strategies route --- src/app/api/strategies/route.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/app/api/strategies/route.ts b/src/app/api/strategies/route.ts index d3024490..3c84eb0f 100755 --- a/src/app/api/strategies/route.ts +++ b/src/app/api/strategies/route.ts @@ -74,7 +74,12 @@ async function getStrategyInfo( provider, isMax: false, }) - ).map((t) => t.amounts[0].tokenInfo.address.address), + )[0].amounts.map((t) => ({ + symbol: t.tokenInfo.symbol, + name: t.tokenInfo.name, + address: t.tokenInfo.address.address, + decimals: t.tokenInfo.decimals, + })), leverage: strategy.leverage, contract: strategy.holdingTokens.map((t) => ({ name: t.name, From 3631c6a5ac4089caea8aafeca35d40ba18c3bca6 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Fri, 18 Apr 2025 16:48:20 +0530 Subject: [PATCH 27/30] update strategies route [2] --- src/app/api/lib.ts | 10 ++-------- src/app/api/strategies/route.ts | 1 - src/store/strkfarm.atoms.ts | 7 ++++++- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/app/api/lib.ts b/src/app/api/lib.ts index 9e7416c2..2ed0210d 100644 --- a/src/app/api/lib.ts +++ b/src/app/api/lib.ts @@ -1,3 +1,4 @@ +import { STRKFarmStrategyAPIResult } from '@/store/strkfarm.atoms'; import { Redis } from '@upstash/redis'; import { Contract, RpcProvider, uint256 } from 'starknet'; @@ -31,14 +32,7 @@ export async function getDataFromRedis( export default kvRedis; export const getRewardsInfo = async ( - strategies: { - tvlUsd: number; - depositToken: string[]; - id: string; - contract: { - address: string; - }[]; - }[], + strategies: Pick[], ) => { const funder = '0x02D6cf6182259ee62A001EfC67e62C1fbc0dF109D2AA4163EB70D6d1074F0173'; diff --git a/src/app/api/strategies/route.ts b/src/app/api/strategies/route.ts index 3c84eb0f..cc6981b6 100755 --- a/src/app/api/strategies/route.ts +++ b/src/app/api/strategies/route.ts @@ -117,7 +117,6 @@ async function getStrategyInfo( { id: strategy.id, tvlUsd: data.tvlUsd, - depositToken: data.depositToken, contract: data.contract, }, ]); diff --git a/src/store/strkfarm.atoms.ts b/src/store/strkfarm.atoms.ts index f17b017b..79acf8b3 100644 --- a/src/store/strkfarm.atoms.ts +++ b/src/store/strkfarm.atoms.ts @@ -23,7 +23,12 @@ export interface STRKFarmStrategyAPIResult { baseApy: number; rewardsApy: number; }; - depositToken: string[]; + depositToken: { + name: string; + address: string; + symbol: string; + decimals: number; + }[]; leverage: number; contract: { name: string; address: string }[]; tvlUsd: number; From afb1d82b21d3dbd0686abc1acbac0393f7e372f9 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Fri, 18 Apr 2025 16:56:49 +0530 Subject: [PATCH 28/30] add ekubo docs --- src/components/AmountInput.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/AmountInput.tsx b/src/components/AmountInput.tsx index 184e34eb..990b2209 100644 --- a/src/components/AmountInput.tsx +++ b/src/components/AmountInput.tsx @@ -602,7 +602,10 @@ const AmountInput = forwardRef( ?.symbol } .{' '} - + Learn more . From ab47350c1569306807492907cef2e2aa32094556 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Fri, 18 Apr 2025 18:25:31 +0530 Subject: [PATCH 29/30] update rewards --- src/app/api/lib.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/lib.ts b/src/app/api/lib.ts index 2ed0210d..12a9a1ab 100644 --- a/src/app/api/lib.ts +++ b/src/app/api/lib.ts @@ -40,7 +40,7 @@ export const getRewardsInfo = async ( { id: 'vesu_fusion_eth', // ! consider exchange rate of vToken - maxRewardsPerDay: 0.073, // in token units + maxRewardsPerDay: 0.047, // in token units maxAPY: 200, // in percent underlyingTokenName: 'ETH', decimals: 18, From d752a9ea92944e9612c24bb69b328a4b97668f83 Mon Sep 17 00:00:00 2001 From: akiraonstarknet Date: Mon, 21 Apr 2025 16:59:57 +0530 Subject: [PATCH 30/30] fix usdt logo --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c54b6abe..4f3971fa 100755 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@prisma/client": "5.18.0", "@starknet-react/chains": "3.0.0", "@starknet-react/core": "3.0.1", - "@strkfarm/sdk": "^1.0.34", + "@strkfarm/sdk": "^1.0.35", "@tanstack/query-core": "5.28.0", "@types/mixpanel-browser": "2.49.0", "@types/mustache": "4.2.5", diff --git a/yarn.lock b/yarn.lock index e0714e6e..cd5018b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2205,10 +2205,10 @@ viem "^2.19.1" zod "^3.22.4" -"@strkfarm/sdk@^1.0.34": - version "1.0.34" - resolved "https://registry.yarnpkg.com/@strkfarm/sdk/-/sdk-1.0.34.tgz#132d65a1731133e613631d9ec3716f4577113ef1" - integrity sha512-vo1J/G2ONgEwNfcd3md4hmersFNmXb5ap1FSb5v5jp7BsiIllNtYh2YmZQNr3bK6iDSqzuLjyBbcn0kbnGhAmw== +"@strkfarm/sdk@^1.0.35": + version "1.0.35" + resolved "https://registry.yarnpkg.com/@strkfarm/sdk/-/sdk-1.0.35.tgz#307cd2beb53cb12bc66c4aab08560ff5b316ca5e" + integrity sha512-QG1Oes92QwUvusG8kY8GFWE3CxHr5Zde/ZM9bU1DhwGk0FRMkj0TbN19pNnVOEv4Odw9Tj990uISFphBm/mhHw== dependencies: "@avnu/avnu-sdk" "^3.0.2" axios "^1.7.2"